diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2020-12-04 18:54:47 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2020-12-04 18:54:47 -0800 |
commit | 7e45e7a9ab38ee904ca62ed9934e933fdb1d6e9c (patch) | |
tree | 685148c069150cb4bd123fd31be9ef7267951971 /ld | |
parent | 4979ae6a9edb63b2b4c466bf247e4b85706efb18 (diff) | |
download | fsf-binutils-gdb-7e45e7a9ab38ee904ca62ed9934e933fdb1d6e9c.zip fsf-binutils-gdb-7e45e7a9ab38ee904ca62ed9934e933fdb1d6e9c.tar.gz fsf-binutils-gdb-7e45e7a9ab38ee904ca62ed9934e933fdb1d6e9c.tar.bz2 |
x86-64: Convert load to mov only for GOTPCRELX relocations
Since converting load to mov needs to rewrite the REX byte and we don't
know if there is a REX byte with GOTPCREL relocation, do it only for
GOTPCRELX relocations.
bfd/
PR ld/27016
* elf64-x86-64.c (elf_x86_64_convert_load_reloc): Convert load
to mov only for GOTPCRELX relocations.
ld/
PR ld/27016
* testsuite/ld-x86-64/x86-64.exp: Run pr27016a and pr27016b.
* testsuite/ld-x86-64/pr27016a.d: New file.
* testsuite/ld-x86-64/pr27016a.s: Likewise.
* testsuite/ld-x86-64/pr27016b.d: Likewise.
* testsuite/ld-x86-64/pr27016b.s: Likewise.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 9 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/pr27016a.d | 23 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/pr27016a.s | 23 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/pr27016b.d | 23 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/pr27016b.s | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/x86-64.exp | 2 |
6 files changed, 84 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 0bbb576..f33bd41 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2020-12-04 H.J. Lu <hongjiu.lu@intel.com> + + PR ld/27016 + * testsuite/ld-x86-64/x86-64.exp: Run pr27016a and pr27016b. + * testsuite/ld-x86-64/pr27016a.d: New file. + * testsuite/ld-x86-64/pr27016a.s: Likewise. + * testsuite/ld-x86-64/pr27016b.d: Likewise. + * testsuite/ld-x86-64/pr27016b.s: Likewise. + 2020-12-04 Alan Modra <amodra@gmail.com> * testsuite/ld-elf/pr26978a.d, diff --git a/ld/testsuite/ld-x86-64/pr27016a.d b/ld/testsuite/ld-x86-64/pr27016a.d new file mode 100644 index 0000000..88fba0a --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr27016a.d @@ -0,0 +1,23 @@ +#source: pr27016a.s +#source: pr27016b.s +#as: --64 -mx86-used-note=no -mrelax-relocations=no +#ld: -m elf_x86_64 -z max-page-size=0x200000 -z noseparate-code -e main +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +0+4000e8 <main>: + +[a-f0-9]+: 55 push %rbp + +[a-f0-9]+: 48 89 e5 mov %rsp,%rbp + +[a-f0-9]+: 4c 8d 1d 39 3f 00 00 lea 0x3f39\(%rip\),%r11 # 40402c <thesym> + +[a-f0-9]+: 41 8b 03 mov \(%r11\),%eax + +[a-f0-9]+: 8d 50 01 lea 0x1\(%rax\),%edx + +[a-f0-9]+: 4c 8d 1d 2c 3f 00 00 lea 0x3f2c\(%rip\),%r11 # 40402c <thesym> + +[a-f0-9]+: 41 89 13 mov %edx,\(%r11\) + +[a-f0-9]+: b8 00 00 00 00 mov \$0x0,%eax + +[a-f0-9]+: 5d pop %rbp + +[a-f0-9]+: c3 ret +#pass diff --git a/ld/testsuite/ld-x86-64/pr27016a.s b/ld/testsuite/ld-x86-64/pr27016a.s new file mode 100644 index 0000000..b64851a --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr27016a.s @@ -0,0 +1,23 @@ + .text + .comm global_int,4,4 + .globl main + .type main, @function +main: + .cfi_startproc + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + movq %rsp, %rbp + .cfi_def_cfa_register 6 + movq thesym@GOTPCREL(%rip), %r11 + movl (%r11), %eax + leal 1(%rax), %edx + movq thesym@GOTPCREL(%rip), %r11 + movl %edx, (%r11) + movl $0, %eax + popq %rbp + .cfi_def_cfa 7, 8 + ret + .cfi_endproc + .size main, .-main + .section .note.GNU-stack,"",@progbits diff --git a/ld/testsuite/ld-x86-64/pr27016b.d b/ld/testsuite/ld-x86-64/pr27016b.d new file mode 100644 index 0000000..b172736 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr27016b.d @@ -0,0 +1,23 @@ +#source: pr27016a.s +#source: pr27016b.s +#as: --64 -mx86-used-note=no -mrelax-relocations=yes +#ld: -m elf_x86_64 -z max-page-size=0x200000 -z noseparate-code -e main +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +0+4000e8 <main>: + +[a-f0-9]+: 55 push %rbp + +[a-f0-9]+: 48 89 e5 mov %rsp,%rbp + +[a-f0-9]+: 49 c7 c3 2c 40 40 00 mov \$0x40402c,%r11 + +[a-f0-9]+: 41 8b 03 mov \(%r11\),%eax + +[a-f0-9]+: 8d 50 01 lea 0x1\(%rax\),%edx + +[a-f0-9]+: 49 c7 c3 2c 40 40 00 mov \$0x40402c,%r11 + +[a-f0-9]+: 41 89 13 mov %edx,\(%r11\) + +[a-f0-9]+: b8 00 00 00 00 mov \$0x0,%eax + +[a-f0-9]+: 5d pop %rbp + +[a-f0-9]+: c3 ret +#pass diff --git a/ld/testsuite/ld-x86-64/pr27016b.s b/ld/testsuite/ld-x86-64/pr27016b.s new file mode 100644 index 0000000..ded8d7a --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr27016b.s @@ -0,0 +1,4 @@ + .globl thesym +thesym = 0x40402c + + .section .note.GNU-stack,"",@progbits diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp index 99c8a33..41d385b 100644 --- a/ld/testsuite/ld-x86-64/x86-64.exp +++ b/ld/testsuite/ld-x86-64/x86-64.exp @@ -661,6 +661,8 @@ run_dump_test "pr22048" run_dump_test "pr22929" run_dump_test "pr26939" run_dump_test "pr26939-x32" +run_dump_test "pr27016a" +run_dump_test "pr27016b" proc undefined_weak {cflags ldflags} { set testname "Undefined weak symbol" |