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:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user