forked from OSchip/llvm-project
Compute the offsets of the compile units. We need this so that when we emit a
concrete instance of an inlined function, we can get the actual address of the abstract instance inside of the compile unit. This isn't currently used, but will be by a future check-in. llvm-svn: 71263
This commit is contained in:
parent
c05bb947c4
commit
fa03b0084a
|
@ -1289,6 +1289,11 @@ class DwarfDebug : public Dwarf {
|
|||
/// variables.
|
||||
DenseMap<const MachineInstr *, DbgScope *> InlinedVariableScopes;
|
||||
|
||||
/// CompileUnitOffsets - A vector of the offsets of the compile units. This is
|
||||
/// used when calculating the "origin" of a concrete instance of an inlined
|
||||
/// function.
|
||||
DenseMap<CompileUnit *, unsigned> CompileUnitOffsets;
|
||||
|
||||
/// DebugTimer - Timer for the Dwarf debug writer.
|
||||
Timer *DebugTimer;
|
||||
|
||||
|
@ -2360,24 +2365,28 @@ private:
|
|||
/// SizeAndOffsets - Compute the size and offset of all the DIEs.
|
||||
///
|
||||
void SizeAndOffsets() {
|
||||
// Compute size of compile unit header.
|
||||
static unsigned Offset =
|
||||
sizeof(int32_t) + // Length of Compilation Unit Info
|
||||
sizeof(int16_t) + // DWARF version number
|
||||
sizeof(int32_t) + // Offset Into Abbrev. Section
|
||||
sizeof(int8_t); // Pointer Size (in bytes)
|
||||
|
||||
// Process base compile unit.
|
||||
if (MainCU) {
|
||||
// Compute size of compile unit header
|
||||
unsigned Offset = sizeof(int32_t) + // Length of Compilation Unit Info
|
||||
sizeof(int16_t) + // DWARF version number
|
||||
sizeof(int32_t) + // Offset Into Abbrev. Section
|
||||
sizeof(int8_t); // Pointer Size (in bytes)
|
||||
SizeAndOffsetDie(MainCU->getDie(), Offset, true);
|
||||
CompileUnitOffsets[MainCU] = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
// Process all compile units.
|
||||
unsigned PrevOffset = 0;
|
||||
|
||||
for (unsigned i = 0, e = CompileUnits.size(); i != e; ++i) {
|
||||
CompileUnit *Unit = CompileUnits[i];
|
||||
// Compute size of compile unit header
|
||||
unsigned Offset = sizeof(int32_t) + // Length of Compilation Unit Info
|
||||
sizeof(int16_t) + // DWARF version number
|
||||
sizeof(int32_t) + // Offset Into Abbrev. Section
|
||||
sizeof(int8_t); // Pointer Size (in bytes)
|
||||
SizeAndOffsetDie(Unit->getDie(), Offset, true);
|
||||
CompileUnitOffsets[Unit] = PrevOffset;
|
||||
PrevOffset += SizeAndOffsetDie(Unit->getDie(), Offset, true)
|
||||
+ sizeof(int32_t); // FIXME - extra pad for gdb bug.
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue