From 9e4e3d057f38e30d54a6a8e6a409d2c90171c8cd Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Fri, 19 Sep 2014 17:03:16 +0000 Subject: [PATCH] Omit DW_TAG_subprograms for subprograms without inlined subroutines when producing -gmlt data To reduce the size of -gmlt data, skip the subprograms without any inlined subroutines. Since we've now got the ability to make these determinations in the backend (funnily enough - we added the flag so we wouldn't produce ranges under -gmlt, but with this change we use the flag, but go back to producing ranges under -gmlt). Instead, just produce CU ranges to inform the consumer which parts of the code are described by this CU's line table. Tools could inspect the line table directly to compute the range, but the CU ranges only seem to be about 0.5% of object/executable size, so I'm not too worried about teaching llvm-symbolizer that trick just yet - it's certainly a possible piece of future work. Update an llvm-symbolizer test just to demonstrate that this schema is acceptable there (if it wasn't, the compiler-rt tests would catch this, but good to have an in-llvm-tree test for llvm-symbolizer's behavior here) Building the clang binary with -gmlt with this patch reduces the total size of object files by 5.1% (5.56% without ranges) without compression and the executable by 4.37% (4.75% without ranges). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218129 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 32 +++-- lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 29 ++-- .../Inputs/dwarfdump-inl-test.elf-x86-64 | Bin 9024 -> 9192 bytes test/DebugInfo/gmlt.ll | 128 +++++++++++++----- test/DebugInfo/llvm-symbolizer.test | 6 +- 5 files changed, 135 insertions(+), 60 deletions(-) diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 742646b0555..7cd06931249 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -856,12 +856,14 @@ void DwarfDebug::finishSubprogramDefinitions() { // If this subprogram has an abstract definition, reference that SPCU->addDIEEntry(*D, dwarf::DW_AT_abstract_origin, *AbsSPDIE); } else { - if (!D) + if (!D && TheCU.getEmissionKind() != DIBuilder::LineTablesOnly) // Lazily construct the subprogram if we didn't see either concrete or - // inlined versions during codegen. + // inlined versions during codegen. (except in -gmlt ^ where we want + // to omit these entirely) D = SPCU->getOrCreateSubprogramDIE(SP); - // And attach the attributes - SPCU->applySubprogramAttributesToDefinition(SP, *D); + if (D) + // And attach the attributes + SPCU->applySubprogramAttributesToDefinition(SP, *D); } } } @@ -1690,6 +1692,24 @@ void DwarfDebug::endFunction(const MachineFunction *MF) { LexicalScope *FnScope = LScopes.getCurrentFunctionScope(); DwarfCompileUnit &TheCU = *SPMap.lookup(FnScope->getScopeNode()); + // Add the range of this function to the list of ranges for the CU. + TheCU.addRange(RangeSpan(FunctionBeginSym, FunctionEndSym)); + + // Under -gmlt, skip building the subprogram if there are no inlined + // subroutines inside it. + if (TheCU.getCUNode().getEmissionKind() == DIBuilder::LineTablesOnly && + LScopes.getAbstractScopesList().empty()) { + assert(ScopeVariables.empty()); + assert(CurrentFnArguments.empty()); + assert(DbgValues.empty()); + assert(AbstractVariables.empty()); + LabelsBeforeInsn.clear(); + LabelsAfterInsn.clear(); + PrevLabel = nullptr; + CurFn = nullptr; + return; + } + // Construct abstract scopes. for (LexicalScope *AScope : LScopes.getAbstractScopesList()) { DISubprogram SP(AScope->getScopeNode()); @@ -1710,10 +1730,6 @@ void DwarfDebug::endFunction(const MachineFunction *MF) { if (!CurFn->getTarget().Options.DisableFramePointerElim(*CurFn)) TheCU.addFlag(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr); - // Add the range of this function to the list of ranges for the CU. - RangeSpan Span(FunctionBeginSym, FunctionEndSym); - TheCU.addRange(std::move(Span)); - // Clear debug info // Ownership of DbgVariables is a bit subtle - ScopeVariables owns all the // DbgVariables except those that are also in AbstractVariables (since they diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index 4bf18db32ff..b6514e6b5d6 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -2049,23 +2049,20 @@ void DwarfUnit::emitHeader(const MCSymbol *ASectionSym) const { } void DwarfCompileUnit::addRange(RangeSpan Range) { - // Only add a range for this unit if we're emitting full debug. - if (getCUNode().getEmissionKind() == DIBuilder::FullDebug) { - bool SameAsPrevCU = this == DD->getPrevCU(); - DD->setPrevCU(this); - // If we have no current ranges just add the range and return, otherwise, - // check the current section and CU against the previous section and CU we - // emitted into and the subprogram was contained within. If these are the - // same then extend our current range, otherwise add this as a new range. - if (CURanges.empty() || !SameAsPrevCU || - (&CURanges.back().getEnd()->getSection() != - &Range.getEnd()->getSection())) { - CURanges.push_back(Range); - return; - } - - CURanges.back().setEnd(Range.getEnd()); + bool SameAsPrevCU = this == DD->getPrevCU(); + DD->setPrevCU(this); + // If we have no current ranges just add the range and return, otherwise, + // check the current section and CU against the previous section and CU we + // emitted into and the subprogram was contained within. If these are the + // same then extend our current range, otherwise add this as a new range. + if (CURanges.empty() || !SameAsPrevCU || + (&CURanges.back().getEnd()->getSection() != + &Range.getEnd()->getSection())) { + CURanges.push_back(Range); + return; } + + CURanges.back().setEnd(Range.getEnd()); } void DwarfCompileUnit::initStmtList(MCSymbol *DwarfLineSectionSym) { diff --git a/test/DebugInfo/Inputs/dwarfdump-inl-test.elf-x86-64 b/test/DebugInfo/Inputs/dwarfdump-inl-test.elf-x86-64 index 6df03dad95a7823362d3e28f5a800b851e4db7c5..decc72b4ff22cb27155280462595fb87217d5f66 100755 GIT binary patch literal 9192 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 literal 9024 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 +; CHECK: 00000000 +; CHECK: 00000010 +; CHECK: 00000020 ; Check that we don't emit any pubnames or pubtypes under -gmlt ; CHECK: .debug_pubnames contents: @@ -37,33 +76,56 @@ ; CHECK-NOT: Offset ; Function Attrs: nounwind uwtable -define void @f1() #0 { +define void @_Z2f1v() #0 { +entry: + ret void, !dbg !13 +} + +; Function Attrs: nounwind uwtable +define void @_Z2f2v() #0 section "__TEXT,__bar" { +entry: + ret void, !dbg !14 +} + +; Function Attrs: alwaysinline nounwind uwtable +define void @_Z2f3v() #1 { entry: - ret void, !dbg !11 + call void @_Z2f1v(), !dbg !15 + ret void, !dbg !16 } ; Function Attrs: nounwind uwtable -define void @f2() #0 section "__TEXT,__bar" { +define void @_Z2f4v() #0 { entry: - ret void, !dbg !12 + call void @_Z2f1v() #2, !dbg !17 + ret void, !dbg !19 } attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #1 = { alwaysinline nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #2 = { nounwind } !llvm.dbg.cu = !{!0} -!llvm.module.flags = !{!8, !9} -!llvm.ident = !{!10} +!llvm.module.flags = !{!10, !11} +!llvm.ident = !{!12} -!0 = metadata !{i32 786449, metadata !1, i32 12, metadata !"clang version 3.6.0 ", i1 false, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !"", i32 2} ; [ DW_TAG_compile_unit ] [/tmp/dbginfo/cu-line-tables.c] [DW_LANG_C99] -!1 = metadata !{metadata !"cu-line-tables.c", metadata !"/tmp/dbginfo"} +!0 = metadata !{i32 786449, metadata !1, i32 4, metadata !"clang version 3.6.0 ", i1 false, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !"", i32 2} ; [ DW_TAG_compile_unit ] [/tmp/dbginfo/gmlt.cpp] [DW_LANG_C_plus_plus] +!1 = metadata !{metadata !"gmlt.cpp", metadata !"/tmp/dbginfo"} !2 = metadata !{} -!3 = metadata !{metadata !4, metadata !7} -!4 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"f1", metadata !"f1", metadata !"", i32 1, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @f1, null, null, metadata !2, i32 1} ; [ DW_TAG_subprogram ] [line 1] [def] [f1] -!5 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [/tmp/dbginfo/cu-line-tables.c] +!3 = metadata !{metadata !4, metadata !7, metadata !8, metadata !9} +!4 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"f1", metadata !"f1", metadata !"", i32 1, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @_Z2f1v, null, null, metadata !2, i32 1} ; [ DW_TAG_subprogram ] [line 1] [def] [f1] +!5 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [/tmp/dbginfo/gmlt.cpp] !6 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !2, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!7 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"f2", metadata !"f2", metadata !"", i32 2, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @f2, null, null, metadata !2, i32 2} ; [ DW_TAG_subprogram ] [line 2] [def] [f2] -!8 = metadata !{i32 2, metadata !"Dwarf Version", i32 4} -!9 = metadata !{i32 2, metadata !"Debug Info Version", i32 1} -!10 = metadata !{metadata !"clang version 3.6.0 "} -!11 = metadata !{i32 1, i32 16, metadata !4, null} -!12 = metadata !{i32 2, i32 48, metadata !7, null} +!7 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"f2", metadata !"f2", metadata !"", i32 2, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @_Z2f2v, null, null, metadata !2, i32 2} ; [ DW_TAG_subprogram ] [line 2] [def] [f2] +!8 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"f3", metadata !"f3", metadata !"", i32 3, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @_Z2f3v, null, null, metadata !2, i32 3} ; [ DW_TAG_subprogram ] [line 3] [def] [f3] +!9 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"f4", metadata !"f4", metadata !"", i32 4, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @_Z2f4v, null, null, metadata !2, i32 4} ; [ DW_TAG_subprogram ] [line 4] [def] [f4] +!10 = metadata !{i32 2, metadata !"Dwarf Version", i32 4} +!11 = metadata !{i32 2, metadata !"Debug Info Version", i32 1} +!12 = metadata !{metadata !"clang version 3.6.0 "} +!13 = metadata !{i32 1, i32 12, metadata !4, null} +!14 = metadata !{i32 2, i32 53, metadata !7, null} +!15 = metadata !{i32 3, i32 44, metadata !8, null} +!16 = metadata !{i32 3, i32 50, metadata !8, null} +!17 = metadata !{i32 3, i32 44, metadata !8, metadata !18} +!18 = metadata !{i32 4, i32 13, metadata !9, null} +!19 = metadata !{i32 4, i32 19, metadata !9, null} diff --git a/test/DebugInfo/llvm-symbolizer.test b/test/DebugInfo/llvm-symbolizer.test index fdd64d69f5b..40a051e327a 100644 --- a/test/DebugInfo/llvm-symbolizer.test +++ b/test/DebugInfo/llvm-symbolizer.test @@ -6,9 +6,9 @@ RUN: echo "%p/Inputs/dwarfdump-test.elf-x86-64 0x400586" >> %t.input RUN: echo "%p/Inputs/dwarfdump-test2.elf-x86-64 0x4004e8" >> %t.input RUN: echo "%p/Inputs/dwarfdump-test2.elf-x86-64 0x4004f4" >> %t.input RUN: echo "%p/Inputs/dwarfdump-test4.elf-x86-64 0x62c" >> %t.input -RUN: echo "%p/Inputs/dwarfdump-inl-test.elf-x86-64 0x710" >> %t.input -RUN: echo "%p/Inputs/dwarfdump-inl-test.elf-x86-64 0x7d1" >> %t.input -RUN: echo "%p/Inputs/dwarfdump-inl-test.elf-x86-64 0x785" >> %t.input +RUN: echo "%p/Inputs/dwarfdump-inl-test.elf-x86-64 0x8dc" >> %t.input +RUN: echo "%p/Inputs/dwarfdump-inl-test.elf-x86-64 0xa05" >> %t.input +RUN: echo "%p/Inputs/dwarfdump-inl-test.elf-x86-64 0x987" >> %t.input RUN: echo "%p/Inputs/dwarfdump-inl-test.high_pc.elf-x86-64 0x568" >> %t.input RUN: echo "\"%p/Inputs/dwarfdump-test3.elf-x86-64 space\" 0x640" >> %t.input RUN: echo "\"%p/Inputs/dwarfdump-test3.elf-x86-64 space\" 0x633" >> %t.input -- 2.34.1