148 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
//===- Config.h -------------------------------------------------*- C++ -*-===//
 | 
						|
//
 | 
						|
//                             The LLVM Linker
 | 
						|
//
 | 
						|
// This file is distributed under the University of Illinois Open Source
 | 
						|
// License. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#ifndef LLD_ELF_CONFIG_H
 | 
						|
#define LLD_ELF_CONFIG_H
 | 
						|
 | 
						|
#include "llvm/ADT/MapVector.h"
 | 
						|
#include "llvm/ADT/StringRef.h"
 | 
						|
#include "llvm/Support/ELF.h"
 | 
						|
 | 
						|
#include <vector>
 | 
						|
 | 
						|
namespace lld {
 | 
						|
namespace elf {
 | 
						|
 | 
						|
class InputFile;
 | 
						|
struct Symbol;
 | 
						|
 | 
						|
enum ELFKind {
 | 
						|
  ELFNoneKind,
 | 
						|
  ELF32LEKind,
 | 
						|
  ELF32BEKind,
 | 
						|
  ELF64LEKind,
 | 
						|
  ELF64BEKind
 | 
						|
};
 | 
						|
 | 
						|
// For --build-id.
 | 
						|
enum class BuildIdKind { None, Fast, Md5, Sha1, Hexstring, Uuid };
 | 
						|
 | 
						|
// For --discard-{all,locals,none}.
 | 
						|
enum class DiscardPolicy { Default, All, Locals, None };
 | 
						|
 | 
						|
// For --strip-{all,debug}.
 | 
						|
enum class StripPolicy { None, All, Debug };
 | 
						|
 | 
						|
// For --unresolved-symbols.
 | 
						|
enum class UnresolvedPolicy { NoUndef, ReportError, Warn, Ignore };
 | 
						|
 | 
						|
struct SymbolVersion {
 | 
						|
  llvm::StringRef Name;
 | 
						|
  bool IsExternCpp;
 | 
						|
  bool HasWildcards;
 | 
						|
};
 | 
						|
 | 
						|
// 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<SymbolVersion> 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 {
 | 
						|
  Symbol *EntrySym = nullptr;
 | 
						|
  InputFile *FirstElf = nullptr;
 | 
						|
  llvm::StringMap<uint64_t> SectionStartMap;
 | 
						|
  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;
 | 
						|
  std::vector<VersionDefinition> VersionDefinitions;
 | 
						|
  std::vector<llvm::StringRef> AuxiliaryList;
 | 
						|
  std::vector<llvm::StringRef> DynamicList;
 | 
						|
  std::vector<llvm::StringRef> SearchPaths;
 | 
						|
  std::vector<llvm::StringRef> Undefined;
 | 
						|
  std::vector<SymbolVersion> VersionScriptGlobals;
 | 
						|
  std::vector<uint8_t> BuildIdVector;
 | 
						|
  bool AllowMultipleDefinition;
 | 
						|
  bool AsNeeded = false;
 | 
						|
  bool Binary = false;
 | 
						|
  bool Bsymbolic;
 | 
						|
  bool BsymbolicFunctions;
 | 
						|
  bool Demangle = true;
 | 
						|
  bool DisableVerify;
 | 
						|
  bool EhFrameHdr;
 | 
						|
  bool EnableNewDtags;
 | 
						|
  bool ExportDynamic;
 | 
						|
  bool FatalWarnings;
 | 
						|
  bool GcSections;
 | 
						|
  bool GnuHash = false;
 | 
						|
  bool ICF;
 | 
						|
  bool Mips64EL = false;
 | 
						|
  bool NoGnuUnique;
 | 
						|
  bool NoUndefinedVersion;
 | 
						|
  bool Nostdlib;
 | 
						|
  bool OFormatBinary;
 | 
						|
  bool Pic;
 | 
						|
  bool Pie;
 | 
						|
  bool PrintGcSections;
 | 
						|
  bool Rela;
 | 
						|
  bool Relocatable;
 | 
						|
  bool SaveTemps;
 | 
						|
  bool Shared;
 | 
						|
  bool Static = false;
 | 
						|
  bool SysvHash = true;
 | 
						|
  bool Target1Rel;
 | 
						|
  bool Threads;
 | 
						|
  bool Trace;
 | 
						|
  bool Verbose;
 | 
						|
  bool WarnCommon;
 | 
						|
  bool ZCombreloc;
 | 
						|
  bool ZExecStack;
 | 
						|
  bool ZNodelete;
 | 
						|
  bool ZNow;
 | 
						|
  bool ZOrigin;
 | 
						|
  bool ZRelro;
 | 
						|
  DiscardPolicy Discard;
 | 
						|
  StripPolicy Strip = StripPolicy::None;
 | 
						|
  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 = 0;
 | 
						|
  uint64_t ImageBase;
 | 
						|
  uint64_t ZStackSize = -1;
 | 
						|
  unsigned LtoJobs;
 | 
						|
  unsigned LtoO;
 | 
						|
  unsigned Optimize;
 | 
						|
};
 | 
						|
 | 
						|
// The only instance of Configuration struct.
 | 
						|
extern Configuration *Config;
 | 
						|
 | 
						|
} // namespace elf
 | 
						|
} // namespace lld
 | 
						|
 | 
						|
#endif
 |