From d11591b293ed4b5ead18866c88288d6daebb1f4c Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Thu, 27 Nov 2014 17:13:56 +0000 Subject: [PATCH] Commit back the correct bits of r222760 (was r222538). I also added a test. Original message: Allow FDE references outside the +/-2GB range supported by PC relative offsets for code models other than small/medium. For JIT application, memory layout is less controlled and can result in truncations otherwise. Patch from Akos Kiss. Differential Revision: http://reviews.llvm.org/D6079 llvm-svn: 222897 --- llvm/lib/MC/MCObjectFileInfo.cpp | 6 ++++++ llvm/test/MC/ELF/cfi-large-model.s | 27 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 llvm/test/MC/ELF/cfi-large-model.s diff --git a/llvm/lib/MC/MCObjectFileInfo.cpp b/llvm/lib/MC/MCObjectFileInfo.cpp index 7886ab6..858181d 100644 --- a/llvm/lib/MC/MCObjectFileInfo.cpp +++ b/llvm/lib/MC/MCObjectFileInfo.cpp @@ -273,6 +273,12 @@ void MCObjectFileInfo::InitELFMCObjectFileInfo(Triple T) { case Triple::mips64el: FDECFIEncoding = dwarf::DW_EH_PE_sdata8; break; + case Triple::x86_64: + FDECFIEncoding = dwarf::DW_EH_PE_pcrel | + ((CMModel == CodeModel::Large) ? dwarf::DW_EH_PE_sdata8 + : dwarf::DW_EH_PE_sdata4); + + break; default: FDECFIEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4; break; diff --git a/llvm/test/MC/ELF/cfi-large-model.s b/llvm/test/MC/ELF/cfi-large-model.s new file mode 100644 index 0000000..16073ad --- /dev/null +++ b/llvm/test/MC/ELF/cfi-large-model.s @@ -0,0 +1,27 @@ +// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu -code-model=large %s \ +// RUN: -o - | llvm-readobj -s -sd | FileCheck %s + +// CHECK: Section { +// CHECK: Index: +// CHECK: Name: .eh_frame +// CHECK-NEXT: Type: SHT_PROGBITS +// CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_ALLOC +// CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x0 +// CHECK-NEXT: Offset: 0x40 +// CHECK-NEXT: Size: 56 +// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 8 +// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: SectionData ( +// CHECK-NEXT: 0000: 14000000 00000000 037A5200 01781001 |.........zR..x..| +// CHECK-NEXT: 0010: 1C0C0708 90010000 1C000000 1C000000 |................| +// CHECK-NEXT: 0020: 00000000 00000000 00000000 00000000 |................| +// CHECK-NEXT: 0030: 00000000 00000000 |........| +// CHECK-NEXT: ) + +f: + .cfi_startproc + .cfi_endproc -- 2.7.4