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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222897 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola 2014-11-27 17:13:56 +00:00
parent 4bbcb6a682
commit 8f9f6a612a
2 changed files with 33 additions and 0 deletions

View File

@ -272,6 +272,12 @@ void MCObjectFileInfo::InitELFMCObjectFileInfo(Triple T) {
case Triple::mips64:
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;

View File

@ -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