In a debug_frame the cfi offset is to the start of the debug_frame section!
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 10 May 2011 15:20:23 +0000 (15:20 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 10 May 2011 15:20:23 +0000 (15:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131129 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCDwarf.cpp
test/MC/ELF/cfi-sections.s

index e7e2cbb139fcdafb2fdf8633219b5576edbaf697..38f2fc0770cdd96f22954d34ddfbdbbc665c9f96 100644 (file)
@@ -752,9 +752,13 @@ MCSymbol *FrameEmitterImpl::EmitFDE(MCStreamer &streamer,
 
   streamer.EmitLabel(fdeStart);
   // CIE Pointer
-  const MCExpr *offset = MakeStartMinusEndExpr(streamer, cieStart, *fdeStart,
-                                               0);
-  streamer.EmitAbsValue(offset, 4);
+  if (IsEH) {
+    const MCExpr *offset = MakeStartMinusEndExpr(streamer, cieStart, *fdeStart,
+                                                 0);
+    streamer.EmitAbsValue(offset, 4);
+  } else {
+    streamer.EmitSymbolValue(&cieStart, 4);
+  }
   unsigned fdeEncoding = asmInfo.getFDEEncoding(UsingCFI);
   unsigned size = getSizeForEncoding(streamer, fdeEncoding);
 
index a273e320c5973c7baf8784ebcf3965209e82b10c..a73f3a9f5866e7d74e4f4b30655eb1d142deb745 100644 (file)
@@ -1,10 +1,6 @@
 // RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | elf-dump  --dump-section-data | FileCheck -check-prefix=ELF_64 %s
 // RUN: llvm-mc -filetype=obj -triple i686-pc-linux-gnu %s -o - | elf-dump  --dump-section-data | FileCheck -check-prefix=ELF_32 %s
 
-
-// The only difference in gas' output in this test is that we don't produce
-// the relocations to .debug_frame (we know their values).
-
 .cfi_sections .debug_frame
 
 f1:
@@ -27,7 +23,7 @@ f2:
 // ELF_64-NEXT:  ('sh_info', 0x00000000)
 // ELF_64-NEXT:  ('sh_addralign', 0x00000008)
 // ELF_64-NEXT:  ('sh_entsize', 0x00000000)
-// ELF_64-NEXT:  ('_section_data', '14000000 ffffffff 01000178 100c0708 90010000 00000000 14000000 1c000000 00000000 00000000 01000000 00000000 14000000 34000000 00000000 00000000 01000000 00000000')
+// ELF_64-NEXT:  ('_section_data', '14000000 ffffffff 01000178 100c0708 90010000 00000000 14000000 00000000 00000000 00000000 01000000 00000000 14000000 00000000 00000000 00000000 01000000 00000000')
 
 // ELF_32:      (('sh_name', 0x00000010) # '.debug_frame'
 // ELF_32-NEXT:  ('sh_type', 0x00000001)
@@ -39,4 +35,4 @@ f2:
 // ELF_32-NEXT:  ('sh_info', 0x00000000)
 // ELF_32-NEXT:  ('sh_addralign', 0x00000004)
 // ELF_32-NEXT:  ('sh_entsize', 0x00000000)
-// ELF_32-NEXT:  ('_section_data', '10000000 ffffffff 0100017c 080c0404 88010000 0c000000 18000000 00000000 01000000 0c000000 28000000 01000000 01000000')
+// ELF_32-NEXT:  ('_section_data', '10000000 ffffffff 0100017c 080c0404 88010000 0c000000 00000000 00000000 01000000 0c000000 00000000 01000000 01000000')