OSDN Git Service

DebugInfo: Tag units as having been indexed in GNU pubnames by using a DW_AT_GNU_pubn...
authorDavid Blaikie <dblaikie@gmail.com>
Thu, 6 Mar 2014 05:47:39 +0000 (05:47 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Thu, 6 Mar 2014 05:47:39 +0000 (05:47 +0000)
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
test/DebugInfo/X86/gnu-public-names-empty.ll
test/DebugInfo/X86/gnu-public-names.ll

index 6404e4b..1a906e1 100644 (file)
@@ -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
index 8ee77a6..46ae65d 100644 (file)
@@ -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}
index b899782..f4001e3 100644 (file)
@@ -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"
 
 ; 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"