COFF: Use short identifiers. NFC.

llvm-svn: 243229
This commit is contained in:
Rui Ueyama 2015-07-25 21:54:50 +00:00
parent 5c437cd1e9
commit 5e706b3ee3
12 changed files with 56 additions and 60 deletions

View File

@ -126,14 +126,14 @@ void SectionChunk::writeTo(uint8_t *Buf) {
SymbolBody *Body = File->getSymbolBody(Rel.SymbolTableIndex)->repl();
uint64_t S = cast<Defined>(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");

View File

@ -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;

View File

@ -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:

View File

@ -108,7 +108,7 @@ LinkerDriver::parseDirectives(StringRef S) {
ErrorOr<Export> 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<const char *> ArgsArr) {
ErrorOr<MachineTypes> MTOrErr = getMachineType(Arg->getValue());
if (MTOrErr.getError())
return false;
Config->MachineType = MTOrErr.get();
Config->Machine = MTOrErr.get();
}
// Handle /nodefaultlib:<filename>
@ -529,20 +529,20 @@ bool LinkerDriver::link(llvm::ArrayRef<const char *> 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<const char *> 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<const char *> ArgsArr) {
ErrorOr<Export> 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<const char *> 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<const char *> 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<const char *> 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<Lazy>(Sym->Body))
Symtab.addUndefined("__load_config_used");

View File

@ -120,7 +120,7 @@ void printHelp(const char *Argv0);
// For /machine option.
ErrorOr<MachineTypes> getMachineType(StringRef Arg);
StringRef machineTypeToStr(MachineTypes MT);
StringRef machineToStr(MachineTypes MT);
// Parses a string in the form of "<integer>[,<integer>]".
std::error_code parseNumbers(StringRef Arg, uint64_t *Addr,

View File

@ -82,11 +82,11 @@ private:
// Returns /machine's value.
ErrorOr<MachineTypes> getMachineType(StringRef S) {
MachineTypes MT = StringSwitch<MachineTypes>(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<MachineTypes> 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<MemoryBufferRef> &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);

View File

@ -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;
}

View File

@ -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 (;;) {

View File

@ -287,7 +287,7 @@ StringRef SymbolTable::findMangle(StringRef Name) {
if (Symbol *Sym = find(Name))
if (!isa<Undefined>(Sym->Body))
return Name;
if (Config->MachineType != I386)
if (Config->Machine != I386)
return findByPrefix(("?" + Name + "@@Y").str());
if (!Name.startswith("_"))
return "";

View File

@ -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;

View File

@ -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;

View File

@ -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<Defined *> Handlers;
for (ObjectFile *File : Symtab->ObjectFiles) {
@ -406,7 +406,7 @@ template <typename PEHeaderTy> void Writer::writeHeader() {
// Write COFF header
auto *COFF = reinterpret_cast<coff_file_header *>(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 <typename PEHeaderTy> void Writer::writeHeader() {
Defined *Entry = cast<Defined>(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;