9#ifndef LLVM_DWARFLINKER_CLASSIC_DWARFLINKERCOMPILEUNIT_H
10#define LLVM_DWARFLINKER_CLASSIC_DWARFLINKERCOMPILEUNIT_H
19namespace dwarf_linker {
48 assert(Old.getType() == DIEValue::isInteger);
54 return I->getDIEInteger().getValue();
103#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
110 : OrigUnit(OrigUnit),
ID(
ID), ClangModuleName(ClangModuleName) {
119 HasODR = CanUseODR && (*Lang == dwarf::DW_LANG_C_plus_plus ||
120 *Lang == dwarf::DW_LANG_C_plus_plus_03 ||
121 *Lang == dwarf::DW_LANG_C_plus_plus_11 ||
122 *Lang == dwarf::DW_LANG_C_plus_plus_14 ||
123 *Lang == dwarf::DW_LANG_ObjC_plus_plus);
162 std::optional<uint64_t>
getLowPc()
const {
return LowPc; }
171 return UnitRangeAttribute;
175 return LocationAttributes;
218 bool SkipPubnamesSection =
false);
224 bool SkipPubnamesSection =
false);
229 bool ObjcClassImplementation,
259 const std::vector<AccelInfo> &
getPubnames()
const {
return Pubnames; }
260 const std::vector<AccelInfo> &
getPubtypes()
const {
return Pubtypes; }
262 const std::vector<AccelInfo> &
getObjC()
const {
return ObjC; }
270 std::vector<DIEInfo> Info;
271 std::optional<BasicDIEUnit> NewUnit;
277 std::optional<uint64_t> LowPc;
287 std::tuple<DIE *, const CompileUnit *, DeclContext *, PatchLocation>>
288 ForwardDIEReferences;
302 std::optional<PatchLocation> UnitRangeAttribute;
315 std::vector<AccelInfo> Pubnames;
316 std::vector<AccelInfo> Pubtypes;
317 std::vector<AccelInfo> Namespaces;
318 std::vector<AccelInfo> ObjC;
331 std::string ClangModuleName;
#define LLVM_DUMP_METHOD
Mark debug helper function definitions like dump() that should not be stripped from debug builds.
Returns the sub type a function will return at a given Idx Should correspond to the result type of an ExtractValue instruction executed with just that one unsigned Idx
This file defines the DenseMap class.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
AddressRangesMap class maps values to the address ranges.
A structured debug information entry.
Utility class that carries the DWARF compile/type unit and the debug info entry in an object.
dwarf::Tag getTag() const
unsigned getNumDIEs()
Returns the number of DIEs in the unit.
DWARFDie getUnitDIE(bool ExtractUnitDIEOnly=true)
uint32_t getDIEIndex(const DWARFDebugInfoEntry *Die) const
Return the index of a Die entry inside the unit's DIE vector.
size_type count(const_arg_type_t< KeyT > Val) const
Return 1 if the specified key is in the map, 0 otherwise.
DwarfStringPoolEntryRef: Dwarf string pool entry reference.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
StringRef - Represent a constant reference to a string, i.e.
Stores all information relating to a compile unit, be it in its original instance in the object file ...
const std::vector< AccelInfo > & getNamespaces() const
const std::vector< AccelInfo > & getPubnames() const
void addFunctionRange(uint64_t LowPC, uint64_t HighPC, int64_t PCOffset)
Add a function range [LowPC, HighPC) that is relocated by applying offset PCOffset.
const std::vector< AccelInfo > & getPubtypes() const
const std::vector< AccelInfo > & getObjC() const
void fixupForwardReferences()
Apply all fixups recorded by noteForwardReference().
const DIEInfo & getInfo(unsigned Idx) const
void noteForwardReference(DIE *Die, const CompileUnit *RefUnit, DeclContext *Ctxt, PatchLocation Attr)
Keep track of a forward reference to DIE Die in RefUnit by Attr.
void noteLocationAttribute(PatchLocation Attr)
Keep track of a location attribute pointing to a location list in the debug_loc section.
std::optional< uint64_t > getLowPc() const
void addNameAccelerator(const DIE *Die, DwarfStringPoolEntryRef Name, bool SkipPubnamesSection=false)
Add a name accelerator entry for Die with Name.
void addNamespaceAccelerator(const DIE *Die, DwarfStringPoolEntryRef Name)
Add a name accelerator entry for Die with Name.
uint64_t getStartOffset() const
DIEInfo & getInfo(const DWARFDie &Die)
DIE * getOutputUnitDIE() const
uint64_t getNextUnitOffset() const
uint64_t getHighPc() const
StringRef getSysRoot()
Return the DW_AT_LLVM_sysroot of the compile unit or an empty StringRef.
DIEInfo & getInfo(unsigned Idx)
std::optional< PatchLocation > getUnitRangesAttribute() const
void setStartOffset(uint64_t DebugInfoSize)
void noteRangeAttribute(const DIE &Die, PatchLocation Attr)
Keep track of a DW_AT_range attribute that we will need to patch up later.
void setLabelBegin(MCSymbol *S)
void addObjCAccelerator(const DIE *Die, DwarfStringPoolEntryRef Name, bool SkipPubnamesSection=false)
Add various accelerator entries for Die with Name which is stored in the string table at Offset.
bool hasLabelAt(uint64_t Addr) const
void addTypeAccelerator(const DIE *Die, DwarfStringPoolEntryRef Name, bool ObjcClassImplementation, uint32_t QualifiedNameHash)
Add a type accelerator entry for Die with Name which is stored in the string table at Offset.
DWARFUnit & getOrigUnit() const
const LocListAttributesTy & getLocationAttributes() const
bool isClangModule() const
uint64_t computeNextUnitOffset(uint16_t DwarfVersion)
Compute the end offset for this unit.
MCSymbol * getLabelBegin()
const RangesTy & getFunctionRanges() const
void addLabelLowPc(uint64_t LabelLowPc, int64_t PcOffset)
Add the low_pc of a label that is relocated by applying offset PCOffset.
void markEverythingAsKept()
Mark every DIE in this unit as kept.
CompileUnit(DWARFUnit &OrigUnit, unsigned ID, bool CanUseODR, StringRef ClangModuleName)
unsigned getUniqueID() const
const RngListAttributesTy & getRangesAttributes()
dwarf::Tag getTag() const
const std::string & getClangModuleName() const
A DeclContext is a named program scope that is used for ODR uniquing of types.
std::optional< uint64_t > toUnsigned(const std::optional< DWARFFormValue > &V)
Take an optional DWARFFormValue and try to extract an unsigned constant.
This is an optimization pass for GlobalISel generic memory operations.
Hold the input and output of the debug info size in bytes.
AccelInfo(DwarfStringPoolEntryRef Name, const DIE *Die, uint32_t QualifiedNameHash, bool ObjCClassIsImplementation)
AccelInfo(DwarfStringPoolEntryRef Name, const DIE *Die, bool SkipPubSection=false)
DwarfStringPoolEntryRef Name
Name of the entry.
uint32_t QualifiedNameHash
Hash of the fully qualified name.
bool ObjcClassImplementation
Is this an ObjC class implementation?
bool SkipPubSection
Emit this entry only in the apple_* sections.
const DIE * Die
DIE this entry describes.
Information gathered about a DIE in the object file.
uint32_t ParentIdx
The index of this DIE's parent.
bool Prune
Is this a pure forward declaration we can strip?
bool ODRMarkingDone
Is ODR marking done?
int64_t AddrAdjust
Address offset to apply to the described entity.
bool HasLocationExpressionAddr
Is this a variable with a location attribute referencing address?
bool InDebugMap
Was this DIE's entity found in the map?
DIE * Clone
Cloned version of that DIE.
LLVM_DUMP_METHOD void dump()
bool UnclonedReference
Is this a reference to a DIE that hasn't been cloned yet?
bool InModuleScope
Is DIE in the clang module scope?
bool Incomplete
Does DIE transitively refer an incomplete decl?
DeclContext * Ctxt
ODR Declaration context.
bool Keep
Is the DIE part of the linked output?
void set(uint64_t New) const
PatchLocation(DIE::value_iterator I, int64_t Reloc)
PatchLocation(DIE::value_iterator I)