aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorYury Norov <ynorov@caviumnetworks.com>2016-12-01 12:31:51 +0000
committerNick Clifton <nickc@redhat.com>2016-12-01 12:31:51 +0000
commit5cd1d8bcc24e948e86a636161e6d72f6316545a7 (patch)
tree7808d35833e73ee1e3de1c96d540ebb51226bc79 /ld
parent40a0bfddf07620f5321927b3231502debb3b73bc (diff)
downloadfsf-binutils-gdb-5cd1d8bcc24e948e86a636161e6d72f6316545a7.zip
fsf-binutils-gdb-5cd1d8bcc24e948e86a636161e6d72f6316545a7.tar.gz
fsf-binutils-gdb-5cd1d8bcc24e948e86a636161e6d72f6316545a7.tar.bz2
Fix accesses to the GOT for AARCH64 operating in 32-bit mode.
PR ld/20868 bfd * elfnn-aarch64.c (elfNN_aarch64_tls_relax): Use 32-bit accesses to the GOT when operating in 32-bit mode. ld * testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d: New test. * testsuite/ld-aarch64/relocs-ilp32.ld: Linker script for the new test. * testsuite/ld-aarch64/aarch64-elf.exp: Run the new test.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog8
-rw-r--r--ld/testsuite/ld-aarch64/aarch64-elf.exp1
-rw-r--r--ld/testsuite/ld-aarch64/relocs-ilp32.ld19
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d10
4 files changed, 38 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 9484e74..446a4af 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,11 @@
+2016-12-01 Yury Norov <ynorov@caviumnetworks.com>
+
+ PR ld/20868
+ * testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d: New test.
+ * testsuite/ld-aarch64/relocs-ilp32.ld: Linker script for the new
+ test.
+ * testsuite/ld-aarch64/aarch64-elf.exp: Run the new test.
+
2016-11-28 Andrew Burgess <andrew.burgess@embecosm.com>
* emulparams/arclinux_prof.sh: Remove duplicate TEMPLATE_NAME.
diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp
index d4d7f5a..8e425d2 100644
--- a/ld/testsuite/ld-aarch64/aarch64-elf.exp
+++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp
@@ -189,6 +189,7 @@ run_dump_test "farcall-bl-section"
run_dump_test "tls-relax-all"
run_dump_test "tls-relax-gd-le"
run_dump_test "tls-relax-gdesc-le"
+run_dump_test "tls-relax-gd-ie-ilp32"
run_dump_test "tls-relax-gd-ie"
run_dump_test "tls-relax-large-gd-ie"
run_dump_test "tls-relax-large-gd-ie-be"
diff --git a/ld/testsuite/ld-aarch64/relocs-ilp32.ld b/ld/testsuite/ld-aarch64/relocs-ilp32.ld
new file mode 100644
index 0000000..7174aff
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/relocs-ilp32.ld
@@ -0,0 +1,19 @@
+/* Script for ld testsuite. */
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ PROVIDE (__executable_start = 0x8000); . = 0x10000;
+ .text :
+ {
+ *(.before)
+ *(.text)
+ *(.after)
+ } =0
+ . = 0x20000;
+ .got : { *(.got) *(.got.plt)}
+ . = 0x12340000;
+ .far : { *(.far) }
+ .ARM.attributes 0 : { *(.ARM.atttributes) }
+}
diff --git a/ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d
new file mode 100644
index 0000000..ab08c61
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d
@@ -0,0 +1,10 @@
+#source: tls-relax-gd-ie.s
+#as: -mabi=ilp32
+#ld: -m [aarch64_choose_ilp32_emul] -T relocs-ilp32.ld -e0
+#objdump: -dr
+#...
+ +10000: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_>
+ +10004: b9400400 ldr w0, \[x0, #4\]
+ +10008: d53bd041 mrs x1, tpidr_el0
+ +1000c: 0b000020 add w0, w1, w0
+ +10010: b9400000 ldr w0, \[x0\]