765,766c765
< typedef AuxVector<IntType> auxv_t;
< std::vector<auxv_t> auxv = extraAuxvs;
---
> std::vector<AuxVector<IntType>> auxv = extraAuxvs;
862c861
< auxv.push_back(auxv_t(M5_AT_HWCAP, features));
---
> auxv.emplace_back(M5_AT_HWCAP, features);
864c863
< auxv.push_back(auxv_t(M5_AT_PAGESZ, X86ISA::PageBytes));
---
> auxv.emplace_back(M5_AT_PAGESZ, X86ISA::PageBytes);
867c866
< auxv.push_back(auxv_t(M5_AT_CLKTCK, 100));
---
> auxv.emplace_back(M5_AT_CLKTCK, 100);
870c869
< auxv.push_back(auxv_t(M5_AT_PHDR, elfObject->programHeaderTable()));
---
> auxv.emplace_back(M5_AT_PHDR, elfObject->programHeaderTable());
872c871
< auxv.push_back(auxv_t(M5_AT_PHENT, elfObject->programHeaderSize()));
---
> auxv.emplace_back(M5_AT_PHENT, elfObject->programHeaderSize());
874c873
< auxv.push_back(auxv_t(M5_AT_PHNUM, elfObject->programHeaderCount()));
---
> auxv.emplace_back(M5_AT_PHNUM, elfObject->programHeaderCount());
878c877
< auxv.push_back(auxv_t(M5_AT_BASE, getBias()));
---
> auxv.emplace_back(M5_AT_BASE, getBias());
880c879
< auxv.push_back(auxv_t(M5_AT_FLAGS, 0));
---
> auxv.emplace_back(M5_AT_FLAGS, 0);
882c881
< auxv.push_back(auxv_t(M5_AT_ENTRY, objFile->entryPoint()));
---
> auxv.emplace_back(M5_AT_ENTRY, objFile->entryPoint());
884,887c883,886
< auxv.push_back(auxv_t(M5_AT_UID, uid()));
< auxv.push_back(auxv_t(M5_AT_EUID, euid()));
< auxv.push_back(auxv_t(M5_AT_GID, gid()));
< auxv.push_back(auxv_t(M5_AT_EGID, egid()));
---
> auxv.emplace_back(M5_AT_UID, uid());
> auxv.emplace_back(M5_AT_EUID, euid());
> auxv.emplace_back(M5_AT_GID, gid());
> auxv.emplace_back(M5_AT_EGID, egid());
889c888
< auxv.push_back(auxv_t(M5_AT_SECURE, 0));
---
> auxv.emplace_back(M5_AT_SECURE, 0);
891c890
< auxv.push_back(auxv_t(M5_AT_RANDOM, 0));
---
> auxv.emplace_back(M5_AT_RANDOM, 0);
893c892
< auxv.push_back(auxv_t(M5_AT_EXECFN, 0));
---
> auxv.emplace_back(M5_AT_EXECFN, 0);
895c894
< auxv.push_back(auxv_t(M5_AT_PLATFORM, 0));
---
> auxv.emplace_back(M5_AT_PLATFORM, 0);
1009,1014c1008,1013
< assert(auxv[auxv.size() - 3].getHostAuxType() == M5_AT_RANDOM);
< auxv[auxv.size() - 3].setAuxVal(aux_data_base);
< assert(auxv[auxv.size() - 2].getHostAuxType() == M5_AT_EXECFN);
< auxv[auxv.size() - 2].setAuxVal(argv_array_base);
< assert(auxv[auxv.size() - 1].getHostAuxType() == M5_AT_PLATFORM);
< auxv[auxv.size() - 1].setAuxVal(aux_data_base + numRandomBytes);
---
> assert(auxv[auxv.size() - 3].type == M5_AT_RANDOM);
> auxv[auxv.size() - 3].val = aux_data_base;
> assert(auxv[auxv.size() - 2].type == M5_AT_EXECFN);
> auxv[auxv.size() - 2].val = argv_array_base;
> assert(auxv[auxv.size() - 1].type == M5_AT_PLATFORM);
> auxv[auxv.size() - 1].val = aux_data_base + numRandomBytes;
1018,1024c1017,1020
< for (int x = 0; x < auxv.size(); x++) {
< initVirtMem.writeBlob(auxv_array_base + x * 2 * intSize,
< (uint8_t*)&(auxv[x].getAuxType()),
< intSize);
< initVirtMem.writeBlob(auxv_array_base + (x * 2 + 1) * intSize,
< (uint8_t*)&(auxv[x].getAuxVal()),
< intSize);
---
> Addr auxv_array_end = auxv_array_base;
> for (const auto &aux: auxv) {
> initVirtMem.write(auxv_array_end, aux, GuestByteOrder);
> auxv_array_end += sizeof(aux);
1027,1031c1023,1025
< const uint64_t zero = 0;
< initVirtMem.writeBlob(auxv_array_base + auxv.size() * 2 * intSize,
< (uint8_t*)&zero, intSize);
< initVirtMem.writeBlob(auxv_array_base + (auxv.size() * 2 + 1) * intSize,
< (uint8_t*)&zero, intSize);
---
> const AuxVector<uint64_t> zero(0, 0);
> initVirtMem.write(auxv_array_end, zero);
> auxv_array_end += sizeof(zero);
1056,1057c1050
< extraAuxvs.push_back(AuxVector<uint64_t>(M5_AT_SYSINFO_EHDR,
< vsyscallPage.base));
---
> extraAuxvs.emplace_back(M5_AT_SYSINFO_EHDR, vsyscallPage.base);
1066,1069c1059,1061
< extraAuxvs.push_back(AuxVector<uint32_t>(M5_AT_SYSINFO,
< vsyscallPage.base + vsyscallPage.vsyscallOffset));
< extraAuxvs.push_back(AuxVector<uint32_t>(M5_AT_SYSINFO_EHDR,
< vsyscallPage.base));
---
> extraAuxvs.emplace_back(M5_AT_SYSINFO,
> vsyscallPage.base + vsyscallPage.vsyscallOffset);
> extraAuxvs.emplace_back(M5_AT_SYSINFO_EHDR, vsyscallPage.base);