From dfe125cc9cfd524575973daa297c9aad10470390 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Fri, 17 Dec 2010 00:28:02 +0000 Subject: [PATCH] "Fix" FDE alignment to match what gas does. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122006 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/MCDwarf.cpp | 26 +++++++++++++++++--------- test/MC/ELF/cfi.s | 23 +++++++++++++++++------ 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/lib/MC/MCDwarf.cpp b/lib/MC/MCDwarf.cpp index c1de31bf069..24ddc825638 100644 --- a/lib/MC/MCDwarf.cpp +++ b/lib/MC/MCDwarf.cpp @@ -569,11 +569,9 @@ static const MCSymbol &EmitCIE(MCStreamer &streamer) { 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 @@ static void EmitFDE(MCStreamer &streamer, // 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); } diff --git a/test/MC/ELF/cfi.s b/test/MC/ELF/cfi.s index df62d7de06c..5657925ce5c 100644 --- a/test/MC/ELF/cfi.s +++ b/test/MC/ELF/cfi.s @@ -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 @@ f: // 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 @@ f: // 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 @@ f: // 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: ), -- 2.34.1