[PATCH] Fixed a bug with section names containing special characters.

Richard Mitton richard at codersnotes.com
Thu Oct 3 12:53:43 PDT 2013


  Updated the test case to *actually* test having a special character in there, as opposed to the filth and lies written in my previous message.

Hi echristo,

http://llvm-reviews.chandlerc.com/D1790

CHANGE SINCE LAST DIFF
  http://llvm-reviews.chandlerc.com/D1790?vs=4561&id=4637#toc

Files:
  lib/CodeGen/AsmPrinter/DwarfDebug.cpp
  test/DebugInfo/X86/dwarf-aranges.ll
  test/DebugInfo/X86/multiple-aranges.ll

Index: lib/CodeGen/AsmPrinter/DwarfDebug.cpp
===================================================================
--- lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -312,6 +312,12 @@
   return In.slice(In.find(' ') + 1, In.find(']'));
 }
 
+static bool SectionSort(const MCSection *A, const MCSection *B) {
+    std::string LA = (A ? A->getLabelBeginName() : "");
+    std::string LB = (B ? B->getLabelBeginName() : "");
+    return LA < LB;
+}
+
 // Add the various names to the Dwarf accelerator table names.
 // TODO: Determine whether or not we should add names for programs
 // that do not have a DW_AT_name or DW_AT_linkage_name field - this
@@ -1125,14 +1131,25 @@
     }
   }
 
-  // Add terminating symbols for each section.
+  // Build a list of sections used.
+  std::vector<const MCSection *> Sections;
   for (SectionMapType::iterator it = SectionMap.begin(); it != SectionMap.end();
        it++) {
     const MCSection *Section = it->first;
+    Sections.push_back(Section);
+  }
+
+  // Sort the sections into order.
+  // This is only done to ensure consistent output order across different runs.
+  std::sort(Sections.begin(), Sections.end(), SectionSort);
+
+  // Add terminating symbols for each section.
+  for (unsigned ID=0;ID<Sections.size();ID++) {
+    const MCSection *Section = Sections[ID];
     MCSymbol *Sym = NULL;
 
     if (Section) {
-      Sym = Asm->GetTempSymbol(Section->getLabelEndName());
+      Sym = Asm->GetTempSymbol("debug_end", ID);
       Asm->OutStreamer.SwitchSection(Section);
       Asm->OutStreamer.EmitLabel(Sym);
     }
@@ -2751,12 +2768,6 @@
   }
 };
 
-static bool SectionSort(const MCSection *A, const MCSection *B) {
-    std::string LA = (A ? A->getLabelBeginName() : "");
-    std::string LB = (B ? B->getLabelBeginName() : "");
-    return LA < LB;
-}
-
 static bool CUSort(const CompileUnit *A, const CompileUnit *B) {
     return (A->getUniqueID() < B->getUniqueID());
 }
Index: test/DebugInfo/X86/dwarf-aranges.ll
===================================================================
--- test/DebugInfo/X86/dwarf-aranges.ll
+++ test/DebugInfo/X86/dwarf-aranges.ll
@@ -1,56 +1,47 @@
-; RUN: llc < %s | FileCheck -check-prefix=CHECK-HEADER %s
-; RUN: llc < %s | FileCheck -check-prefix=CHECK-CODE %s
-; RUN: llc < %s | FileCheck -check-prefix=CHECK-DATA %s
-; RUN: llc < %s | FileCheck -check-prefix=CHECK-BSS %s
-; RUN: llc < %s | FileCheck -check-prefix=CHECK-CUSTOM %s
+; RUN: llc < %s | FileCheck %s
 
 
 ; -- header --
-; CHECK-HEADER: .short 2 # DWARF Arange version number
-; CHECK-HEADER-NEXT: .long .L.debug_info_begin0
-; CHECK-HEADER-NEXT: .byte 8 # Address Size (in bytes)
-; CHECK-HEADER-NEXT: .byte 0 # Segment Size (in bytes)
+; CHECK: .short 2 # DWARF Arange version number
+; CHECK-NEXT: .long .L.debug_info_begin0
+; CHECK-NEXT: .byte 8 # Address Size (in bytes)
+; CHECK-NEXT: .byte 0 # Segment Size (in bytes)
 ; -- alignment --
-; CHECK-HEADER-NEXT: .byte
-; CHECK-HEADER-NEXT: .byte
-; CHECK-HEADER-NEXT: .byte
-; CHECK-HEADER-NEXT: .byte
-; -- finish --
-; CHECK-HEADER: # ARange terminator
+; CHECK-NEXT: .byte
+; CHECK-NEXT: .byte
+; CHECK-NEXT: .byte
+; CHECK-NEXT: .byte
+
+; <common symbols> - it should have made one span for each symbol.
+; CHECK-NEXT: .quad some_bss
+; CHECK-NEXT: .quad 4
+
+; <data section> - it should have made one span covering all vars in this CU.
+; CHECK-NEXT: .quad some_data
+; CHECK-NEXT: .Lset0 = .Ldebug_end1-some_data
+; CHECK-NEXT: .quad .Lset0
 
 ; <text section> - it should have made one span covering all functions in this CU.
-; CHECK-CODE: .short 2 # DWARF Arange version number
-; CHECK-CODE: .quad .Lfunc_begin0
-; CHECK-CODE-NEXT: .Lset1 = .L.text_end-.Lfunc_begin0
-; CHECK-CODE: # ARange terminator
-
-; <data section> - it should have made one span covering all vars in this CU.
-; CHECK-DATA: .short 2 # DWARF Arange version number
-; CHECK-DATA: .quad some_data
-; CHECK-DATA-NEXT: -some_data
-; CHECK-DATA: # ARange terminator
-
-; <common symbols> - it should have made one span for each symbol.
-; CHECK-BSS: .short 2 # DWARF Arange version number
-; CHECK-BSS: .quad some_bss
-; CHECK-BSS-NEXT: .quad 4
-; CHECK-BSS: # ARange terminator
+; CHECK-NEXT: .quad .Lfunc_begin0
+; CHECK-NEXT: .Lset1 = .Ldebug_end2-.Lfunc_begin0
+; CHECK-NEXT: .quad .Lset1
 
 ; <other sections> - it should have made one span covering all vars in this CU.
-; CHECK-CUSTOM: .short 2 # DWARF Arange version number
-; CHECK-CUSTOM: .quad some_other
-; CHECK-CUSTOM-NEXT: -some_other
-; CHECK-CUSTOM: # ARange terminator
+; CHECK-NEXT: .quad some_other
+; CHECK-NEXT: .Lset2 = .Ldebug_end3-some_other
+; CHECK-NEXT: .quad .Lset2
 
+; -- finish --
+; CHECK-NEXT: # ARange terminator
 
 
 
 ; -- source code --
 ; Generated from: "clang -c -g -emit-llvm"
 ;
 ; int some_data = 4;
 ; int some_bss;
-; int some_other __attribute__ ((section ("strangesection"))) = 5;
+; int some_other __attribute__ ((section ("strange+section"))) = 5;
 ; 
 ; void some_code()
 ; {
@@ -60,7 +51,7 @@
 target triple = "x86_64-unknown-linux-gnu"
 
 @some_data = global i32 4, align 4
- at some_other = global i32 5, section "strangesection", align 4
+ at some_other = global i32 5, section "strange+section", align 4
 @some_bss = common global i32 0, align 4
 
 define void @some_code() {
Index: test/DebugInfo/X86/multiple-aranges.ll
===================================================================
--- test/DebugInfo/X86/multiple-aranges.ll
+++ test/DebugInfo/X86/multiple-aranges.ll
@@ -27,7 +27,7 @@
 ; CHECK-NEXT: .byte   255
 ; CHECK-NEXT: .byte   255
 ; CHECK-NEXT: .quad   rainbows
-; CHECK-NEXT: .Lset1 = .L.data_end-rainbows
+; CHECK-NEXT: .Lset1 = .Ldebug_end0-rainbows
 ; CHECK-NEXT: .quad   .Lset1
 ; CHECK-NEXT: .quad   0                       # ARange terminator
 ; CHECK-NEXT: .quad   0
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D1790.2.patch
Type: text/x-patch
Size: 5828 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131003/a73133c3/attachment.bin>


More information about the llvm-commits mailing list