forked from OSchip/llvm-project
Temporarily revert r176882 as it needs to be implemented in a different
way for all platforms. llvm-svn: 191975
This commit is contained in:
parent
ec2c9b8eba
commit
c19d6f096c
|
@ -110,18 +110,6 @@ DIE::~DIE() {
|
|||
delete Children[i];
|
||||
}
|
||||
|
||||
/// Climb up the parent chain to get the compile unit DIE to which this DIE
|
||||
/// belongs.
|
||||
DIE *DIE::getCompileUnit() {
|
||||
DIE *p = this;
|
||||
while (p) {
|
||||
if (p->getTag() == dwarf::DW_TAG_compile_unit)
|
||||
return p;
|
||||
p = p->getParent();
|
||||
}
|
||||
llvm_unreachable("We should not have orphaned DIEs.");
|
||||
}
|
||||
|
||||
DIEValue *DIE::findAttribute(uint16_t Attribute) {
|
||||
const SmallVectorImpl<DIEValue *> &Values = getValues();
|
||||
const DIEAbbrev &Abbrevs = getAbbrev();
|
||||
|
|
|
@ -149,9 +149,6 @@ namespace llvm {
|
|||
const std::vector<DIE *> &getChildren() const { return Children; }
|
||||
const SmallVectorImpl<DIEValue*> &getValues() const { return Values; }
|
||||
DIE *getParent() const { return Parent; }
|
||||
/// Climb up the parent chain to get the compile unit DIE this DIE belongs
|
||||
/// to.
|
||||
DIE *getCompileUnit();
|
||||
void setTag(uint16_t Tag) { Abbrev.setTag(Tag); }
|
||||
void setOffset(unsigned O) { Offset = O; }
|
||||
void setSize(unsigned S) { Size = S; }
|
||||
|
|
|
@ -35,8 +35,7 @@ using namespace llvm;
|
|||
/// CompileUnit - Compile unit constructor.
|
||||
CompileUnit::CompileUnit(unsigned UID, DIE *D, const MDNode *N, AsmPrinter *A,
|
||||
DwarfDebug *DW, DwarfUnits *DWU)
|
||||
: UniqueID(UID), Node(N), CUDie(D), Asm(A), DD(DW), DU(DWU), IndexTyDie(0),
|
||||
DebugInfoOffset(0) {
|
||||
: UniqueID(UID), Node(N), CUDie(D), Asm(A), DD(DW), DU(DWU), IndexTyDie(0) {
|
||||
DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1);
|
||||
insertDIE(N, D);
|
||||
}
|
||||
|
|
|
@ -87,9 +87,6 @@ class CompileUnit {
|
|||
/// corresponds to the MDNode mapped with the subprogram DIE.
|
||||
DenseMap<DIE *, const MDNode *> ContainingTypeMap;
|
||||
|
||||
/// Offset of the CUDie from beginning of debug info section.
|
||||
unsigned DebugInfoOffset;
|
||||
|
||||
/// getLowerBoundDefault - Return the default lower bound for an array. If the
|
||||
/// DWARF version doesn't handle the language, return -1.
|
||||
int64_t getDefaultLowerBound() const;
|
||||
|
@ -104,7 +101,6 @@ public:
|
|||
uint16_t getLanguage() const { return DICompileUnit(Node).getLanguage(); }
|
||||
const MDNode *getNode() const { return Node; }
|
||||
DIE *getCUDie() const { return CUDie.get(); }
|
||||
unsigned getDebugInfoOffset() const { return DebugInfoOffset; }
|
||||
const StringMap<DIE *> &getGlobalNames() const { return GlobalNames; }
|
||||
const StringMap<DIE *> &getGlobalTypes() const { return GlobalTypes; }
|
||||
|
||||
|
@ -122,7 +118,6 @@ public:
|
|||
return AccelTypes;
|
||||
}
|
||||
|
||||
void setDebugInfoOffset(unsigned DbgInfoOff) { DebugInfoOffset = DbgInfoOff; }
|
||||
/// hasContent - Return true if this compile unit has something to write out.
|
||||
///
|
||||
bool hasContent() const { return !CUDie->getChildren().empty(); }
|
||||
|
|
|
@ -372,16 +372,11 @@ DIE *DwarfDebug::updateSubprogramScopeDIE(CompileUnit *SPCU,
|
|||
// If we're updating an abstract DIE, then we will be adding the children and
|
||||
// object pointer later on. But what we don't want to do is process the
|
||||
// concrete DIE twice.
|
||||
DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode);
|
||||
if (AbsSPDIE) {
|
||||
bool InSameCU = (AbsSPDIE->getCompileUnit() == SPCU->getCUDie());
|
||||
if (DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode)) {
|
||||
// Pick up abstract subprogram DIE.
|
||||
SPDie = new DIE(dwarf::DW_TAG_subprogram);
|
||||
// If AbsSPDIE belongs to a different CU, use DW_FORM_ref_addr instead of
|
||||
// DW_FORM_ref4.
|
||||
SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin,
|
||||
InSameCU ? dwarf::DW_FORM_ref4 : dwarf::DW_FORM_ref_addr,
|
||||
AbsSPDIE);
|
||||
dwarf::DW_FORM_ref4, AbsSPDIE);
|
||||
SPCU->addDie(SPDie);
|
||||
} else {
|
||||
DISubprogram SPDecl = SP.getFunctionDeclaration();
|
||||
|
@ -1964,18 +1959,14 @@ DwarfUnits::computeSizeAndOffset(DIE *Die, unsigned Offset) {
|
|||
// Compute the size and offset of all the DIEs.
|
||||
void DwarfUnits::computeSizeAndOffsets() {
|
||||
// Offset from the beginning of debug info section.
|
||||
unsigned SecOffset = 0;
|
||||
for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
|
||||
E = CUs.end(); I != E; ++I) {
|
||||
(*I)->setDebugInfoOffset(SecOffset);
|
||||
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)
|
||||
|
||||
unsigned EndOffset = computeSizeAndOffset((*I)->getCUDie(), Offset);
|
||||
SecOffset += EndOffset;
|
||||
computeSizeAndOffset((*I)->getCUDie(), Offset);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2059,15 +2050,7 @@ void DwarfDebug::emitDIE(DIE *Die, std::vector<DIEAbbrev *> *Abbrevs) {
|
|||
DIEEntry *E = cast<DIEEntry>(Values[i]);
|
||||
DIE *Origin = E->getEntry();
|
||||
unsigned Addr = Origin->getOffset();
|
||||
if (Form == dwarf::DW_FORM_ref_addr) {
|
||||
// For DW_FORM_ref_addr, output the offset from beginning of debug info
|
||||
// section. Origin->getOffset() returns the offset from start of the
|
||||
// compile unit.
|
||||
DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
|
||||
Addr += Holder.getCUOffset(Origin->getCompileUnit());
|
||||
}
|
||||
Asm->OutStreamer.EmitIntValue(Addr,
|
||||
Form == dwarf::DW_FORM_ref_addr ? DIEEntry::getRefAddrSize(Asm) : 4);
|
||||
Asm->EmitInt32(Addr);
|
||||
break;
|
||||
}
|
||||
case dwarf::DW_AT_ranges: {
|
||||
|
@ -2164,19 +2147,6 @@ void DwarfUnits::emitUnits(DwarfDebug *DD,
|
|||
}
|
||||
}
|
||||
|
||||
/// For a given compile unit DIE, returns offset from beginning of debug info.
|
||||
unsigned DwarfUnits::getCUOffset(DIE *Die) {
|
||||
assert(Die->getTag() == dwarf::DW_TAG_compile_unit &&
|
||||
"Input DIE should be compile unit in getCUOffset.");
|
||||
for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(), E = CUs.end();
|
||||
I != E; ++I) {
|
||||
CompileUnit *TheCU = *I;
|
||||
if (TheCU->getCUDie() == Die)
|
||||
return TheCU->getDebugInfoOffset();
|
||||
}
|
||||
llvm_unreachable("The compile unit DIE should belong to CUs in DwarfUnits.");
|
||||
}
|
||||
|
||||
// Emit the debug info section.
|
||||
void DwarfDebug::emitDebugInfo() {
|
||||
DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
|
||||
|
|
|
@ -294,10 +294,6 @@ public:
|
|||
|
||||
/// \brief Returns the address pool.
|
||||
AddrPool *getAddrPool() { return &AddressPool; }
|
||||
|
||||
/// \brief for a given compile unit DIE, returns offset from beginning of
|
||||
/// debug info.
|
||||
unsigned getCUOffset(DIE *Die);
|
||||
};
|
||||
|
||||
/// \brief Helper used to pair up a symbol and it's DWARF compile unit.
|
||||
|
|
Loading…
Reference in New Issue