arch,sim: Make copyStringArray take an explicit endianness.

Change-Id: I5cf4291b19dd2d2bdbbf145ad8e00994fabf5547
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/22366
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Brandon Potter <Brandon.Potter@amd.com>
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Gabe Black
2019-10-29 15:59:35 -07:00
parent 4444e88e5b
commit c98fc78926
7 changed files with 26 additions and 14 deletions

View File

@@ -156,8 +156,10 @@ AlphaProcess::argsInit(int intSize, int pageSize)
initVirtMem.writeBlob(memState->getStackMin(), &argc, intSize);
copyStringArray(argv, argv_array_base, arg_data_base, initVirtMem);
copyStringArray(envp, envp_array_base, env_data_base, initVirtMem);
copyStringArray(argv, argv_array_base, arg_data_base,
LittleEndianByteOrder, initVirtMem);
copyStringArray(envp, envp_array_base, env_data_base,
LittleEndianByteOrder, initVirtMem);
//Copy the aux stuff
Addr auxv_array_end = auxv_array_base;

View File

@@ -434,8 +434,10 @@ ArmProcess::argsInit(int pageSize, IntRegIndex spIndex)
initVirtMem.write(auxv_array_end, zero);
auxv_array_end += sizeof(zero);
copyStringArray(envp, envp_array_base, env_data_base, initVirtMem);
copyStringArray(argv, argv_array_base, arg_data_base, initVirtMem);
copyStringArray(envp, envp_array_base, env_data_base,
LittleEndianByteOrder, initVirtMem);
copyStringArray(argv, argv_array_base, arg_data_base,
LittleEndianByteOrder, initVirtMem);
initVirtMem.writeBlob(argc_base, &guestArgc, intSize);

View File

@@ -165,9 +165,11 @@ MipsProcess::argsInit(int pageSize)
initVirtMem.writeBlob(memState->getStackMin(), &argc, intSize);
copyStringArray(argv, argv_array_base, arg_data_base, initVirtMem);
copyStringArray(argv, argv_array_base, arg_data_base,
LittleEndianByteOrder, initVirtMem);
copyStringArray(envp, envp_array_base, env_data_base, initVirtMem);
copyStringArray(envp, envp_array_base, env_data_base,
LittleEndianByteOrder, initVirtMem);
// Copy the aux vector
Addr auxv_array_end = auxv_array_base;

View File

@@ -254,8 +254,10 @@ PowerProcess::argsInit(int intSize, int pageSize)
initVirtMem.write(auxv_array_end, zero);
auxv_array_end += sizeof(zero);
copyStringArray(envp, envp_array_base, env_data_base, initVirtMem);
copyStringArray(argv, argv_array_base, arg_data_base, initVirtMem);
copyStringArray(envp, envp_array_base, env_data_base,
BigEndianByteOrder, initVirtMem);
copyStringArray(argv, argv_array_base, arg_data_base,
BigEndianByteOrder, initVirtMem);
initVirtMem.writeBlob(argc_base, &guestArgc, intSize);

View File

@@ -375,8 +375,10 @@ SparcProcess::argsInit(int pageSize)
initVirtMem.write(auxv_array_end, zero);
auxv_array_end += sizeof(zero);
copyStringArray(envp, envp_array_base, env_data_base, initVirtMem);
copyStringArray(argv, argv_array_base, arg_data_base, initVirtMem);
copyStringArray(envp, envp_array_base, env_data_base,
BigEndianByteOrder, initVirtMem);
copyStringArray(argv, argv_array_base, arg_data_base,
BigEndianByteOrder, initVirtMem);
initVirtMem.writeBlob(argc_base, &guestArgc, intSize);

View File

@@ -1017,8 +1017,10 @@ X86Process::argsInit(int pageSize,
initVirtMem.writeString(aux_data_base, platform.c_str());
copyStringArray(envp, envp_array_base, env_data_base, initVirtMem);
copyStringArray(argv, argv_array_base, arg_data_base, initVirtMem);
copyStringArray(envp, envp_array_base, env_data_base,
LittleEndianByteOrder, initVirtMem);
copyStringArray(argv, argv_array_base, arg_data_base,
LittleEndianByteOrder, initVirtMem);
initVirtMem.writeBlob(argc_base, &guestArgc, intSize);

View File

@@ -42,11 +42,11 @@ template<class AddrType>
void
copyStringArray(std::vector<std::string> &strings,
AddrType array_ptr, AddrType data_ptr,
PortProxy& memProxy)
const ByteOrder bo, PortProxy& memProxy)
{
AddrType data_ptr_swap;
for (std::vector<std::string>::size_type i = 0; i < strings.size(); ++i) {
data_ptr_swap = TheISA::htog(data_ptr);
data_ptr_swap = htog(data_ptr, bo);
memProxy.writeBlob(array_ptr, &data_ptr_swap, sizeof(AddrType));
memProxy.writeString(data_ptr, strings[i].c_str());
array_ptr += sizeof(AddrType);