MC: correct DWARF line info for PE/COFF
authorSaleem Abdulrasool <compnerd@compnerd.org>
Sat, 6 Sep 2014 19:57:48 +0000 (19:57 +0000)
committerSaleem Abdulrasool <compnerd@compnerd.org>
Sat, 6 Sep 2014 19:57:48 +0000 (19:57 +0000)
DWARF address ranges contain a reference to the debug_info section.  This offset
is an absolute relocation except on non-PE/COFF targets where it is section
relative.  We would emit this incorrectly, and trying to map the debug info from
the address would fail.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217317 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCDwarf.cpp
test/DebugInfo/X86/dbg-asm.s

index 5bc0e43f59dbb42c0d63f5db9f834a8238cc447c..95cfe24eaae6f8f647a3564a6d0dcc4d9fe53377 100644 (file)
@@ -613,7 +613,8 @@ static void EmitGenDwarfAranges(MCStreamer *MCOS,
   // The 4 byte offset to the compile unit in the .debug_info from the start
   // of the .debug_info.
   if (InfoSectionSymbol)
-    MCOS->EmitSymbolValue(InfoSectionSymbol, 4);
+    MCOS->EmitSymbolValue(InfoSectionSymbol, 4,
+                          asmInfo->needsDwarfSectionOffsetDirective());
   else
     MCOS->EmitIntValue(0, 4);
   // The 1 byte size of an address.
index de4e8e4a97be8a3029109f190ba3dafde9c83276..f6e5233ba45d597fca6bde5d107c4fe7e80bff8c 100644 (file)
@@ -14,6 +14,9 @@ _a:
 # CHECK-COFF:     0x6 IMAGE_REL_I386_SECREL .debug_abbrev
 # CHECK-COFF:     0xC IMAGE_REL_I386_SECREL .debug_line
 # CHECK-COFF:   }
+# CHECK-COFF:   Section {{.*}} .debug_aranges {
+# CHECK-COFF:     0x6 IMAGE_REL_I386_SECREL .debug_info
+# CHECK-COFF:   }
 # CHECK-COFF: ]
 
 # CHECK-ELF: Relocations [
@@ -21,4 +24,7 @@ _a:
 # CHECK-ELF:     0x6 R_386_32 .debug_abbrev
 # CHECK-ELF:     0xC R_386_32 .debug_line
 # CHECK-ELF:   }
+# CHECK-ELF:   Section {{.*}} .rel.debug_aranges {
+# CHECK-ELF:     0x6 R_386_32 .debug_info
+# CHECK-ELF:   }
 # CHECK-ELF: ]