diff options
author | Yury Norov <ynorov@caviumnetworks.com> | 2016-12-01 12:31:51 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2016-12-01 12:31:51 +0000 |
commit | 5cd1d8bcc24e948e86a636161e6d72f6316545a7 (patch) | |
tree | 7808d35833e73ee1e3de1c96d540ebb51226bc79 /ld/testsuite/ld-aarch64 | |
parent | 40a0bfddf07620f5321927b3231502debb3b73bc (diff) | |
download | gdb-5cd1d8bcc24e948e86a636161e6d72f6316545a7.zip gdb-5cd1d8bcc24e948e86a636161e6d72f6316545a7.tar.gz 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/testsuite/ld-aarch64')
-rw-r--r-- | ld/testsuite/ld-aarch64/aarch64-elf.exp | 1 | ||||
-rw-r--r-- | ld/testsuite/ld-aarch64/relocs-ilp32.ld | 19 | ||||
-rw-r--r-- | ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d | 10 |
3 files changed, 30 insertions, 0 deletions
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\] |