From 1c98619801a5705c688e683be3ef9d70169a0686 Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Sat, 23 Jul 2016 20:48:50 +0000 Subject: Vendor import of lld release_39 branch r276489: https://llvm.org/svn/llvm-project/lld/branches/release_39@276489 --- ELF/Config.h | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 9 deletions(-) (limited to 'ELF/Config.h') diff --git a/ELF/Config.h b/ELF/Config.h index c279b99b43c1..2ccd95e88775 100644 --- a/ELF/Config.h +++ b/ELF/Config.h @@ -17,10 +17,10 @@ #include namespace lld { -namespace elf2 { +namespace elf { class InputFile; -class SymbolBody; +struct Symbol; enum ELFKind { ELFNoneKind, @@ -30,60 +30,105 @@ enum ELFKind { ELF64BEKind }; +enum class BuildIdKind { None, Fnv1, Md5, Sha1, Hexstring }; + +enum class UnresolvedPolicy { NoUndef, Error, Warn, Ignore }; + +struct SymbolVersion { + llvm::StringRef Name; + bool IsExternCpp; +}; + +// This struct contains symbols version definition that +// can be found in version script if it is used for link. +struct VersionDefinition { + VersionDefinition(llvm::StringRef Name, size_t Id) : Name(Name), Id(Id) {} + llvm::StringRef Name; + size_t Id; + std::vector Globals; + size_t NameOff; // Offset in string table. +}; + // This struct contains the global configuration for the linker. // Most fields are direct mapping from the command line options // and such fields have the same name as the corresponding options. // Most fields are initialized by the driver. struct Configuration { - SymbolBody *EntrySym = nullptr; - SymbolBody *MipsGpDisp = nullptr; + Symbol *EntrySym = nullptr; InputFile *FirstElf = nullptr; llvm::StringRef DynamicLinker; llvm::StringRef Entry; llvm::StringRef Emulation; llvm::StringRef Fini; llvm::StringRef Init; + llvm::StringRef LtoAAPipeline; + llvm::StringRef LtoNewPmPasses; llvm::StringRef OutputFile; llvm::StringRef SoName; llvm::StringRef Sysroot; std::string RPath; - llvm::MapVector> OutputSections; + std::vector VersionDefinitions; + std::vector DynamicList; std::vector SearchPaths; std::vector Undefined; + std::vector VersionScriptGlobals; + std::vector BuildIdVector; bool AllowMultipleDefinition; bool AsNeeded = false; bool Bsymbolic; + bool BsymbolicFunctions; + bool Demangle = true; + bool DisableVerify; bool DiscardAll; bool DiscardLocals; bool DiscardNone; + bool EhFrameHdr; bool EnableNewDtags; bool ExportDynamic; + bool FatalWarnings; bool GcSections; bool GnuHash = false; + bool ICF; bool Mips64EL = false; - bool NoInhibitExec; - bool NoUndefined; + bool NoGnuUnique; + bool NoUndefinedVersion; + bool Pic; + bool Pie; bool PrintGcSections; + bool Rela; + bool Relocatable; + bool SaveTemps; bool Shared; bool Static = false; bool StripAll; + bool StripDebug; bool SysvHash = true; + bool Threads; + bool Trace; bool Verbose; + bool WarnCommon; + bool ZCombreloc; bool ZExecStack; bool ZNodelete; bool ZNow; bool ZOrigin; bool ZRelro; + UnresolvedPolicy UnresolvedSymbols; + BuildIdKind BuildId = BuildIdKind::None; ELFKind EKind = ELFNoneKind; + uint16_t DefaultSymbolVersion = llvm::ELF::VER_NDX_GLOBAL; uint16_t EMachine = llvm::ELF::EM_NONE; uint64_t EntryAddr = -1; - unsigned Optimize = 0; + uint64_t ImageBase; + unsigned LtoJobs; + unsigned LtoO; + unsigned Optimize; }; // The only instance of Configuration struct. extern Configuration *Config; -} // namespace elf2 +} // namespace elf } // namespace lld #endif -- cgit v1.2.3