From 5cd1d8bcc24e948e86a636161e6d72f6316545a7 Mon Sep 17 00:00:00 2001 From: Yury Norov Date: Thu, 1 Dec 2016 12:31:51 +0000 Subject: 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. --- ld/testsuite/ld-aarch64/aarch64-elf.exp | 1 + ld/testsuite/ld-aarch64/relocs-ilp32.ld | 19 +++++++++++++++++++ ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d | 10 ++++++++++ 3 files changed, 30 insertions(+) create mode 100644 ld/testsuite/ld-aarch64/relocs-ilp32.ld create mode 100644 ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d (limited to 'ld/testsuite/ld-aarch64') 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\] -- cgit v1.1