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.
This commit is contained in:
parent
4979ae6a9e
commit
7e45e7a9ab
8 changed files with 91 additions and 1 deletions
|
@ -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,
|
||||
|
|
23
ld/testsuite/ld-x86-64/pr27016a.d
Normal file
23
ld/testsuite/ld-x86-64/pr27016a.d
Normal file
|
@ -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
|
23
ld/testsuite/ld-x86-64/pr27016a.s
Normal file
23
ld/testsuite/ld-x86-64/pr27016a.s
Normal file
|
@ -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
|
23
ld/testsuite/ld-x86-64/pr27016b.d
Normal file
23
ld/testsuite/ld-x86-64/pr27016b.d
Normal file
|
@ -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
|
4
ld/testsuite/ld-x86-64/pr27016b.s
Normal file
4
ld/testsuite/ld-x86-64/pr27016b.s
Normal file
|
@ -0,0 +1,4 @@
|
|||
.globl thesym
|
||||
thesym = 0x40402c
|
||||
|
||||
.section .note.GNU-stack,"",@progbits
|
|
@ -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"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue