mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
Do not hardcode DW_AT_stmt_list value.
Inspired by Artur Pietrek. llvm-svn: 107202
This commit is contained in:
parent
1b4210315e
commit
8052c941ca
@ -321,6 +321,7 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
|
||||
DwarfFrameSectionSym = DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0;
|
||||
DwarfStrSectionSym = TextSectionSym = 0;
|
||||
DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = 0;
|
||||
DwarfDebugLineSectionSym = CurrentLineSectionSym = 0;
|
||||
FunctionBeginSym = FunctionEndSym = 0;
|
||||
{
|
||||
NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
|
||||
@ -1794,9 +1795,9 @@ void DwarfDebug::constructCompileUnit(const MDNode *N) {
|
||||
// simplifies debug range entries.
|
||||
addUInt(Die, dwarf::DW_AT_entry_pc, dwarf::DW_FORM_addr, 0);
|
||||
// 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);
|
||||
// compile unit in debug_line section. This offset is calculated
|
||||
// during endMoudle().
|
||||
addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
|
||||
|
||||
if (!Dir.empty())
|
||||
addString(Die, dwarf::DW_AT_comp_dir, dwarf::DW_FORM_string, Dir);
|
||||
@ -2081,15 +2082,15 @@ void DwarfDebug::endModule() {
|
||||
// Compute DIE offsets and sizes.
|
||||
computeSizeAndOffsets();
|
||||
|
||||
// Emit source line correspondence into a debug line section.
|
||||
emitDebugLines();
|
||||
|
||||
// Emit all the DIEs into a debug info section
|
||||
emitDebugInfo();
|
||||
|
||||
// Corresponding abbreviations into a abbrev section.
|
||||
emitAbbreviations();
|
||||
|
||||
// Emit source line correspondence into a debug line section.
|
||||
emitDebugLines();
|
||||
|
||||
// Emit info into a debug pubnames section.
|
||||
emitDebugPubNames();
|
||||
|
||||
@ -2992,7 +2993,8 @@ void DwarfDebug::EmitSectionLabels() {
|
||||
if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
|
||||
EmitSectionSym(Asm, MacroInfo);
|
||||
|
||||
EmitSectionSym(Asm, TLOF.getDwarfLineSection());
|
||||
DwarfDebugLineSectionSym =
|
||||
EmitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
|
||||
EmitSectionSym(Asm, TLOF.getDwarfLocSection());
|
||||
EmitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
|
||||
EmitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
|
||||
@ -3055,6 +3057,11 @@ void DwarfDebug::emitDIE(DIE *Die) {
|
||||
4);
|
||||
break;
|
||||
}
|
||||
case dwarf::DW_AT_stmt_list: {
|
||||
Asm->EmitLabelDifference(CurrentLineSectionSym,
|
||||
DwarfDebugLineSectionSym, 4);
|
||||
break;
|
||||
}
|
||||
case dwarf::DW_AT_location: {
|
||||
if (UseDotDebugLocEntry.count(Die) != 0) {
|
||||
DIELabel *L = cast<DIELabel>(Values[i]);
|
||||
@ -3200,6 +3207,8 @@ void DwarfDebug::emitDebugLines() {
|
||||
Asm->getObjFileLowering().getDwarfLineSection());
|
||||
|
||||
// Construct the section header.
|
||||
CurrentLineSectionSym = Asm->GetTempSymbol("section_line_begin");
|
||||
Asm->OutStreamer.EmitLabel(CurrentLineSectionSym);
|
||||
Asm->OutStreamer.AddComment("Length of Source Line Info");
|
||||
Asm->EmitLabelDifference(Asm->GetTempSymbol("line_end"),
|
||||
Asm->GetTempSymbol("line_begin"), 4);
|
||||
|
@ -258,6 +258,7 @@ class DwarfDebug {
|
||||
MCSymbol *DwarfFrameSectionSym, *DwarfInfoSectionSym, *DwarfAbbrevSectionSym;
|
||||
MCSymbol *DwarfStrSectionSym, *TextSectionSym, *DwarfDebugRangeSectionSym;
|
||||
MCSymbol *DwarfDebugLocSectionSym;
|
||||
MCSymbol *DwarfDebugLineSectionSym, *CurrentLineSectionSym;
|
||||
MCSymbol *FunctionBeginSym, *FunctionEndSym;
|
||||
private:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user