Index: lld/trunk/ELF/Config.h =================================================================== --- lld/trunk/ELF/Config.h +++ lld/trunk/ELF/Config.h @@ -117,7 +117,7 @@ ELFKind EKind = ELFNoneKind; uint16_t EMachine = llvm::ELF::EM_NONE; uint64_t EntryAddr = -1; - uint64_t VAStart; + uint64_t ImageBase; unsigned LtoJobs; unsigned LtoO; unsigned Optimize; Index: lld/trunk/ELF/Driver.cpp =================================================================== --- lld/trunk/ELF/Driver.cpp +++ lld/trunk/ELF/Driver.cpp @@ -535,12 +535,12 @@ if (auto *Arg = Args.getLastArg(OPT_image_base)) { StringRef S = Arg->getValue(); - if (S.getAsInteger(0, Config->VAStart)) + if (S.getAsInteger(0, Config->ImageBase)) error(Arg->getSpelling() + ": number expected, but got " + S); - else if ((Config->VAStart % Target->PageSize) != 0) + else if ((Config->ImageBase % Target->PageSize) != 0) warning(Arg->getSpelling() + ": address isn't multiple of page size"); } else { - Config->VAStart = Target->getVAStart(); + Config->ImageBase = Target->getImageBase(); } for (std::unique_ptr &F : Files) Index: lld/trunk/ELF/OutputSections.cpp =================================================================== --- lld/trunk/ELF/OutputSections.cpp +++ lld/trunk/ELF/OutputSections.cpp @@ -724,7 +724,7 @@ if (Config->EMachine == EM_MIPS) { Add({DT_MIPS_RLD_VERSION, 1}); Add({DT_MIPS_FLAGS, RHF_NOTPOT}); - Add({DT_MIPS_BASE_ADDRESS, (uintX_t)Target->getVAStart()}); + Add({DT_MIPS_BASE_ADDRESS, (uintX_t)Target->getImageBase()}); Add({DT_MIPS_SYMTABNO, Out::DynSymTab->getNumSymbols()}); Add({DT_MIPS_LOCAL_GOTNO, Out::Got->getMipsLocalEntriesNum()}); if (const SymbolBody *B = Out::Got->getMipsFirstGlobalEntry()) Index: lld/trunk/ELF/Target.h =================================================================== --- lld/trunk/ELF/Target.h +++ lld/trunk/ELF/Target.h @@ -23,7 +23,7 @@ class TargetInfo { public: - uint64_t getVAStart() const; + uint64_t getImageBase() const; virtual bool isTlsInitialExecRel(uint32_t Type) const; virtual bool isTlsLocalDynamicRel(uint32_t Type) const; virtual bool isTlsGlobalDynamicRel(uint32_t Type) const; @@ -70,7 +70,7 @@ // Given that, the smallest value that can be used in here is 0x10000. // If using 2MB pages, the smallest page aligned address that works is // 0x200000, but it looks like every OS uses 4k pages for executables. - uint64_t VAStart = 0x10000; + uint64_t ImageBase = 0x10000; uint32_t CopyRel; uint32_t GotRel; Index: lld/trunk/ELF/Target.cpp =================================================================== --- lld/trunk/ELF/Target.cpp +++ lld/trunk/ELF/Target.cpp @@ -250,7 +250,9 @@ return 0; } -uint64_t TargetInfo::getVAStart() const { return Config->Pic ? 0 : VAStart; } +uint64_t TargetInfo::getImageBase() const { + return Config->Pic ? 0 : ImageBase; +} bool TargetInfo::usesOnlyLowPageBits(uint32_t Type) const { return false; } @@ -989,7 +991,7 @@ // // And because the lowest non-zero 256M boundary is 0x10000000, PPC64 linkers // use 0x10000000 as the starting address. - VAStart = 0x10000000; + ImageBase = 0x10000000; } static uint64_t PPC64TocOffset = 0x8000; Index: lld/trunk/ELF/Writer.cpp =================================================================== --- lld/trunk/ELF/Writer.cpp +++ lld/trunk/ELF/Writer.cpp @@ -1022,7 +1022,7 @@ // sections. These are special, we do not include them into output sections // list, but have them to simplify the code. template void Writer::fixHeaders() { - uintX_t BaseVA = ScriptConfig->DoLayout ? 0 : Config->VAStart; + uintX_t BaseVA = ScriptConfig->DoLayout ? 0 : Config->ImageBase; Out::ElfHeader->setVA(BaseVA); uintX_t Off = Out::ElfHeader->getSize(); Out::ProgramHeaders->setVA(Off + BaseVA); @@ -1030,7 +1030,7 @@ // Assign VAs (addresses at run-time) to output sections. template void Writer::assignAddresses() { - uintX_t VA = Config->VAStart + Out::ElfHeader->getSize() + + uintX_t VA = Config->ImageBase + Out::ElfHeader->getSize() + Out::ProgramHeaders->getSize(); uintX_t ThreadBssOffset = 0;