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>
73 bool IsLittleEndian) = 0;
127 emitAbbrevs(
const std::vector<std::unique_ptr<DIEAbbrev>> &Abbrevs,
128 unsigned DwarfVersion) = 0;
190 uint8_t AddrSize) = 0;
226 unsigned DwarfVersion) = 0;
300 std::unique_ptr<DWARFContext>
Dwarf;
345 StringsTranslator(StringsTranslator), ErrorHandler(ErrorHandler),
346 WarningHandler(WarningHandler) {}
351 return std::make_unique<DWARFLinker>(ErrorHandler, WarningHandler,
368 typedef std::function<ErrorOr<DWARFFile &>(
StringRef ContainerName,
402 void setNoODR(
bool NoODR) { Options.NoODR = NoODR; }
413 Options.KeepFunctionForStatic = KeepFunctionForStatic;
422 Options.AccelTables.emplace_back(Kind);
430 ObjectContexts.reserve(ObjFilesNum);
436 Options.InputVerificationHandler = Handler;
441 Options.ParseableSwiftInterfaces = Map;
446 Options.ObjectPrefixMap = Map;
451 if ((TargetDWARFVersion < 1) || (TargetDWARFVersion > 5))
453 "unsupported DWARF version: %d",
456 Options.TargetDWARFVersion = TargetDWARFVersion;
462 enum TraversalFlags {
464 TF_InFunctionScope = 1 << 1,
465 TF_DependencyWalk = 1 << 2,
466 TF_ParentWalk = 1 << 3,
472 enum class WorklistItemType {
476 LookForChildDIEsToKeep,
478 LookForRefDIEsToKeep,
480 LookForParentDIEsToKeep,
483 UpdateChildIncompleteness,
486 UpdateRefIncompleteness,
494 struct WorklistItem {
496 WorklistItemType
Type;
500 const unsigned AncestorIdx;
501 CompileUnit::DIEInfo *OtherInfo;
504 WorklistItem(DWARFDie Die, CompileUnit &
CU,
unsigned Flags,
505 WorklistItemType
T = WorklistItemType::LookForDIEsToKeep)
508 WorklistItem(DWARFDie Die, CompileUnit &
CU, WorklistItemType
T,
509 CompileUnit::DIEInfo *OtherInfo =
nullptr)
512 WorklistItem(
unsigned AncestorIdx, CompileUnit &
CU,
unsigned Flags)
514 AncestorIdx(AncestorIdx) {}
518 void verifyInput(
const DWARFFile &File);
521 bool needToTranslateStrings() {
return StringsTranslator !=
nullptr; }
523 void reportWarning(
const Twine &
Warning,
const DWARFFile &File,
524 const DWARFDie *DIE =
nullptr)
const {
525 if (WarningHandler !=
nullptr)
529 void reportError(
const Twine &
Warning,
const DWARFFile &File,
530 const DWARFDie *DIE =
nullptr)
const {
531 if (ErrorHandler !=
nullptr)
535 void copyInvariantDebugSection(DWARFContext &
Dwarf);
539 struct RefModuleUnit {
540 RefModuleUnit(DWARFFile &File, std::unique_ptr<CompileUnit> Unit)
542 RefModuleUnit(RefModuleUnit &&
Other)
544 RefModuleUnit(
const RefModuleUnit &) =
delete;
547 std::unique_ptr<CompileUnit> Unit;
549 using ModuleUnitListTy = std::vector<RefModuleUnit>;
555 ModuleUnitListTy ModuleUnits;
558 LinkContext(DWARFFile &File) :
File(
File) {}
563 CompileUnits.clear();
570 void cleanupAuxiliarryData(LinkContext &Context);
574 void lookForParentDIEsToKeep(
unsigned AncestorIdx, CompileUnit &
CU,
576 SmallVectorImpl<WorklistItem> &Worklist);
580 void lookForChildDIEsToKeep(
const DWARFDie &Die, CompileUnit &
CU,
582 SmallVectorImpl<WorklistItem> &Worklist);
586 void lookForRefDIEsToKeep(
const DWARFDie &Die, CompileUnit &
CU,
588 const DWARFFile &File,
589 SmallVectorImpl<WorklistItem> &Worklist);
593 void markODRCanonicalDie(
const DWARFDie &Die, CompileUnit &
CU);
602 void lookForDIEsToKeep(AddressesMap &RelocMgr,
const UnitListTy &Units,
603 const DWARFDie &DIE,
const DWARFFile &File,
604 CompileUnit &
CU,
unsigned Flags);
610 std::pair<bool, bool> isClangModuleRef(
const DWARFDie &CUDie,
611 std::string &PCMFile,
612 LinkContext &Context,
unsigned Indent,
621 bool registerModuleReference(
const DWARFDie &CUDie, LinkContext &Context,
624 unsigned Indent = 0);
630 const std::string &PCMFile, LinkContext &Context,
634 Error cloneModuleUnit(LinkContext &Context, RefModuleUnit &Unit,
635 DeclContextTree &ODRContexts,
638 DebugDieValuePool &StringOffsetPool,
639 unsigned Indent = 0);
641 unsigned shouldKeepDIE(AddressesMap &RelocMgr,
const DWARFDie &DIE,
642 const DWARFFile &File, CompileUnit &Unit,
643 CompileUnit::DIEInfo &MyInfo,
unsigned Flags);
651 std::pair<bool, std::optional<int64_t>>
652 getVariableRelocAdjustment(AddressesMap &RelocMgr,
const DWARFDie &DIE);
656 unsigned shouldKeepVariableDIE(AddressesMap &RelocMgr,
const DWARFDie &DIE,
657 CompileUnit::DIEInfo &MyInfo,
unsigned Flags);
659 unsigned shouldKeepSubprogramDIE(AddressesMap &RelocMgr,
const DWARFDie &DIE,
660 const DWARFFile &File, CompileUnit &Unit,
661 CompileUnit::DIEInfo &MyInfo,
668 DWARFDie resolveDIEReference(
const DWARFFile &File,
const UnitListTy &Units,
669 const DWARFFormValue &RefValue,
670 const DWARFDie &DIE, CompileUnit *&RefCU);
678 struct DWARFLinkerOptions;
686 DebugDieValuePool &StringOffsetPool;
687 DebugDieValuePool AddrPool;
692 std::vector<std::unique_ptr<CompileUnit>> &CompileUnits;
701 DIECloner(DWARFLinker &Linker, DwarfEmitter *Emitter, DWARFFile &ObjFile,
703 std::vector<std::unique_ptr<CompileUnit>> &CompileUnits,
706 DebugDieValuePool &StringOffsetPool)
708 DebugStrPool(DebugStrPool), DebugLineStrPool(DebugLineStrPool),
709 StringOffsetPool(StringOffsetPool), DIEAlloc(DIEAlloc),
710 CompileUnits(CompileUnits), Update(Update) {}
723 DIE *cloneDIE(
const DWARFDie &InputDIE,
const DWARFFile &File,
724 CompileUnit &U, int64_t PCOffset,
uint32_t OutOffset,
725 unsigned Flags,
bool IsLittleEndian, DIE *Die =
nullptr);
730 uint64_t cloneAllCompileUnits(DWARFContext &DwarfContext,
731 const DWARFFile &File,
bool IsLittleEndian);
734 void emitDebugAddrSection(CompileUnit &Unit,
737 using ExpressionHandlerRef = function_ref<void(
738 SmallVectorImpl<uint8_t> &, SmallVectorImpl<uint8_t> &,
739 int64_t AddrRelocAdjustment)>;
743 void generateUnitLocations(CompileUnit &Unit,
const DWARFFile &File,
744 ExpressionHandlerRef ExprHandler);
747 using AttributeSpec = DWARFAbbreviationDeclaration::AttributeSpec;
751 struct AttributesInfo {
753 DwarfStringPoolEntryRef
Name, MangledName, NameWithoutTemplate;
760 int64_t PCOffset = 0;
763 bool HasLowPc =
false;
766 bool HasRanges =
false;
769 bool IsDeclaration =
false;
772 bool AttrStrOffsetBaseSeen =
false;
775 bool HasAppleOrigin =
false;
777 AttributesInfo() =
default;
781 unsigned cloneAttribute(DIE &Die,
const DWARFDie &InputDIE,
782 const DWARFFile &File, CompileUnit &U,
783 const DWARFFormValue &Val,
784 const AttributeSpec AttrSpec,
unsigned AttrSize,
785 AttributesInfo &AttrInfo,
bool IsLittleEndian);
790 unsigned cloneStringAttribute(DIE &Die, AttributeSpec AttrSpec,
791 const DWARFFormValue &Val,
const DWARFUnit &U,
792 AttributesInfo &
Info);
797 unsigned cloneDieReferenceAttribute(DIE &Die,
const DWARFDie &InputDIE,
798 AttributeSpec AttrSpec,
800 const DWARFFormValue &Val,
801 const DWARFFile &File,
805 void cloneExpression(DataExtractor &
Data, DWARFExpression Expression,
806 const DWARFFile &File, CompileUnit &Unit,
808 int64_t AddrRelocAdjustment,
bool IsLittleEndian);
813 unsigned cloneBlockAttribute(DIE &Die,
const DWARFDie &InputDIE,
814 const DWARFFile &File, CompileUnit &Unit,
815 AttributeSpec AttrSpec,
816 const DWARFFormValue &Val,
817 bool IsLittleEndian);
822 unsigned cloneAddressAttribute(DIE &Die,
const DWARFDie &InputDIE,
823 AttributeSpec AttrSpec,
unsigned AttrSize,
824 const DWARFFormValue &Val,
825 const CompileUnit &Unit,
826 AttributesInfo &
Info);
830 unsigned cloneScalarAttribute(DIE &Die,
const DWARFDie &InputDIE,
831 const DWARFFile &File, CompileUnit &U,
832 AttributeSpec AttrSpec,
833 const DWARFFormValue &Val,
unsigned AttrSize,
834 AttributesInfo &
Info);
840 bool getDIENames(
const DWARFDie &Die, AttributesInfo &
Info,
843 uint32_t hashFullyQualifiedName(DWARFDie DIE, CompileUnit &U,
844 const DWARFFile &File,
845 int RecurseDepth = 0);
848 void addObjCAccelerator(CompileUnit &Unit,
const DIE *Die,
849 DwarfStringPoolEntryRef
Name,
852 void rememberUnitForMacroOffset(CompileUnit &Unit);
857 void generateLineTableForUnit(CompileUnit &Unit);
861 void assignAbbrev(DIEAbbrev &Abbrev);
865 void generateUnitRanges(CompileUnit &Unit,
const DWARFFile &File,
866 DebugDieValuePool &AddrPool)
const;
869 void emitAcceleratorEntriesForUnit(CompileUnit &Unit);
872 void patchFrameInfoForObject(LinkContext &Context);
875 FoldingSet<DIEAbbrev> AbbreviationsSet;
880 std::vector<std::unique_ptr<DIEAbbrev>> Abbreviations;
883 std::vector<DIELoc *> DIELocs;
886 std::vector<DIEBlock *> DIEBlocks;
892 std::unique_ptr<DwarfStreamer> TheDwarfEmitter;
893 std::vector<LinkContext> ObjectContexts;
898 StringMap<uint32_t> EmittedCIEs;
905 DWARF5AccelTable DebugNames;
906 AccelTable<AppleAccelTableStaticOffsetData> AppleNames;
907 AccelTable<AppleAccelTableStaticOffsetData> AppleNamespaces;
908 AccelTable<AppleAccelTableStaticOffsetData> AppleObjc;
909 AccelTable<AppleAccelTableStaticTypeData> AppleTypes;
912 StringMap<uint64_t> ClangModules;
916 std::function<StringRef(StringRef)> StringsTranslator =
nullptr;
919 unsigned UniqueUnitID = 0;
928 struct DWARFLinkerOptions {
936 bool Statistics =
false;
939 bool VerifyInputDWARF =
false;
949 bool KeepFunctionForStatic =
false;
952 unsigned Threads = 1;
955 SmallVector<AccelTableKind, 1> AccelTables;
958 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 std::optional< StringRef > getLibraryInstallName()=0
Returns the file name associated to the AddessesMap.
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 ...
virtual void updateAndSaveValidRelocs(bool IsDWARF5, uint64_t OriginalUnitOffset, int64_t LinkedOffset, uint64_t StartOffset, uint64_t EndOffset)=0
Update and save original relocations located in between StartOffset and EndOffset.
virtual void updateRelocationsWithUnitOffset(uint64_t OriginalUnitOffset, uint64_t OutputUnitOffset)=0
Update the valid relocations that used OriginalUnitOffset as the compile unit offset,...
virtual bool needToSaveValidRelocs()=0
Check if the linker needs to gather and save relocation info.
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.
UnloadCallbackTy UnloadFunc
Callback to the module keeping object file to unload.
DWARFFile(StringRef Name, std::unique_ptr< DWARFContext > Dwarf, std::unique_ptr< AddressesMap > Addresses, UnloadCallbackTy UnloadFunc=nullptr)
void unload()
Unloads object file and corresponding AddressesMap and Dwarf Context.
std::unique_ptr< AddressesMap > Addresses
Helpful address information(list of valid address ranges, relocations).
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 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 void emitDebugNames(DWARF5AccelTable &Table)=0
Emit DWARF debug names.
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