9#ifndef LLVM_DWARFLINKER_DWARFLINKER_H
10#define LLVM_DWARFLINKER_DWARFLINKER_H
29template <
typename T>
class SmallVectorImpl;
51 virtual std::optional<int64_t>
62 virtual std::optional<int64_t>
70 bool IsLittleEndian) = 0;
107 emitAbbrevs(
const std::vector<std::unique_ptr<DIEAbbrev>> &Abbrevs,
108 unsigned DwarfVersion) = 0;
171 uint8_t AddrSize) = 0;
207 unsigned DwarfVersion) = 0;
280 std::unique_ptr<DWARFContext>
Dwarf;
313 StringsTranslator(StringsTranslator), ErrorHandler(ErrorHandler),
314 WarningHandler(WarningHandler) {}
319 return std::make_unique<DWARFLinker>(ErrorHandler, WarningHandler,
336 typedef std::function<ErrorOr<DWARFFile &>(
StringRef ContainerName,
370 void setNoODR(
bool NoODR) { Options.NoODR = NoODR; }
381 Options.KeepFunctionForStatic = KeepFunctionForStatic;
390 Options.AccelTables.emplace_back(Kind);
398 ObjectContexts.reserve(ObjFilesNum);
404 Options.InputVerificationHandler = Handler;
409 Options.ParseableSwiftInterfaces = Map;
414 Options.ObjectPrefixMap = Map;
419 if ((TargetDWARFVersion < 1) || (TargetDWARFVersion > 5))
421 "unsupported DWARF version: %d",
424 Options.TargetDWARFVersion = TargetDWARFVersion;
430 enum TraversalFlags {
432 TF_InFunctionScope = 1 << 1,
433 TF_DependencyWalk = 1 << 2,
434 TF_ParentWalk = 1 << 3,
440 enum class WorklistItemType {
444 LookForChildDIEsToKeep,
446 LookForRefDIEsToKeep,
448 LookForParentDIEsToKeep,
451 UpdateChildIncompleteness,
454 UpdateRefIncompleteness,
462 struct WorklistItem {
464 WorklistItemType
Type;
468 const unsigned AncestorIdx;
469 CompileUnit::DIEInfo *OtherInfo;
472 WorklistItem(DWARFDie Die, CompileUnit &
CU,
unsigned Flags,
473 WorklistItemType
T = WorklistItemType::LookForDIEsToKeep)
476 WorklistItem(DWARFDie Die, CompileUnit &
CU, WorklistItemType
T,
477 CompileUnit::DIEInfo *OtherInfo =
nullptr)
480 WorklistItem(
unsigned AncestorIdx, CompileUnit &
CU,
unsigned Flags)
482 AncestorIdx(AncestorIdx) {}
486 void verifyInput(
const DWARFFile &File);
489 bool needToTranslateStrings() {
return StringsTranslator !=
nullptr; }
491 void reportWarning(
const Twine &
Warning,
const DWARFFile &File,
492 const DWARFDie *DIE =
nullptr)
const {
493 if (WarningHandler !=
nullptr)
497 void reportError(
const Twine &
Warning,
const DWARFFile &File,
498 const DWARFDie *DIE =
nullptr)
const {
499 if (ErrorHandler !=
nullptr)
503 void copyInvariantDebugSection(DWARFContext &
Dwarf);
507 struct RefModuleUnit {
508 RefModuleUnit(DWARFFile &File, std::unique_ptr<CompileUnit> Unit)
510 RefModuleUnit(RefModuleUnit &&
Other)
512 RefModuleUnit(
const RefModuleUnit &) =
delete;
515 std::unique_ptr<CompileUnit> Unit;
517 using ModuleUnitListTy = std::vector<RefModuleUnit>;
523 ModuleUnitListTy ModuleUnits;
526 LinkContext(DWARFFile &File) :
File(
File) {}
531 CompileUnits.clear();
532 File.Addresses->clear();
537 void cleanupAuxiliarryData(LinkContext &Context);
541 void lookForParentDIEsToKeep(
unsigned AncestorIdx, CompileUnit &
CU,
543 SmallVectorImpl<WorklistItem> &Worklist);
547 void lookForChildDIEsToKeep(
const DWARFDie &Die, CompileUnit &
CU,
549 SmallVectorImpl<WorklistItem> &Worklist);
553 void lookForRefDIEsToKeep(
const DWARFDie &Die, CompileUnit &
CU,
555 const DWARFFile &File,
556 SmallVectorImpl<WorklistItem> &Worklist);
560 void markODRCanonicalDie(
const DWARFDie &Die, CompileUnit &
CU);
569 void lookForDIEsToKeep(AddressesMap &RelocMgr,
const UnitListTy &Units,
570 const DWARFDie &DIE,
const DWARFFile &File,
571 CompileUnit &
CU,
unsigned Flags);
577 std::pair<bool, bool> isClangModuleRef(
const DWARFDie &CUDie,
578 std::string &PCMFile,
579 LinkContext &Context,
unsigned Indent,
588 bool registerModuleReference(
const DWARFDie &CUDie, LinkContext &Context,
591 unsigned Indent = 0);
597 const std::string &PCMFile, LinkContext &Context,
601 Error cloneModuleUnit(LinkContext &Context, RefModuleUnit &Unit,
602 DeclContextTree &ODRContexts,
605 DebugDieValuePool &StringOffsetPool,
606 unsigned Indent = 0);
608 unsigned shouldKeepDIE(AddressesMap &RelocMgr,
const DWARFDie &DIE,
609 const DWARFFile &File, CompileUnit &Unit,
610 CompileUnit::DIEInfo &MyInfo,
unsigned Flags);
618 std::pair<bool, std::optional<int64_t>>
619 getVariableRelocAdjustment(AddressesMap &RelocMgr,
const DWARFDie &DIE);
623 unsigned shouldKeepVariableDIE(AddressesMap &RelocMgr,
const DWARFDie &DIE,
624 CompileUnit::DIEInfo &MyInfo,
unsigned Flags);
626 unsigned shouldKeepSubprogramDIE(AddressesMap &RelocMgr,
const DWARFDie &DIE,
627 const DWARFFile &File, CompileUnit &Unit,
628 CompileUnit::DIEInfo &MyInfo,
635 DWARFDie resolveDIEReference(
const DWARFFile &File,
const UnitListTy &Units,
636 const DWARFFormValue &RefValue,
637 const DWARFDie &DIE, CompileUnit *&RefCU);
645 struct DWARFLinkerOptions;
653 DebugDieValuePool &StringOffsetPool;
654 DebugDieValuePool AddrPool;
659 std::vector<std::unique_ptr<CompileUnit>> &CompileUnits;
668 DIECloner(DWARFLinker &Linker, DwarfEmitter *Emitter, DWARFFile &ObjFile,
670 std::vector<std::unique_ptr<CompileUnit>> &CompileUnits,
673 DebugDieValuePool &StringOffsetPool)
675 DebugStrPool(DebugStrPool), DebugLineStrPool(DebugLineStrPool),
676 StringOffsetPool(StringOffsetPool), DIEAlloc(DIEAlloc),
677 CompileUnits(CompileUnits), Update(Update) {}
690 DIE *cloneDIE(
const DWARFDie &InputDIE,
const DWARFFile &File,
691 CompileUnit &U, int64_t PCOffset,
uint32_t OutOffset,
692 unsigned Flags,
bool IsLittleEndian, DIE *Die =
nullptr);
697 uint64_t cloneAllCompileUnits(DWARFContext &DwarfContext,
698 const DWARFFile &File,
bool IsLittleEndian);
701 void emitDebugAddrSection(CompileUnit &Unit,
704 using ExpressionHandlerRef = function_ref<void(
705 SmallVectorImpl<uint8_t> &, SmallVectorImpl<uint8_t> &,
706 int64_t AddrRelocAdjustment)>;
710 void generateUnitLocations(CompileUnit &Unit,
const DWARFFile &File,
711 ExpressionHandlerRef ExprHandler);
714 using AttributeSpec = DWARFAbbreviationDeclaration::AttributeSpec;
718 struct AttributesInfo {
720 DwarfStringPoolEntryRef
Name, MangledName, NameWithoutTemplate;
727 int64_t PCOffset = 0;
730 bool HasLowPc =
false;
733 bool HasRanges =
false;
736 bool IsDeclaration =
false;
739 bool AttrStrOffsetBaseSeen =
false;
741 AttributesInfo() =
default;
745 unsigned cloneAttribute(DIE &Die,
const DWARFDie &InputDIE,
746 const DWARFFile &File, CompileUnit &U,
747 const DWARFFormValue &Val,
748 const AttributeSpec AttrSpec,
unsigned AttrSize,
749 AttributesInfo &AttrInfo,
bool IsLittleEndian);
754 unsigned cloneStringAttribute(DIE &Die, AttributeSpec AttrSpec,
755 const DWARFFormValue &Val,
const DWARFUnit &U,
756 AttributesInfo &
Info);
761 unsigned cloneDieReferenceAttribute(DIE &Die,
const DWARFDie &InputDIE,
762 AttributeSpec AttrSpec,
764 const DWARFFormValue &Val,
765 const DWARFFile &File,
769 void cloneExpression(DataExtractor &
Data, DWARFExpression Expression,
770 const DWARFFile &File, CompileUnit &Unit,
772 int64_t AddrRelocAdjustment,
bool IsLittleEndian);
777 unsigned cloneBlockAttribute(DIE &Die,
const DWARFDie &InputDIE,
778 const DWARFFile &File, CompileUnit &Unit,
779 AttributeSpec AttrSpec,
780 const DWARFFormValue &Val,
781 bool IsLittleEndian);
786 unsigned cloneAddressAttribute(DIE &Die,
const DWARFDie &InputDIE,
787 AttributeSpec AttrSpec,
unsigned AttrSize,
788 const DWARFFormValue &Val,
789 const CompileUnit &Unit,
790 AttributesInfo &
Info);
794 unsigned cloneScalarAttribute(DIE &Die,
const DWARFDie &InputDIE,
795 const DWARFFile &File, CompileUnit &U,
796 AttributeSpec AttrSpec,
797 const DWARFFormValue &Val,
unsigned AttrSize,
798 AttributesInfo &
Info);
804 bool getDIENames(
const DWARFDie &Die, AttributesInfo &
Info,
807 uint32_t hashFullyQualifiedName(DWARFDie DIE, CompileUnit &U,
808 const DWARFFile &File,
809 int RecurseDepth = 0);
812 void addObjCAccelerator(CompileUnit &Unit,
const DIE *Die,
813 DwarfStringPoolEntryRef
Name,
816 void rememberUnitForMacroOffset(CompileUnit &Unit);
821 void generateLineTableForUnit(CompileUnit &Unit);
825 void assignAbbrev(DIEAbbrev &Abbrev);
829 void generateUnitRanges(CompileUnit &Unit,
const DWARFFile &File,
830 DebugDieValuePool &AddrPool)
const;
833 void emitAcceleratorEntriesForUnit(CompileUnit &Unit);
836 void patchFrameInfoForObject(LinkContext &Context);
839 FoldingSet<DIEAbbrev> AbbreviationsSet;
844 std::vector<std::unique_ptr<DIEAbbrev>> Abbreviations;
847 std::vector<DIELoc *> DIELocs;
850 std::vector<DIEBlock *> DIEBlocks;
856 std::unique_ptr<DwarfStreamer> TheDwarfEmitter;
857 std::vector<LinkContext> ObjectContexts;
862 StringMap<uint32_t> EmittedCIEs;
869 AccelTable<DWARF5AccelTableStaticData> DebugNames;
870 AccelTable<AppleAccelTableStaticOffsetData> AppleNames;
871 AccelTable<AppleAccelTableStaticOffsetData> AppleNamespaces;
872 AccelTable<AppleAccelTableStaticOffsetData> AppleObjc;
873 AccelTable<AppleAccelTableStaticTypeData> AppleTypes;
876 StringMap<uint64_t> ClangModules;
880 std::function<StringRef(StringRef)> StringsTranslator =
nullptr;
883 unsigned UniqueUnitID = 0;
892 struct DWARFLinkerOptions {
900 bool Statistics =
false;
903 bool VerifyInputDWARF =
false;
913 bool KeepFunctionForStatic =
false;
916 unsigned Threads = 1;
919 SmallVector<AccelTableKind, 1> AccelTables;
922 std::string PrependPath;
This file contains support for writing accelerator tables.
Analysis containing CSE Info
dxil DXContainer Global Emitter
This file defines the DenseMap class.
ppc ctr loops PowerPC CTR Loops Verify
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
This class holds an abstract representation of an Accelerator Table, consisting of a sequence of buck...
The AddressRanges class helps normalize address range collections.
AddressesMap represents information about valid addresses used by debug information.
virtual bool applyValidRelocs(MutableArrayRef< char > Data, uint64_t BaseOffset, bool IsLittleEndian)=0
Apply the valid relocations to the buffer Data, taking into account that Data is at BaseOffset in the...
virtual void clear()=0
Erases all data.
virtual bool hasValidRelocs()=0
Checks that there are valid relocations against a .debug_info section.
virtual std::optional< int64_t > getExprOpAddressRelocAdjustment(DWARFUnit &U, const DWARFExpression::Operation &Op, uint64_t StartOffset, uint64_t EndOffset)=0
Checks that the specified DWARF expression operand Op references live code section and returns the re...
virtual std::optional< int64_t > getSubprogramRelocAdjustment(const DWARFDie &DIE)=0
Checks that the specified subprogram DIE references the live code section and returns the relocation ...
This class is intended to be used as a driving class for all asm writers.
Stores all information relating to a compile unit, be it in its original instance in the object file ...
A structured debug information entry.
DWARFContext This data structure is the top level entity that deals with dwarf debug information pars...
Utility class that carries the DWARF compile/type unit and the debug info entry in an object.
This class represents an Operation in the Expression.
This class represents DWARF information for source file and its address map.
std::unique_ptr< AddressesMap > Addresses
Helpful address information(list of valid address ranges, relocations).
DWARFFile(StringRef Name, std::unique_ptr< DWARFContext > Dwarf, std::unique_ptr< AddressesMap > Addresses, UnloadCallbackTy=nullptr)
std::function< void(StringRef FileName)> UnloadCallbackTy
StringRef FileName
The object file name.
std::unique_ptr< DWARFContext > Dwarf
The source DWARF information.
The core of the Dwarf linking logic.
void setVerbosity(bool Verbose)
A number of methods setting various linking options:
void setStatistics(bool Statistics)
Print statistics to standard output.
OutputFileType
Type of output file.
std::function< void(const DWARFFile &File, llvm::StringRef Output)> inputVerificationHandler
std::function< ErrorOr< DWARFFile & >(StringRef ContainerName, StringRef Path)> objFileLoader
std::function< void(const Twine &Warning, StringRef Context, const DWARFDie *DIE)> messageHandler
void setNumThreads(unsigned NumThreads)
Use specified number of threads for parallel files linking.
void setKeepFunctionForStatic(bool KeepFunctionForStatic)
Set whether to keep the enclosing function for a static variable.
Error link()
Link debug info for added objFiles. Object files are linked all together.
DwarfEmitter * getEmitter()
void setObjectPrefixMap(objectPrefixMap *Map)
Set prefix map for objects.
void setPrependPath(const std::string &Ppath)
Set prepend path for clang modules.
AccelTableKind
The kind of accelerator tables we should emit.
@ Apple
.apple_names, .apple_namespaces, .apple_types, .apple_objc.
@ Pub
.debug_pubnames, .debug_pubtypes
void setAllowNonDeterministicOutput(bool)
Allow generating valid, but non-deterministic output.
void setUpdateIndexTablesOnly(bool Update)
Update index tables only(do not modify rest of DWARF).
void setEstimatedObjfilesAmount(unsigned ObjFilesNum)
Set estimated objects files amount, for preliminary data allocation.
DWARFLinker(messageHandler ErrorHandler, messageHandler WarningHandler, std::function< StringRef(StringRef)> StringsTranslator)
void addAccelTableKind(AccelTableKind Kind)
Add kind of accelerator tables to be generated.
void setSwiftInterfacesMap(swiftInterfacesMap *Map)
Set map for Swift interfaces.
void addObjectFile(DWARFFile &File, objFileLoader Loader=nullptr, CompileUnitHandler OnCUDieLoaded=[](const DWARFUnit &) {})
Add object file to be linked.
Error setTargetDWARFVersion(uint16_t TargetDWARFVersion)
Set target DWARF version.
Error createEmitter(const Triple &TheTriple, OutputFileType FileType, raw_pwrite_stream &OutFile)
void setNoODR(bool NoODR)
Do not unique types according to ODR.
void setVerifyInputDWARF(bool Verify)
Verify the input DWARF.
static std::unique_ptr< DWARFLinker > createLinker(messageHandler ErrorHandler, messageHandler WarningHandler, std::function< StringRef(StringRef)> StringsTranslator=nullptr)
void setInputVerificationHandler(inputVerificationHandler Handler)
Set verification handler which would be used to report verification errors.
iterator find(const_arg_type_t< KeyT > Val)
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
DwarfEmitter presents interface to generate all debug info tables.
virtual void emitCIE(StringRef CIEBytes)=0
Emit a CIE.
virtual void emitPubNamesForUnit(const CompileUnit &Unit)=0
Emit the .debug_pubnames contribution for Unit.
virtual void emitDwarfDebugArangesTable(const CompileUnit &Unit, const AddressRanges &LinkedRanges)=0
Emit .debug_aranges entries for Unit.
virtual uint64_t getLineSectionSize() const =0
Returns size of generated .debug_line section.
virtual MCSymbol * emitDwarfDebugRangeListHeader(const CompileUnit &Unit)=0
Emit debug ranges (.debug_ranges, .debug_rnglists) header.
virtual void emitAppleNames(AccelTable< AppleAccelTableStaticOffsetData > &Table)=0
Emit Apple names accelerator table.
virtual void emitDwarfDebugAddrsFooter(const CompileUnit &Unit, MCSymbol *EndLabel)=0
Emit .debug_addr footer.
virtual void emitCompileUnitHeader(CompileUnit &Unit, unsigned DwarfVersion)=0
Emit the compilation unit header for Unit in the .debug_info section.
virtual void emitDebugNames(AccelTable< DWARF5AccelTableStaticData > &Table)=0
Emit DWARF debug names.
virtual MCSymbol * emitDwarfDebugAddrsHeader(const CompileUnit &Unit)=0
Emit .debug_addr header.
virtual uint64_t getRngListsSectionSize() const =0
Returns size of generated .debug_rnglists section.
virtual void emitStrings(const NonRelocatableStringpool &Pool)=0
Emit the string table described by Pool into .debug_str table.
virtual void emitPubTypesForUnit(const CompileUnit &Unit)=0
Emit the .debug_pubtypes contribution for Unit.
virtual MCSymbol * emitDwarfDebugLocListHeader(const CompileUnit &Unit)=0
Emit debug locations (.debug_loc, .debug_loclists) header.
virtual void emitDwarfDebugLocListFragment(const CompileUnit &Unit, const DWARFLocationExpressionsVector &LinkedLocationExpression, PatchLocation Patch, DebugDieValuePool &AddrPool)=0
Emit debug locations (.debug_loc, .debug_loclists) fragment.
virtual void emitAppleNamespaces(AccelTable< AppleAccelTableStaticOffsetData > &Table)=0
Emit Apple namespaces accelerator table.
virtual void emitSwiftReflectionSection(llvm::binaryformat::Swift5ReflectionSectionKind ReflSectionKind, StringRef Buffer, uint32_t Alignment, uint32_t Size)=0
Emit the swift reflection section stored in Buffer.
virtual uint64_t getDebugAddrSectionSize() const =0
Returns size of generated .debug_addr section.
virtual AsmPrinter & getAsmPrinter() const =0
Returns underlying AsmPrinter.
virtual void emitLineTableForUnit(const DWARFDebugLine::LineTable &LineTable, const CompileUnit &Unit, OffsetsStringPool &DebugStrPool, OffsetsStringPool &DebugLineStrPool)=0
Emit specified LineTable into .debug_line table.
virtual void emitMacroTables(DWARFContext *Context, const Offset2UnitMap &UnitMacroMap, OffsetsStringPool &StringPool)=0
Emit all available macro tables(DWARFv4 and DWARFv5).
virtual uint64_t getLocListsSectionSize() const =0
Returns size of generated .debug_loclists section.
virtual void emitFDE(uint32_t CIEOffset, uint32_t AddreSize, uint64_t Address, StringRef Bytes)=0
Emit an FDE with data Bytes.
virtual uint64_t getRangesSectionSize() const =0
Returns size of generated .debug_ranges section.
virtual uint64_t getDebugInfoSectionSize() const =0
Returns size of generated .debug_info section.
virtual void finish()=0
Dump the file to the disk.
virtual void emitStringOffsets(const SmallVector< uint64_t > &StringOffsets, uint16_t TargetDWARFVersion)=0
Emit the debug string offset table described by StringOffsets into the .debug_str_offsets table.
virtual uint64_t getDebugMacInfoSectionSize() const =0
Returns size of generated .debug_macinfo section.
virtual void emitAbbrevs(const std::vector< std::unique_ptr< DIEAbbrev > > &Abbrevs, unsigned DwarfVersion)=0
Emit the abbreviation table Abbrevs to the .debug_abbrev section.
virtual void emitDIE(DIE &Die)=0
Recursively emit the DIE tree rooted at Die.
virtual void emitAppleTypes(AccelTable< AppleAccelTableStaticTypeData > &Table)=0
Emit Apple type accelerator table.
virtual void emitDwarfDebugRangeListFragment(const CompileUnit &Unit, const AddressRanges &LinkedRanges, PatchLocation Patch, DebugDieValuePool &AddrPool)=0
Emit debug ranges (.debug_ranges, .debug_rnglists) fragment.
virtual void emitDwarfDebugAddrs(const SmallVector< uint64_t > &Addrs, uint8_t AddrSize)=0
Emit the addresses described by Addrs into the .debug_addr section.
virtual void emitLineStrings(const NonRelocatableStringpool &Pool)=0
Emit the string table described by Pool into .debug_line_str table.
virtual void emitDwarfDebugLocListFooter(const CompileUnit &Unit, MCSymbol *EndLabel)=0
Emit debug locations (.debug_loc, .debug_loclists) footer.
virtual void emitDwarfDebugRangeListFooter(const CompileUnit &Unit, MCSymbol *EndLabel)=0
Emit debug ranges (.debug_ranges, .debug_rnglists) footer.
virtual uint64_t getDebugMacroSectionSize() const =0
Returns size of generated .debug_macro section.
virtual void emitSectionContents(StringRef SecData, StringRef SecName)=0
Emit section named SecName with data SecData.
virtual void emitSwiftAST(StringRef Buffer)=0
Emit the swift_ast section stored in Buffer.
virtual uint64_t getFrameSectionSize() const =0
Returns size of generated .debug_frame section.
virtual void emitAppleObjc(AccelTable< AppleAccelTableStaticOffsetData > &Table)=0
Emit Apple Objective-C accelerator table.
The Dwarf streaming logic.
Lightweight error class with error context and mandatory checking.
static ErrorSuccess success()
Create a success value.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
MutableArrayRef - Represent a mutable reference to an array (0 or more elements consecutively in memo...
A string table that doesn't need relocations.
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef - Represent a constant reference to a string, i.e.
Helper for making strong types.
Triple - Helper class for working with autoconf configuration names.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
LLVM Value Representation.
An efficient, type-erasing, non-owning reference to a callable.
An abstract base class for streams implementations that also support a pwrite operation.
DWARFAbbreviationDeclaration::AttributeSpec AttributeSpec
Type
MessagePack types as defined in the standard, with the exception of Integer being divided into a sign...
function_ref< void(const ErrorInfoBase &, StringRef)> ErrorHandler
This is an optimization pass for GlobalISel generic memory operations.
std::vector< std::unique_ptr< CompileUnit > > UnitListTy
function_ref< void(const DWARFUnit &Unit)> CompileUnitHandler
Error createStringError(std::error_code EC, char const *Fmt, const Ts &... Vals)
Create formatted StringError object.
std::vector< DWARFLocationExpression > DWARFLocationExpressionsVector
Represents a set of absolute location expressions.
@ Dwarf
DWARF v5 .debug_names.
StrongType< NonRelocatableStringpool, OffsetsTag > OffsetsStringPool
BumpPtrAllocatorImpl BumpPtrAllocator
The standard BumpPtrAllocator which just uses the default template parameters.
std::map< std::string, std::string > swiftInterfacesMap
DenseMap< uint64_t, CompileUnit * > Offset2UnitMap
std::map< std::string, std::string > objectPrefixMap
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
bool is_contained(R &&Range, const E &Element)
Returns true if Element is found in Range.
Implement std::hash so that hash_code can be used in STL containers.
uint64_t getValueIndex(uint64_t Value)
SmallVector< uint64_t > DieValues
DenseMap< uint64_t, uint64_t > DieValueMap