mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-18 17:38:30 +00:00
DW_AT_stmt_list attribute attached with a compile unit encodes offset of line number information for this compile unit in debug_line section. This offset is always zero when only one compile unit is emitted in a object file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99223 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9d39e616cc
commit
0493f95a2c
@ -277,31 +277,6 @@ void DIELabel::print(raw_ostream &O) {
|
||||
}
|
||||
#endif
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// DIESectionOffset Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
/// EmitValue - Emit delta value.
|
||||
///
|
||||
void DIESectionOffset::EmitValue(DwarfPrinter *D, unsigned Form) const {
|
||||
bool IsSmall = Form == dwarf::DW_FORM_data4;
|
||||
D->EmitSectionOffset(Label, Section, IsSmall, IsEH);
|
||||
}
|
||||
|
||||
/// SizeOf - Determine size of delta value in bytes.
|
||||
///
|
||||
unsigned DIESectionOffset::SizeOf(const TargetData *TD, unsigned Form) const {
|
||||
if (Form == dwarf::DW_FORM_data4) return 4;
|
||||
return TD->getPointerSize();
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
void DIESectionOffset::print(raw_ostream &O) {
|
||||
O << "Off: " << Label->getName() << "-" << Section->getName()
|
||||
<< "-" << IsEH;
|
||||
}
|
||||
#endif
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// DIEDelta Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -324,38 +324,6 @@ namespace llvm {
|
||||
static bool classof(const DIELabel *) { return true; }
|
||||
static bool classof(const DIEValue *L) { return L->getType() == isLabel; }
|
||||
|
||||
#ifndef NDEBUG
|
||||
virtual void print(raw_ostream &O);
|
||||
#endif
|
||||
};
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
/// DIESectionOffset - A section offset DIE.
|
||||
///
|
||||
class DIESectionOffset : public DIEValue {
|
||||
const MCSymbol *Label;
|
||||
const MCSymbol *Section;
|
||||
bool IsEH : 1;
|
||||
public:
|
||||
DIESectionOffset(const MCSymbol *Lab, const MCSymbol *Sec,
|
||||
bool isEH = false)
|
||||
: DIEValue(isSectionOffset), Label(Lab), Section(Sec),
|
||||
IsEH(isEH) {}
|
||||
|
||||
/// EmitValue - Emit section offset.
|
||||
///
|
||||
virtual void EmitValue(DwarfPrinter *D, unsigned Form) const;
|
||||
|
||||
/// SizeOf - Determine size of section offset value in bytes.
|
||||
///
|
||||
virtual unsigned SizeOf(const TargetData *TD, unsigned Form) const;
|
||||
|
||||
// Implement isa/cast/dyncast.
|
||||
static bool classof(const DIESectionOffset *) { return true; }
|
||||
static bool classof(const DIEValue *D) {
|
||||
return D->getType() == isSectionOffset;
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
virtual void print(raw_ostream &O);
|
||||
#endif
|
||||
|
@ -386,16 +386,6 @@ void DwarfDebug::addLabel(DIE *Die, unsigned Attribute, unsigned Form,
|
||||
Die->addValue(Attribute, Form, Value);
|
||||
}
|
||||
|
||||
/// addSectionOffset - Add a section offset label attribute data and value.
|
||||
///
|
||||
void DwarfDebug::addSectionOffset(DIE *Die, unsigned Attribute, unsigned Form,
|
||||
const MCSymbol *Label,const MCSymbol *Section,
|
||||
bool isEH) {
|
||||
DIEValue *Value = new DIESectionOffset(Label, Section, isEH);
|
||||
DIEValues.push_back(Value);
|
||||
Die->addValue(Attribute, Form, Value);
|
||||
}
|
||||
|
||||
/// addDelta - Add a label delta attribute data and value.
|
||||
///
|
||||
void DwarfDebug::addDelta(DIE *Die, unsigned Attribute, unsigned Form,
|
||||
@ -1666,10 +1656,10 @@ void DwarfDebug::constructCompileUnit(MDNode *N) {
|
||||
unsigned ID = GetOrCreateSourceID(Dir, FN);
|
||||
|
||||
DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
|
||||
// FIXME: Why getting the delta between two identical labels??
|
||||
addSectionOffset(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
|
||||
getTempLabel("section_line"), getTempLabel("section_line"),
|
||||
false);
|
||||
// DW_AT_stmt_list is a offset of line number information for this
|
||||
// compile unit in debug_line section. It is always zero when only one
|
||||
// compile unit is emitted in one object file.
|
||||
addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
|
||||
addString(Die, dwarf::DW_AT_producer, dwarf::DW_FORM_string,
|
||||
DIUnit.getProducer());
|
||||
addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data1,
|
||||
|
@ -250,12 +250,6 @@ class DwarfDebug : public DwarfPrinter {
|
||||
void addLabel(DIE *Die, unsigned Attribute, unsigned Form,
|
||||
const MCSymbol *Label);
|
||||
|
||||
/// addSectionOffset - Add a section offset label attribute data and value.
|
||||
///
|
||||
void addSectionOffset(DIE *Die, unsigned Attribute, unsigned Form,
|
||||
const MCSymbol *Label, const MCSymbol *Section,
|
||||
bool isEH = false);
|
||||
|
||||
/// addDelta - Add a label delta attribute data and value.
|
||||
///
|
||||
void addDelta(DIE *Die, unsigned Attribute, unsigned Form,
|
||||
|
Loading…
Reference in New Issue
Block a user