summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorJoerg Sonnenberger <joerg@bec.de>2014-11-25 13:37:55 +0000
committerJoerg Sonnenberger <joerg@bec.de>2014-11-25 13:37:55 +0000
commitcf0ea262b1aa1b01088f1f1cbb85b74d61322ff0 (patch)
treea9909eb50c7f2699408b56e17e968c5483bb3daa /llvm
parentb6e36e14212a50c03c0af11f9596031ced48308e (diff)
downloadbcm5719-llvm-cf0ea262b1aa1b01088f1f1cbb85b74d61322ff0.tar.gz
bcm5719-llvm-cf0ea262b1aa1b01088f1f1cbb85b74d61322ff0.zip
Reapply 222538 and update tests to explicitly request small code model
and PIC: 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: 222760
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/MC/MCObjectFileInfo.cpp11
-rw-r--r--llvm/test/MC/ELF/cfi-adjust-cfa-offset.s4
-rw-r--r--llvm/test/MC/ELF/cfi-advance-loc2.s4
-rw-r--r--llvm/test/MC/ELF/cfi-def-cfa-offset.s4
-rw-r--r--llvm/test/MC/ELF/cfi-def-cfa-register.s4
-rw-r--r--llvm/test/MC/ELF/cfi-def-cfa.s4
-rw-r--r--llvm/test/MC/ELF/cfi-escape.s4
-rw-r--r--llvm/test/MC/ELF/cfi-offset.s4
-rw-r--r--llvm/test/MC/ELF/cfi-register.s4
-rw-r--r--llvm/test/MC/ELF/cfi-rel-offset.s4
-rw-r--r--llvm/test/MC/ELF/cfi-rel-offset2.s4
-rw-r--r--llvm/test/MC/ELF/cfi-remember.s4
-rw-r--r--llvm/test/MC/ELF/cfi-restore.s4
-rw-r--r--llvm/test/MC/ELF/cfi-same-value.s4
-rw-r--r--llvm/test/MC/ELF/cfi-signal-frame.s4
-rw-r--r--llvm/test/MC/ELF/cfi-undefined.s4
-rw-r--r--llvm/test/MC/ELF/cfi-window-save.s4
-rw-r--r--llvm/test/MC/ELF/cfi-zero-addr-delta.s4
-rw-r--r--llvm/test/MC/ELF/cfi.s4
-rw-r--r--llvm/test/MC/ELF/pr19430.s4
-rw-r--r--llvm/test/MC/X86/fde-reloc.s4
21 files changed, 71 insertions, 20 deletions
diff --git a/llvm/lib/MC/MCObjectFileInfo.cpp b/llvm/lib/MC/MCObjectFileInfo.cpp
index 7886ab62ca5..96929e59385 100644
--- a/llvm/lib/MC/MCObjectFileInfo.cpp
+++ b/llvm/lib/MC/MCObjectFileInfo.cpp
@@ -273,6 +273,17 @@ void MCObjectFileInfo::InitELFMCObjectFileInfo(Triple T) {
case Triple::mips64el:
FDECFIEncoding = dwarf::DW_EH_PE_sdata8;
break;
+ case Triple::x86_64:
+ if (RelocM == Reloc::PIC_) {
+ FDECFIEncoding = dwarf::DW_EH_PE_pcrel |
+ ((CMModel == CodeModel::Small || CMModel == CodeModel::Medium)
+ ? dwarf::DW_EH_PE_sdata4 : dwarf::DW_EH_PE_sdata8);
+ } else {
+ FDECFIEncoding =
+ (CMModel == CodeModel::Small || CMModel == CodeModel::Medium)
+ ? dwarf::DW_EH_PE_udata4 : dwarf::DW_EH_PE_absptr;
+ }
+ break;
default:
FDECFIEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4;
break;
diff --git a/llvm/test/MC/ELF/cfi-adjust-cfa-offset.s b/llvm/test/MC/ELF/cfi-adjust-cfa-offset.s
index 9d639f70d8d..f31a6b0acd6 100644
--- a/llvm/test/MC/ELF/cfi-adjust-cfa-offset.s
+++ b/llvm/test/MC/ELF/cfi-adjust-cfa-offset.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
f:
.cfi_startproc
diff --git a/llvm/test/MC/ELF/cfi-advance-loc2.s b/llvm/test/MC/ELF/cfi-advance-loc2.s
index 98caa0185f5..c11ccaf51ee 100644
--- a/llvm/test/MC/ELF/cfi-advance-loc2.s
+++ b/llvm/test/MC/ELF/cfi-advance-loc2.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
// test that this produces a correctly encoded cfi_advance_loc2
diff --git a/llvm/test/MC/ELF/cfi-def-cfa-offset.s b/llvm/test/MC/ELF/cfi-def-cfa-offset.s
index 59f740055d4..93158ce22fb 100644
--- a/llvm/test/MC/ELF/cfi-def-cfa-offset.s
+++ b/llvm/test/MC/ELF/cfi-def-cfa-offset.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
f:
.cfi_startproc
diff --git a/llvm/test/MC/ELF/cfi-def-cfa-register.s b/llvm/test/MC/ELF/cfi-def-cfa-register.s
index 178ba32882d..8c550534b2f 100644
--- a/llvm/test/MC/ELF/cfi-def-cfa-register.s
+++ b/llvm/test/MC/ELF/cfi-def-cfa-register.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
f:
.cfi_startproc
diff --git a/llvm/test/MC/ELF/cfi-def-cfa.s b/llvm/test/MC/ELF/cfi-def-cfa.s
index dfb0d4b5939..f0b493403ca 100644
--- a/llvm/test/MC/ELF/cfi-def-cfa.s
+++ b/llvm/test/MC/ELF/cfi-def-cfa.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
f:
.cfi_startproc
diff --git a/llvm/test/MC/ELF/cfi-escape.s b/llvm/test/MC/ELF/cfi-escape.s
index 5394ee414aa..3b7674640c7 100644
--- a/llvm/test/MC/ELF/cfi-escape.s
+++ b/llvm/test/MC/ELF/cfi-escape.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
f:
.cfi_startproc
diff --git a/llvm/test/MC/ELF/cfi-offset.s b/llvm/test/MC/ELF/cfi-offset.s
index a65b4fc783c..02f31ba3ca1 100644
--- a/llvm/test/MC/ELF/cfi-offset.s
+++ b/llvm/test/MC/ELF/cfi-offset.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
f:
.cfi_startproc
diff --git a/llvm/test/MC/ELF/cfi-register.s b/llvm/test/MC/ELF/cfi-register.s
index 94417702c13..3433bef8cde 100644
--- a/llvm/test/MC/ELF/cfi-register.s
+++ b/llvm/test/MC/ELF/cfi-register.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
f:
.cfi_startproc
diff --git a/llvm/test/MC/ELF/cfi-rel-offset.s b/llvm/test/MC/ELF/cfi-rel-offset.s
index 0dc69c89cf4..f51b2d35939 100644
--- a/llvm/test/MC/ELF/cfi-rel-offset.s
+++ b/llvm/test/MC/ELF/cfi-rel-offset.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
f:
.cfi_startproc
diff --git a/llvm/test/MC/ELF/cfi-rel-offset2.s b/llvm/test/MC/ELF/cfi-rel-offset2.s
index 360e7b0ea0f..0ce8d038d9b 100644
--- a/llvm/test/MC/ELF/cfi-rel-offset2.s
+++ b/llvm/test/MC/ELF/cfi-rel-offset2.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
f:
.cfi_startproc
diff --git a/llvm/test/MC/ELF/cfi-remember.s b/llvm/test/MC/ELF/cfi-remember.s
index 3a38948b6a3..c98695a4fe9 100644
--- a/llvm/test/MC/ELF/cfi-remember.s
+++ b/llvm/test/MC/ELF/cfi-remember.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
f:
.cfi_startproc
diff --git a/llvm/test/MC/ELF/cfi-restore.s b/llvm/test/MC/ELF/cfi-restore.s
index e225797f54d..99a74e73e43 100644
--- a/llvm/test/MC/ELF/cfi-restore.s
+++ b/llvm/test/MC/ELF/cfi-restore.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
f:
.cfi_startproc
diff --git a/llvm/test/MC/ELF/cfi-same-value.s b/llvm/test/MC/ELF/cfi-same-value.s
index 2d37f4d0b43..b7329d17cfb 100644
--- a/llvm/test/MC/ELF/cfi-same-value.s
+++ b/llvm/test/MC/ELF/cfi-same-value.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
f:
.cfi_startproc
diff --git a/llvm/test/MC/ELF/cfi-signal-frame.s b/llvm/test/MC/ELF/cfi-signal-frame.s
index 98deb0a1de5..9558d7bb5dc 100644
--- a/llvm/test/MC/ELF/cfi-signal-frame.s
+++ b/llvm/test/MC/ELF/cfi-signal-frame.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sd | FileCheck %s
f:
.cfi_startproc
diff --git a/llvm/test/MC/ELF/cfi-undefined.s b/llvm/test/MC/ELF/cfi-undefined.s
index 568b3159cc4..09000c9627c 100644
--- a/llvm/test/MC/ELF/cfi-undefined.s
+++ b/llvm/test/MC/ELF/cfi-undefined.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
f:
.cfi_startproc
diff --git a/llvm/test/MC/ELF/cfi-window-save.s b/llvm/test/MC/ELF/cfi-window-save.s
index b083901c137..dd20164070e 100644
--- a/llvm/test/MC/ELF/cfi-window-save.s
+++ b/llvm/test/MC/ELF/cfi-window-save.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
# Should use SPARC as the target to test this. However, SPARC does not
# use MC yet.
diff --git a/llvm/test/MC/ELF/cfi-zero-addr-delta.s b/llvm/test/MC/ELF/cfi-zero-addr-delta.s
index 8662839b527..61118ecec36 100644
--- a/llvm/test/MC/ELF/cfi-zero-addr-delta.s
+++ b/llvm/test/MC/ELF/cfi-zero-addr-delta.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
// Test that we don't produce a DW_CFA_advance_loc 0
diff --git a/llvm/test/MC/ELF/cfi.s b/llvm/test/MC/ELF/cfi.s
index 21be615c5f3..42b0189ea60 100644
--- a/llvm/test/MC/ELF/cfi.s
+++ b/llvm/test/MC/ELF/cfi.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -sd | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -s -sr -sd | FileCheck %s
f1:
.cfi_startproc
diff --git a/llvm/test/MC/ELF/pr19430.s b/llvm/test/MC/ELF/pr19430.s
index a1e524662a9..528193d60ae 100644
--- a/llvm/test/MC/ELF/pr19430.s
+++ b/llvm/test/MC/ELF/pr19430.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -triple x86_64-pc-linux-gnu %s -filetype=obj -o - | llvm-readobj -r | FileCheck %s
+// RUN: llvm-mc -triple x86_64-pc-linux-gnu %s -filetype=obj -o - \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-readobj -r | FileCheck %s
// Test that we can use .cfi_startproc without a global symbol.
diff --git a/llvm/test/MC/X86/fde-reloc.s b/llvm/test/MC/X86/fde-reloc.s
index 63ac9766218..9b5de15f9ed 100644
--- a/llvm/test/MC/X86/fde-reloc.s
+++ b/llvm/test/MC/X86/fde-reloc.s
@@ -1,4 +1,6 @@
-// RUN: llvm-mc -filetype=obj %s -o - -triple x86_64-pc-linux | llvm-objdump -r - | FileCheck --check-prefix=X86-64 %s
+// RUN: llvm-mc -filetype=obj %s -o - -triple x86_64-pc-linux \
+// RUN: -relocation-model=pic -code-model=small \
+// RUN: | llvm-objdump -r - | FileCheck --check-prefix=X86-64 %s
// RUN: llvm-mc -filetype=obj %s -o - -triple i686-pc-linux | llvm-objdump -r - | FileCheck --check-prefix=I686 %s
// PR15448
OpenPOWER on IntegriCloud