mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-28 19:25:00 +00:00
Split address information for DWARF5 split dwarf proposal. This involves
using the DW_FORM_GNU_addr_index and a separate .debug_addr section which stays in the executable and is fully linked. Sneak in two other small changes: a) Print out the debug_str_offsets.dwo section. b) Change form we're expecting the entries in the debug_str_offsets.dwo section to take from ULEB128 to U32. Add tests for all of this in the fission-cu.ll test. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172578 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -195,6 +195,10 @@ public:
|
||||
typedef StringMap<std::pair<MCSymbol*, unsigned>,
|
||||
BumpPtrAllocator&> StrPool;
|
||||
|
||||
// A Symbol->pair<Symbol, unsigned> mapping of addresses used by indirect
|
||||
// references.
|
||||
typedef DenseMap<MCSymbol *, std::pair<MCSymbol *, unsigned> > AddrPool;
|
||||
|
||||
/// \brief Collects and handles information specific to a particular
|
||||
/// collection of units.
|
||||
class DwarfUnits {
|
||||
@@ -215,12 +219,17 @@ class DwarfUnits {
|
||||
unsigned NextStringPoolNumber;
|
||||
std::string StringPref;
|
||||
|
||||
// Collection of addresses for this unit and assorted labels.
|
||||
AddrPool AddressPool;
|
||||
unsigned NextAddrPoolNumber;
|
||||
|
||||
public:
|
||||
DwarfUnits(AsmPrinter *AP, FoldingSet<DIEAbbrev> *AS,
|
||||
std::vector<DIEAbbrev *> *A, const char *Pref,
|
||||
BumpPtrAllocator &DA) :
|
||||
Asm(AP), AbbreviationsSet(AS), Abbreviations(A),
|
||||
StringPool(DA), NextStringPoolNumber(0), StringPref(Pref) {}
|
||||
StringPool(DA), NextStringPoolNumber(0), StringPref(Pref),
|
||||
AddressPool(), NextAddrPoolNumber(0) {}
|
||||
|
||||
/// \brief Compute the size and offset of a DIE given an incoming Offset.
|
||||
unsigned computeSizeAndOffset(DIE *Die, unsigned Offset);
|
||||
@@ -242,6 +251,9 @@ public:
|
||||
/// \brief Emit all of the strings to the section given.
|
||||
void emitStrings(const MCSection *, const MCSection *, const MCSymbol *);
|
||||
|
||||
/// \brief Emit all of the addresses to the section given.
|
||||
void emitAddresses(const MCSection *);
|
||||
|
||||
/// \brief Returns the entry into the start of the pool.
|
||||
MCSymbol *getStringPoolSym();
|
||||
|
||||
@@ -255,6 +267,13 @@ public:
|
||||
|
||||
/// \brief Returns the string pool.
|
||||
StrPool *getStringPool() { return &StringPool; }
|
||||
|
||||
/// \brief Returns the index into the address pool with the given
|
||||
/// label/symbol.
|
||||
unsigned getAddrPoolIndex(MCSymbol *);
|
||||
|
||||
/// \brief Returns the address pool.
|
||||
AddrPool *getAddrPool() { return &AddressPool; }
|
||||
};
|
||||
|
||||
/// \brief Collects and handles dwarf debug information.
|
||||
@@ -560,7 +579,7 @@ private:
|
||||
}
|
||||
|
||||
/// \brief Return Label preceding the instruction.
|
||||
const MCSymbol *getLabelBeforeInsn(const MachineInstr *MI);
|
||||
MCSymbol *getLabelBeforeInsn(const MachineInstr *MI);
|
||||
|
||||
/// \brief Ensure that a label will be emitted after MI.
|
||||
void requestLabelAfterInsn(const MachineInstr *MI) {
|
||||
@@ -568,7 +587,7 @@ private:
|
||||
}
|
||||
|
||||
/// \brief Return Label immediately following the instruction.
|
||||
const MCSymbol *getLabelAfterInsn(const MachineInstr *MI);
|
||||
MCSymbol *getLabelAfterInsn(const MachineInstr *MI);
|
||||
|
||||
public:
|
||||
//===--------------------------------------------------------------------===//
|
||||
|
Reference in New Issue
Block a user