From 5e706b3ee31b4e42a69a184fabc8b8cfbf4677af Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Sat, 25 Jul 2015 21:54:50 +0000 Subject: [PATCH] COFF: Use short identifiers. NFC. llvm-svn: 243229 --- lld/COFF/Chunks.cpp | 25 ++++++++++++------------- lld/COFF/Config.h | 6 ++---- lld/COFF/DLL.cpp | 2 +- lld/COFF/Driver.cpp | 34 +++++++++++++++++----------------- lld/COFF/Driver.h | 2 +- lld/COFF/DriverUtils.cpp | 24 ++++++++++++------------ lld/COFF/InputFiles.cpp | 6 +++--- lld/COFF/ModuleDef.cpp | 2 +- lld/COFF/SymbolTable.cpp | 2 +- lld/COFF/Symbols.cpp | 4 ++-- lld/COFF/Symbols.h | 3 +-- lld/COFF/Writer.cpp | 6 +++--- 12 files changed, 56 insertions(+), 60 deletions(-) diff --git a/lld/COFF/Chunks.cpp b/lld/COFF/Chunks.cpp index 0e14eff..f051b68 100644 --- a/lld/COFF/Chunks.cpp +++ b/lld/COFF/Chunks.cpp @@ -126,14 +126,14 @@ void SectionChunk::writeTo(uint8_t *Buf) { SymbolBody *Body = File->getSymbolBody(Rel.SymbolTableIndex)->repl(); uint64_t S = cast(Body)->getRVA(); uint64_t P = RVA + Rel.VirtualAddress; - switch (Config->MachineType) { - case IMAGE_FILE_MACHINE_AMD64: + switch (Config->Machine) { + case AMD64: applyRelX64(Off, Rel.Type, S, P); break; - case IMAGE_FILE_MACHINE_I386: + case I386: applyRelX86(Off, Rel.Type, S, P); break; - case IMAGE_FILE_MACHINE_ARMNT: + case ARMNT: applyRelARM(Off, Rel.Type, S, P); break; default: @@ -150,16 +150,16 @@ void SectionChunk::addAssociative(SectionChunk *Child) { } static uint8_t getBaserelType(const coff_relocation &Rel) { - switch (Config->MachineType) { - case IMAGE_FILE_MACHINE_AMD64: + switch (Config->Machine) { + case AMD64: if (Rel.Type == IMAGE_REL_AMD64_ADDR64) return IMAGE_REL_BASED_DIR64; return IMAGE_REL_BASED_ABSOLUTE; - case IMAGE_FILE_MACHINE_I386: + case I386: if (Rel.Type == IMAGE_REL_I386_DIR32) return IMAGE_REL_BASED_HIGHLOW; return IMAGE_REL_BASED_ABSOLUTE; - case IMAGE_FILE_MACHINE_ARMNT: + case ARMNT: if (Rel.Type == IMAGE_REL_ARM_ADDR32) return IMAGE_REL_BASED_HIGHLOW; if (Rel.Type == IMAGE_REL_ARM_MOV32T) @@ -293,8 +293,7 @@ void StringChunk::writeTo(uint8_t *Buf) { ImportThunkChunkX64::ImportThunkChunkX64(Defined *S) : ImpSymbol(S) { // Intel Optimization Manual says that all branch targets // should be 16-byte aligned. MSVC linker does this too. - if (Config->MachineType == AMD64) - Align = 16; + Align = 16; } void ImportThunkChunkX64::writeTo(uint8_t *Buf) { @@ -368,10 +367,10 @@ void BaserelChunk::writeTo(uint8_t *Buf) { } uint8_t Baserel::getDefaultType() { - switch (Config->MachineType) { - case IMAGE_FILE_MACHINE_AMD64: + switch (Config->Machine) { + case AMD64: return IMAGE_REL_BASED_DIR64; - case IMAGE_FILE_MACHINE_I386: + case I386: return IMAGE_REL_BASED_HIGHLOW; default: llvm_unreachable("unknown machine type"); diff --git a/lld/COFF/Config.h b/lld/COFF/Config.h index 1572e49..d22fa78 100644 --- a/lld/COFF/Config.h +++ b/lld/COFF/Config.h @@ -20,8 +20,6 @@ namespace lld { namespace coff { -using llvm::COFF::IMAGE_FILE_MACHINE_AMD64; -using llvm::COFF::IMAGE_FILE_MACHINE_I386; using llvm::COFF::IMAGE_FILE_MACHINE_UNKNOWN; using llvm::COFF::WindowsSubsystem; using llvm::StringRef; @@ -54,9 +52,9 @@ struct Export { // Global configuration. struct Configuration { enum ManifestKind { SideBySide, Embed, No }; - bool is64() { return MachineType == IMAGE_FILE_MACHINE_AMD64; } + bool is64() { return Machine == AMD64; } - llvm::COFF::MachineTypes MachineType = IMAGE_FILE_MACHINE_UNKNOWN; + llvm::COFF::MachineTypes Machine = IMAGE_FILE_MACHINE_UNKNOWN; bool Verbose = false; WindowsSubsystem Subsystem = llvm::COFF::IMAGE_SUBSYSTEM_UNKNOWN; Undefined *Entry = nullptr; diff --git a/lld/COFF/DLL.cpp b/lld/COFF/DLL.cpp index 09123bc..0e3c969c 100644 --- a/lld/COFF/DLL.cpp +++ b/lld/COFF/DLL.cpp @@ -426,7 +426,7 @@ void DelayLoadContents::create(Defined *H) { } Chunk *DelayLoadContents::newThunkChunk(DefinedImportData *S, Chunk *Dir) { - switch (Config->MachineType) { + switch (Config->Machine) { case AMD64: return new ThunkChunkX64(S, Dir, Helper); case I386: diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index 02bfdc9..0859a29 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -108,7 +108,7 @@ LinkerDriver::parseDirectives(StringRef S) { ErrorOr E = parseExport(Arg->getValue()); if (auto EC = E.getError()) return EC; - if (Config->MachineType == I386 && E->ExtName.startswith("_")) + if (Config->Machine == I386 && E->ExtName.startswith("_")) E->ExtName = E->ExtName.substr(1); Config->Exports.push_back(E.get()); break; @@ -211,8 +211,8 @@ Undefined *LinkerDriver::addUndefined(StringRef Name) { // Symbol names are mangled by appending "_" prefix on x86. StringRef LinkerDriver::mangle(StringRef Sym) { - assert(Config->MachineType != IMAGE_FILE_MACHINE_UNKNOWN); - if (Config->MachineType == IMAGE_FILE_MACHINE_I386) + assert(Config->Machine != IMAGE_FILE_MACHINE_UNKNOWN); + if (Config->Machine == I386) return Alloc.save("_" + Sym); return Sym; } @@ -335,7 +335,7 @@ bool LinkerDriver::link(llvm::ArrayRef ArgsArr) { ErrorOr MTOrErr = getMachineType(Arg->getValue()); if (MTOrErr.getError()) return false; - Config->MachineType = MTOrErr.get(); + Config->Machine = MTOrErr.get(); } // Handle /nodefaultlib: @@ -529,20 +529,20 @@ bool LinkerDriver::link(llvm::ArrayRef ArgsArr) { MachineTypes MT = File->getMachineType(); if (MT == IMAGE_FILE_MACHINE_UNKNOWN) continue; - if (Config->MachineType == IMAGE_FILE_MACHINE_UNKNOWN) { - Config->MachineType = MT; + if (Config->Machine == IMAGE_FILE_MACHINE_UNKNOWN) { + Config->Machine = MT; continue; } - if (Config->MachineType != MT) { + if (Config->Machine != MT) { llvm::errs() << File->getShortName() << ": machine type " - << machineTypeToStr(MT) << " conflicts with " - << machineTypeToStr(Config->MachineType) << "\n"; + << machineToStr(MT) << " conflicts with " + << machineToStr(Config->Machine) << "\n"; return false; } } - if (Config->MachineType == IMAGE_FILE_MACHINE_UNKNOWN) { + if (Config->Machine == IMAGE_FILE_MACHINE_UNKNOWN) { llvm::errs() << "warning: /machine is not specified. x64 is assumed.\n"; - Config->MachineType = IMAGE_FILE_MACHINE_AMD64; + Config->Machine = AMD64; } // Windows specific -- Convert Windows resource files to a COFF file. @@ -559,8 +559,8 @@ bool LinkerDriver::link(llvm::ArrayRef ArgsArr) { if (auto *Arg = Args.getLastArg(OPT_entry)) { Config->Entry = addUndefined(mangle(Arg->getValue())); } else if (Args.hasArg(OPT_dll) && !Config->NoEntry) { - StringRef S = (Config->MachineType == I386) ? "__DllMainCRTStartup@12" - : "_DllMainCRTStartup"; + StringRef S = (Config->Machine == I386) ? "__DllMainCRTStartup@12" + : "_DllMainCRTStartup"; Config->Entry = addUndefined(S); } else if (!Config->NoEntry) { // Windows specific -- If entry point name is not given, we need to @@ -580,7 +580,7 @@ bool LinkerDriver::link(llvm::ArrayRef ArgsArr) { ErrorOr E = parseExport(Arg->getValue()); if (E.getError()) return false; - if (Config->MachineType == I386 && !E->Name.startswith("_@?")) + if (Config->Machine == I386 && !E->Name.startswith("_@?")) E->Name = mangle(E->Name); Config->Exports.push_back(E.get()); } @@ -600,7 +600,7 @@ bool LinkerDriver::link(llvm::ArrayRef ArgsArr) { // Handle /delayload for (auto *Arg : Args.filtered(OPT_delayload)) { Config->DelayLoads.insert(StringRef(Arg->getValue()).lower()); - if (Config->MachineType == I386) { + if (Config->Machine == I386) { Config->DelayLoadHelper = addUndefined("___delayLoadHelper2@8"); } else { Config->DelayLoadHelper = addUndefined("__delayLoadHelper2"); @@ -612,7 +612,7 @@ bool LinkerDriver::link(llvm::ArrayRef ArgsArr) { Config->ImageBase = getDefaultImageBase(); Symtab.addRelative(mangle("__ImageBase"), 0); - if (Config->MachineType == IMAGE_FILE_MACHINE_I386) { + if (Config->Machine == I386) { Config->SEHTable = Symtab.addRelative("___safe_se_handler_table", 0); Config->SEHCount = Symtab.addAbsolute("___safe_se_handler_count", 0); } @@ -653,7 +653,7 @@ bool LinkerDriver::link(llvm::ArrayRef ArgsArr) { } // Windows specific -- if __load_config_used can be resolved, resolve it. - if (Config->MachineType == IMAGE_FILE_MACHINE_I386) + if (Config->Machine == I386) if (Symbol *Sym = Symtab.find("__load_config_used")) if (isa(Sym->Body)) Symtab.addUndefined("__load_config_used"); diff --git a/lld/COFF/Driver.h b/lld/COFF/Driver.h index b7b40b6..c54c6de 100644 --- a/lld/COFF/Driver.h +++ b/lld/COFF/Driver.h @@ -120,7 +120,7 @@ void printHelp(const char *Argv0); // For /machine option. ErrorOr getMachineType(StringRef Arg); -StringRef machineTypeToStr(MachineTypes MT); +StringRef machineToStr(MachineTypes MT); // Parses a string in the form of "[,]". std::error_code parseNumbers(StringRef Arg, uint64_t *Addr, diff --git a/lld/COFF/DriverUtils.cpp b/lld/COFF/DriverUtils.cpp index 0cbf10e..0dd59b6 100644 --- a/lld/COFF/DriverUtils.cpp +++ b/lld/COFF/DriverUtils.cpp @@ -82,11 +82,11 @@ private: // Returns /machine's value. ErrorOr getMachineType(StringRef S) { MachineTypes MT = StringSwitch(S.lower()) - .Case("x64", IMAGE_FILE_MACHINE_AMD64) - .Case("amd64", IMAGE_FILE_MACHINE_AMD64) - .Case("x86", IMAGE_FILE_MACHINE_I386) - .Case("i386", IMAGE_FILE_MACHINE_I386) - .Case("arm", IMAGE_FILE_MACHINE_ARMNT) + .Case("x64", AMD64) + .Case("amd64", AMD64) + .Case("x86", I386) + .Case("i386", I386) + .Case("arm", ARMNT) .Default(IMAGE_FILE_MACHINE_UNKNOWN); if (MT != IMAGE_FILE_MACHINE_UNKNOWN) return MT; @@ -94,13 +94,13 @@ ErrorOr getMachineType(StringRef S) { return make_error_code(LLDError::InvalidOption); } -StringRef machineTypeToStr(MachineTypes MT) { +StringRef machineToStr(MachineTypes MT) { switch (MT) { - case IMAGE_FILE_MACHINE_ARMNT: + case ARMNT: return "arm"; - case IMAGE_FILE_MACHINE_AMD64: + case AMD64: return "x64"; - case IMAGE_FILE_MACHINE_I386: + case I386: return "x86"; default: llvm_unreachable("unknown machine type"); @@ -428,7 +428,7 @@ std::error_code fixupExports() { if (!E.ExtName.empty()) continue; StringRef S = E.Sym->repl()->getName(); - if (Config->MachineType == I386 && S.startswith("_")) + if (Config->Machine == I386 && S.startswith("_")) S = S.substr(1); E.ExtName = S; } @@ -498,7 +498,7 @@ convertResToCOFF(const std::vector &MBs) { // Execute cvtres.exe. Executor E("cvtres.exe"); - E.add("/machine:" + machineTypeToStr(Config->MachineType)); + E.add("/machine:" + machineToStr(Config->Machine)); E.add("/readonly"); E.add("/nologo"); E.add("/out:" + Path); @@ -551,7 +551,7 @@ std::error_code writeImportLibrary() { Executor E("lib.exe"); E.add("/nologo"); - E.add("/machine:" + machineTypeToStr(Config->MachineType)); + E.add("/machine:" + machineToStr(Config->Machine)); E.add(Twine("/def:") + Def); if (Config->Implib.empty()) { SmallString<128> Out = StringRef(Config->OutputFile); diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp index 3e6a6b9..e9008d0 100644 --- a/lld/COFF/InputFiles.cpp +++ b/lld/COFF/InputFiles.cpp @@ -367,11 +367,11 @@ MachineTypes BitcodeFile::getMachineType() { return IMAGE_FILE_MACHINE_UNKNOWN; switch (Triple(M->getTargetTriple()).getArch()) { case Triple::x86_64: - return IMAGE_FILE_MACHINE_AMD64; + return AMD64; case Triple::x86: - return IMAGE_FILE_MACHINE_I386; + return I386; case Triple::arm: - return IMAGE_FILE_MACHINE_ARMNT; + return ARMNT; default: return IMAGE_FILE_MACHINE_UNKNOWN; } diff --git a/lld/COFF/ModuleDef.cpp b/lld/COFF/ModuleDef.cpp index 2293e66..84b8870 100644 --- a/lld/COFF/ModuleDef.cpp +++ b/lld/COFF/ModuleDef.cpp @@ -209,7 +209,7 @@ private: unget(); } - if (Config->MachineType == I386 && !E.Name.startswith("_@?")) + if (Config->Machine == I386 && !E.Name.startswith("_@?")) E.Name = Alloc->save("_" + E.Name); for (;;) { diff --git a/lld/COFF/SymbolTable.cpp b/lld/COFF/SymbolTable.cpp index 011720e..d12c052 100644 --- a/lld/COFF/SymbolTable.cpp +++ b/lld/COFF/SymbolTable.cpp @@ -287,7 +287,7 @@ StringRef SymbolTable::findMangle(StringRef Name) { if (Symbol *Sym = find(Name)) if (!isa(Sym->Body)) return Name; - if (Config->MachineType != I386) + if (Config->Machine != I386) return findByPrefix(("?" + Name + "@@Y").str()); if (!Name.startswith("_")) return ""; diff --git a/lld/COFF/Symbols.cpp b/lld/COFF/Symbols.cpp index 355442a..9b7a3fd 100644 --- a/lld/COFF/Symbols.cpp +++ b/lld/COFF/Symbols.cpp @@ -197,9 +197,9 @@ COFFSymbolRef DefinedCOFF::getCOFFSymbol() { } DefinedImportThunk::DefinedImportThunk(StringRef Name, DefinedImportData *S, - uint16_t MachineType) + uint16_t Machine) : Defined(DefinedImportThunkKind, Name) { - switch (MachineType) { + switch (Machine) { case AMD64: Data.reset(new ImportThunkChunkX64(S)); return; diff --git a/lld/COFF/Symbols.h b/lld/COFF/Symbols.h index 8a4e698..3971889 100644 --- a/lld/COFF/Symbols.h +++ b/lld/COFF/Symbols.h @@ -327,8 +327,7 @@ private: // a regular name. A function pointer is given as a DefinedImportData. class DefinedImportThunk : public Defined { public: - DefinedImportThunk(StringRef Name, DefinedImportData *S, - uint16_t MachineType); + DefinedImportThunk(StringRef Name, DefinedImportData *S, uint16_t Machine); static bool classof(const SymbolBody *S) { return S->kind() == DefinedImportThunkKind; diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp index a66c1de..b4bdc52 100644 --- a/lld/COFF/Writer.cpp +++ b/lld/COFF/Writer.cpp @@ -220,7 +220,7 @@ void Writer::createMiscChunks() { } // Create SEH table. x86-only. - if (Config->MachineType != IMAGE_FILE_MACHINE_I386) + if (Config->Machine != I386) return; std::set Handlers; for (ObjectFile *File : Symtab->ObjectFiles) { @@ -406,7 +406,7 @@ template void Writer::writeHeader() { // Write COFF header auto *COFF = reinterpret_cast(Buf); Buf += sizeof(*COFF); - COFF->Machine = Config->MachineType; + COFF->Machine = Config->Machine; COFF->NumberOfSections = OutputSections.size(); COFF->Characteristics = IMAGE_FILE_EXECUTABLE_IMAGE; if (Config->is64()) { @@ -441,7 +441,7 @@ template void Writer::writeHeader() { Defined *Entry = cast(Config->Entry->repl()); PE->AddressOfEntryPoint = Entry->getRVA(); // Pointer to thumb code must have the LSB set, so adjust it. - if (Config->MachineType == ARMNT) + if (Config->Machine == ARMNT) PE->AddressOfEntryPoint |= 1; } PE->SizeOfStackReserve = Config->StackReserve; -- 2.7.4