From ca8b562f2d4d996d5198af537ad312e544da1172 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Thu, 6 Mar 2014 05:47:39 +0000 Subject: DebugInfo: Tag units as having been indexed in GNU pubnames by using a DW_AT_GNU_pubnames of DW_FORM_flag(_present) rather than sec_offsets to the pubnames/types sections This is consistent with GDB ToT and reduces the number of relocations in (type and compile) units, substantially reducing relocations and debug size in fission + type units builds. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203082 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 8 +------- test/DebugInfo/X86/gnu-public-names-empty.ll | 4 ++-- test/DebugInfo/X86/gnu-public-names.ll | 8 ++++---- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 6404e4b522..1a906e1033 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -733,13 +733,7 @@ void DwarfDebug::addGnuPubAttributes(DwarfUnit *U, DIE *D) const { if (!GenerateGnuPubSections) return; - addSectionLabel(Asm, U, D, dwarf::DW_AT_GNU_pubnames, - Asm->GetTempSymbol("gnu_pubnames", U->getUniqueID()), - DwarfGnuPubNamesSectionSym); - - addSectionLabel(Asm, U, D, dwarf::DW_AT_GNU_pubtypes, - Asm->GetTempSymbol("gnu_pubtypes", U->getUniqueID()), - DwarfGnuPubTypesSectionSym); + U->addFlag(D, dwarf::DW_AT_GNU_pubnames); } // Create new DwarfCompileUnit for the given metadata node with tag diff --git a/test/DebugInfo/X86/gnu-public-names-empty.ll b/test/DebugInfo/X86/gnu-public-names-empty.ll index 8ee77a6d99..46ae65d003 100644 --- a/test/DebugInfo/X86/gnu-public-names-empty.ll +++ b/test/DebugInfo/X86/gnu-public-names-empty.ll @@ -6,8 +6,8 @@ ; Check that the attributes in the compile unit both point to a correct ; location, even when nothing is exported. -; CHECK: DW_AT_GNU_pubnames [DW_FORM_sec_offset] (0x00000000) -; CHECK: DW_AT_GNU_pubtypes [DW_FORM_sec_offset] (0x00000000) +; CHECK: DW_AT_GNU_pubnames [DW_FORM_flag_present] (true) +; CHECK-NOT: DW_AT_GNU_pubtypes [ !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!3, !4} diff --git a/test/DebugInfo/X86/gnu-public-names.ll b/test/DebugInfo/X86/gnu-public-names.ll index b899782293..f4001e3af9 100644 --- a/test/DebugInfo/X86/gnu-public-names.ll +++ b/test/DebugInfo/X86/gnu-public-names.ll @@ -47,8 +47,8 @@ ; CHECK: .debug_info contents: ; CHECK: Compile Unit: length = [[UNIT_SIZE:[0-9a-f]+]] -; CHECK: DW_AT_GNU_pubnames [DW_FORM_sec_offset] (0x00000000) -; CHECK: DW_AT_GNU_pubtypes [DW_FORM_sec_offset] (0x00000000) +; CHECK: DW_AT_GNU_pubnames [DW_FORM_flag_present] (true) +; CHECK-NOT: DW_AT_GNU_pubtypes [ ; CHECK: [[C:[0-9a-f]+]]: DW_TAG_structure_type ; CHECK-NEXT: DW_AT_name {{.*}} "C" @@ -127,8 +127,8 @@ ; DWARF3: .debug_info contents: ; DWARF3: Compile Unit: length = [[UNIT_SIZE:[0-9a-f]+]] -; DWARF3: DW_AT_GNU_pubnames [DW_FORM_data4] (0x00000000) -; DWARF3: DW_AT_GNU_pubtypes [DW_FORM_data4] (0x00000000) +; DWARF3: DW_AT_GNU_pubnames [DW_FORM_flag] (0x01) +; DWARF3-NOT: DW_AT_GNU_pubtypes [ ; DWARF3: [[C:[0-9a-f]+]]: DW_TAG_structure_type ; DWARF3-NEXT: DW_AT_name {{.*}} "C" -- cgit v1.2.3