From: Rafael Espindola Date: Tue, 10 May 2011 15:20:23 +0000 (+0000) Subject: In a debug_frame the cfi offset is to the start of the debug_frame section! X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0d450dc65906a30beb56aeb1ee22b45b1cd4596c;p=oota-llvm.git In a debug_frame the cfi offset is to the start of the debug_frame section! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131129 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/MC/MCDwarf.cpp b/lib/MC/MCDwarf.cpp index e7e2cbb139f..38f2fc0770c 100644 --- a/lib/MC/MCDwarf.cpp +++ b/lib/MC/MCDwarf.cpp @@ -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); diff --git a/test/MC/ELF/cfi-sections.s b/test/MC/ELF/cfi-sections.s index a273e320c59..a73f3a9f586 100644 --- a/test/MC/ELF/cfi-sections.s +++ b/test/MC/ELF/cfi-sections.s @@ -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')