From 4a54cb06585f568031dfd291d0fe45979ad75e98 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 8 Jun 2023 12:12:48 -0700 Subject: gold: Handle R_X86_64_CODE_4_GOTPCRELX Handle R_X86_64_CODE_4_GOTPCRELX and convert mov name@GOTPCREL(%rip), %r31 to lea name@GOTPCREL(%rip), %r31 if the instruction is encoded with the REX2 prefix when possible. elfcpp/ * x86_64.h (R_X86_64_CODE_4_GOTPCRELX): New. gold/ * x86_64.cc (Target_x86_64::can_convert_mov_to_lea): Handle R_X86_64_CODE_4_GOTPCRELX. (Target_x86_64::Scan::get_reference_flags): Likewise. (Target_x86_64::Scan::local): Likewise. (Target_x86_64::Scan::possible_function_pointer_reloc): Likewise. (Target_x86_64::Scan::global): Likewise. (Target_x86_64::Relocate::relocate): Likewise. * testsuite/x86_64_mov_to_lea1.s: Add a test for R_X86_64_CODE_4_GOTPCRELX. * testsuite/x86_64_mov_to_lea2.s: Likewise. * testsuite/x86_64_mov_to_lea3.s: Likewise. * testsuite/x86_64_mov_to_lea4.s: Likewise. * testsuite/x86_64_mov_to_lea5.s: Likewise. * testsuite/x86_64_mov_to_lea.sh: Updated. --- gold/testsuite/x86_64_mov_to_lea.sh | 16 ++++++++++++++++ gold/testsuite/x86_64_mov_to_lea1.s | 1 + gold/testsuite/x86_64_mov_to_lea2.s | 1 + gold/testsuite/x86_64_mov_to_lea3.s | 1 + gold/testsuite/x86_64_mov_to_lea4.s | 1 + gold/testsuite/x86_64_mov_to_lea5.s | 1 + 6 files changed, 21 insertions(+) (limited to 'gold/testsuite') diff --git a/gold/testsuite/x86_64_mov_to_lea.sh b/gold/testsuite/x86_64_mov_to_lea.sh index 1b30e1a..3e248eb 100755 --- a/gold/testsuite/x86_64_mov_to_lea.sh +++ b/gold/testsuite/x86_64_mov_to_lea.sh @@ -25,20 +25,36 @@ set -e grep -q "lea -0x[a-f0-9]\+(%rip),%rax" x86_64_mov_to_lea1.stdout +grep -q "lea -0x[a-f0-9]\+(%rip),%r26" x86_64_mov_to_lea1.stdout grep -q "lea -0x[a-f0-9]\+(%rip),%rax" x86_64_mov_to_lea2.stdout +grep -q "lea -0x[a-f0-9]\+(%rip),%r26" x86_64_mov_to_lea2.stdout grep -q "lea -0x[a-f0-9]\+(%rip),%rax" x86_64_mov_to_lea3.stdout +grep -q "lea -0x[a-f0-9]\+(%rip),%r26" x86_64_mov_to_lea3.stdout grep -q "lea -0x[a-f0-9]\+(%rip),%rax" x86_64_mov_to_lea4.stdout +grep -q "lea -0x[a-f0-9]\+(%rip),%r26" x86_64_mov_to_lea4.stdout grep -q "lea -0x[a-f0-9]\+(%rip),%rax" x86_64_mov_to_lea5.stdout +grep -q "lea -0x[a-f0-9]\+(%rip),%r26" x86_64_mov_to_lea5.stdout grep -q "lea -0x[a-f0-9]\+(%rip),%rax" x86_64_mov_to_lea6.stdout +grep -q "lea -0x[a-f0-9]\+(%rip),%r26" x86_64_mov_to_lea6.stdout grep -q "mov 0x[a-f0-9]\+(%rip),%rax" x86_64_mov_to_lea7.stdout +grep -q "mov 0x[a-f0-9]\+(%rip),%r26" x86_64_mov_to_lea7.stdout grep -q "mov 0x[a-f0-9]\+(%rip),%rax" x86_64_mov_to_lea8.stdout +grep -q "mov 0x[a-f0-9]\+(%rip),%r26" x86_64_mov_to_lea8.stdout grep -q "lea -0x[a-f0-9]\+(%rip),%rax" x86_64_mov_to_lea9.stdout +grep -q "lea -0x[a-f0-9]\+(%rip),%r26" x86_64_mov_to_lea9.stdout grep -q "lea -0x[a-f0-9]\+(%rip),%rax" x86_64_mov_to_lea10.stdout +grep -q "lea -0x[a-f0-9]\+(%rip),%r26" x86_64_mov_to_lea10.stdout grep -q "mov 0x[a-f0-9]\+(%rip),%rax" x86_64_mov_to_lea11.stdout +grep -q "mov 0x[a-f0-9]\+(%rip),%r26" x86_64_mov_to_lea11.stdout grep -q "mov 0x[a-f0-9]\+(%rip),%rax" x86_64_mov_to_lea12.stdout +grep -q "mov 0x[a-f0-9]\+(%rip),%r26" x86_64_mov_to_lea12.stdout grep -q "lea -0x[a-f0-9]\+(%rip),%rax" x86_64_mov_to_lea13.stdout +grep -q "lea -0x[a-f0-9]\+(%rip),%r26" x86_64_mov_to_lea13.stdout grep -q "lea -0x[a-f0-9]\+(%rip),%rax" x86_64_mov_to_lea14.stdout +grep -q "lea -0x[a-f0-9]\+(%rip),%r26" x86_64_mov_to_lea14.stdout grep -q "mov 0x[a-f0-9]\+(%rip),%eax" x86_64_mov_to_lea15.stdout +grep -q "mov 0x[a-f0-9]\+(%rip),%r26d" x86_64_mov_to_lea15.stdout grep -q "mov 0x[a-f0-9]\+(%rip),%eax" x86_64_mov_to_lea16.stdout +grep -q "mov 0x[a-f0-9]\+(%rip),%r26d" x86_64_mov_to_lea16.stdout exit 0 diff --git a/gold/testsuite/x86_64_mov_to_lea1.s b/gold/testsuite/x86_64_mov_to_lea1.s index 4dce487..298ede1 100644 --- a/gold/testsuite/x86_64_mov_to_lea1.s +++ b/gold/testsuite/x86_64_mov_to_lea1.s @@ -8,4 +8,5 @@ foo: .type _start, @function _start: movq foo@GOTPCREL(%rip), %rax + movq foo@GOTPCREL(%rip), %r26 .size _start, .-_start diff --git a/gold/testsuite/x86_64_mov_to_lea2.s b/gold/testsuite/x86_64_mov_to_lea2.s index 2a11b7a..404f4c1 100644 --- a/gold/testsuite/x86_64_mov_to_lea2.s +++ b/gold/testsuite/x86_64_mov_to_lea2.s @@ -3,4 +3,5 @@ .type _start, @function _start: movq _DYNAMIC@GOTPCREL(%rip), %rax + movq _DYNAMIC@GOTPCREL(%rip), %r26 .size _start, .-_start diff --git a/gold/testsuite/x86_64_mov_to_lea3.s b/gold/testsuite/x86_64_mov_to_lea3.s index ac43b78..838c33e 100644 --- a/gold/testsuite/x86_64_mov_to_lea3.s +++ b/gold/testsuite/x86_64_mov_to_lea3.s @@ -7,4 +7,5 @@ foo: .type _start, @function _start: movq foo@GOTPCREL(%rip), %rax + movq foo@GOTPCREL(%rip), %r26 .size _start, .-_start diff --git a/gold/testsuite/x86_64_mov_to_lea4.s b/gold/testsuite/x86_64_mov_to_lea4.s index 37bee32..a68a4cf 100644 --- a/gold/testsuite/x86_64_mov_to_lea4.s +++ b/gold/testsuite/x86_64_mov_to_lea4.s @@ -9,4 +9,5 @@ foo: .type _start, @function _start: movq foo@GOTPCREL(%rip), %rax + movq foo@GOTPCREL(%rip), %r26 .size _start, .-_start diff --git a/gold/testsuite/x86_64_mov_to_lea5.s b/gold/testsuite/x86_64_mov_to_lea5.s index e793a2b..e818989 100644 --- a/gold/testsuite/x86_64_mov_to_lea5.s +++ b/gold/testsuite/x86_64_mov_to_lea5.s @@ -9,4 +9,5 @@ foo: .type _start, @function _start: movl foo@GOTPCREL+4(%rip), %eax + movl foo@GOTPCREL+4(%rip), %r26d .size _start, .-_start -- cgit v1.1