[llvm-commits] [llvm] r122006 - in /llvm/trunk: lib/MC/MCDwarf.cpp test/MC/ELF/cfi.s

Rafael Espindola rafael.espindola at gmail.com
Thu Dec 16 16:28:02 PST 2010


Author: rafael
Date: Thu Dec 16 18:28:02 2010
New Revision: 122006

URL: http://llvm.org/viewvc/llvm-project?rev=122006&view=rev
Log:
"Fix" FDE alignment to match what gas does.

Modified:
    llvm/trunk/lib/MC/MCDwarf.cpp
    llvm/trunk/test/MC/ELF/cfi.s

Modified: llvm/trunk/lib/MC/MCDwarf.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDwarf.cpp?rev=122006&r1=122005&r2=122006&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCDwarf.cpp (original)
+++ llvm/trunk/lib/MC/MCDwarf.cpp Thu Dec 16 18:28:02 2010
@@ -569,11 +569,9 @@
   return *sectionStart;
 }
 
-static void EmitFDE(MCStreamer &streamer,
-                    const MCSymbol &cieStart,
-                    const MCDwarfFrameInfo &frame) {
-  MCContext &context = streamer.getContext();
-  const TargetAsmInfo &asmInfo = context.getTargetAsmInfo();
+static MCSymbol *EmitFDE(MCStreamer &streamer,
+                         const MCSymbol &cieStart,
+                         const MCDwarfFrameInfo &frame) {
   MCSymbol *fdeStart = streamer.getContext().CreateTempSymbol();
   MCSymbol *fdeEnd = streamer.getContext().CreateTempSymbol();
 
@@ -602,12 +600,22 @@
   // Call Frame Instructions
 
   // Padding
-  streamer.EmitValueToAlignment(asmInfo.getPointerSize());
-  streamer.EmitLabel(fdeEnd);
+  streamer.EmitValueToAlignment(4);
+
+  return fdeEnd;
 }
 
 void MCDwarfFrameEmitter::Emit(MCStreamer &streamer) {
+  const MCContext &context = streamer.getContext();
+  const TargetAsmInfo &asmInfo = context.getTargetAsmInfo();
   const MCSymbol &cieStart = EmitCIE(streamer);
-  for (unsigned i = 0, n = streamer.getNumFrameInfos(); i < n; ++i)
-    EmitFDE(streamer, cieStart, streamer.getFrameInfo(i));
+  MCSymbol *fdeEnd = NULL;
+  for (unsigned i = 0, n = streamer.getNumFrameInfos(); i < n; ++i) {
+    fdeEnd = EmitFDE(streamer, cieStart, streamer.getFrameInfo(i));
+    if (i != n - 1)
+      streamer.EmitLabel(fdeEnd);
+  }
+  streamer.EmitValueToAlignment(asmInfo.getPointerSize());
+  if (fdeEnd)
+    streamer.EmitLabel(fdeEnd);
 }

Modified: llvm/trunk/test/MC/ELF/cfi.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/cfi.s?rev=122006&r1=122005&r2=122006&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/cfi.s (original)
+++ llvm/trunk/test/MC/ELF/cfi.s Thu Dec 16 18:28:02 2010
@@ -1,6 +1,11 @@
 // RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | elf-dump  --dump-section-data | FileCheck %s
 
-f:
+f1:
+        .cfi_startproc
+        nop
+        .cfi_endproc
+
+f2:
         .cfi_startproc
         nop
         .cfi_endproc
@@ -11,12 +16,12 @@
 // CHECK-NEXT:  ('sh_flags', 0x00000002)
 // CHECK-NEXT:  ('sh_addr', 0x00000000)
 // CHECK-NEXT:  ('sh_offset', 0x00000048)
-// CHECK-NEXT:  ('sh_size', 0x00000030)
+// CHECK-NEXT:  ('sh_size', 0x00000040)
 // CHECK-NEXT:  ('sh_link', 0x00000000)
 // CHECK-NEXT:  ('sh_info', 0x00000000)
 // CHECK-NEXT:  ('sh_addralign', 0x00000008)
 // CHECK-NEXT:  ('sh_entsize', 0x00000000)
-// CHECK-NEXT:  ('_section_data', '14000000 00000000 017a5200 01781001 1b0c0708 90010000 14000000 1c000000 00000000 01000000 00000000 00000000')
+// CHECK-NEXT:  ('_section_data', '14000000 00000000 017a5200 01781001 1b0c0708 90010000 10000000 1c000000 00000000 01000000 00000000 10000000 30000000 00000000 01000000 00000000')
 // CHECK-NEXT: ),
 
 // CHECK:      # Section 0x00000008
@@ -24,8 +29,8 @@
 // CHECK-NEXT:  ('sh_type', 0x00000004)
 // CHECK-NEXT:  ('sh_flags', 0x00000000)
 // CHECK-NEXT:  ('sh_addr', 0x00000000)
-// CHECK-NEXT:  ('sh_offset', 0x00000158)
-// CHECK-NEXT:  ('sh_size', 0x00000018)
+// CHECK-NEXT:  ('sh_offset', 0x00000180)
+// CHECK-NEXT:  ('sh_size', 0x00000030)
 // CHECK-NEXT:  ('sh_link', 0x00000006)
 // CHECK-NEXT:  ('sh_info', 0x00000004)
 // CHECK-NEXT:  ('sh_addralign', 0x00000008)
@@ -33,9 +38,15 @@
 // CHECK-NEXT:  ('_relocations', [
 // CHECK-NEXT:   # Relocation 0x00000000
 // CHECK-NEXT:   (('r_offset', 0x00000020)
-// CHECK-NEXT:    ('r_sym', 0x00000002)
+// CHECK-NEXT:    ('r_sym', 0x00000003)
 // CHECK-NEXT:    ('r_type', 0x00000002)
 // CHECK-NEXT:    ('r_addend', 0x00000000)
 // CHECK-NEXT:   ),
+// CHECK-NEXT:   # Relocation 0x00000001
+// CHECK-NEXT:   (('r_offset', 0x00000034)
+// CHECK-NEXT:    ('r_sym', 0x00000003)
+// CHECK-NEXT:    ('r_type', 0x00000002)
+// CHECK-NEXT:    ('r_addend', 0x00000001)
+// CHECK-NEXT:   ),
 // CHECK-NEXT:  ])
 // CHECK-NEXT: ),





More information about the llvm-commits mailing list