From: Jan Beulich Date: Fri, 21 Feb 2025 09:23:21 +0000 (+0100) Subject: x86/APX: use CS: in place of ES: in @gotpcrel and @gottpoff relaxation X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=922fe9449a0632b8facb586860a510d5f2bd628c;p=thirdparty%2Fbinutils-gdb.git x86/APX: use CS: in place of ES: in @gotpcrel and @gottpoff relaxation H.J. requested this adjustment; I'm unaware of any specific technical background. --- diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 0e360771d12..5accb752a43 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -2362,13 +2362,13 @@ elf_x86_64_convert_load_reloc (bfd *abfd, bfd_put_8 (abfd, opcode, contents + roff - 2); - /* For MOVRS zap the 0f38 or EVEX prefix, applying meaningless ES + /* For MOVRS zap the 0f38 or EVEX prefix, applying meaningless CS segment overrides instead. When necessary also install the REX2 prefix and payload (which may not have been written yet). */ if (movrs) { - bfd_put_8 (abfd, 0x26, contents + roff - movrs); - bfd_put_8 (abfd, 0x26, contents + roff - movrs + 1); + bfd_put_8 (abfd, 0x2e, contents + roff - movrs); + bfd_put_8 (abfd, 0x2e, contents + roff - movrs + 1); if (movrs == 6) { bfd_put_8 (abfd, 0xd5, contents + roff - 4); @@ -4361,11 +4361,11 @@ elf_x86_64_relocate_section (bfd *output_bfd, byte. */ if (type == 0x8b) { - /* For MOVRS emit meaningless ES prefixes. */ + /* For MOVRS emit meaningless CS prefixes. */ if (bfd_get_8 (input_bfd, contents + roff - 4) == 0x0f) { - bfd_put_8 (output_bfd, 0x26, contents + roff - 4); - rex2 = 0x26; + bfd_put_8 (output_bfd, 0x2e, contents + roff - 4); + rex2 = 0x2e; rex2_mask = 0; } type = 0xc7; @@ -4403,10 +4403,10 @@ elf_x86_64_relocate_section (bfd *output_bfd, unsigned int reg = bfd_get_8 (input_bfd, contents + roff - 1); reg >>= 3; - /* Replace 0f38 by meaningless ES prefixes, shifting the REX + /* Replace 0f38 by meaningless CS prefixes, shifting the REX prefix forward. */ - bfd_put_8 (output_bfd, 0x26, contents + roff - 5); - bfd_put_8 (output_bfd, 0x26, contents + roff - 4); + bfd_put_8 (output_bfd, 0x2e, contents + roff - 5); + bfd_put_8 (output_bfd, 0x2e, contents + roff - 4); bfd_put_8 (output_bfd, rex, contents + roff - 3); bfd_put_8 (output_bfd, 0xc7, contents + roff - 2); bfd_put_8 (output_bfd, 0xc0 | reg, contents + roff - 1); @@ -4455,8 +4455,8 @@ elf_x86_64_relocate_section (bfd *output_bfd, rex2 |= REX_W; - bfd_put_8 (output_bfd, 0x26, contents + roff - 6); - bfd_put_8 (output_bfd, 0x26, contents + roff - 5); + bfd_put_8 (output_bfd, 0x2e, contents + roff - 6); + bfd_put_8 (output_bfd, 0x2e, contents + roff - 5); bfd_put_8 (output_bfd, 0xd5, contents + roff - 4); bfd_put_8 (output_bfd, rex2, contents + roff - 3); bfd_put_8 (output_bfd, 0xc7, contents + roff - 2); diff --git a/ld/testsuite/ld-x86-64/load3a.d b/ld/testsuite/ld-x86-64/load3a.d index 0feee16785d..e9323594388 100644 --- a/ld/testsuite/ld-x86-64/load3a.d +++ b/ld/testsuite/ld-x86-64/load3a.d @@ -10,12 +10,12 @@ Disassembly of section .text: #... [a-f0-9]+ <_start>: -[ ]*[a-f0-9]+: 26 26 c7 c0 ([0-9a-f]{2} ){4} * (es ){2}mov \$0x[a-f0-9]+,%eax -[ ]*[a-f0-9]+: 26 26 41 c7 c3 ([0-9a-f]{2} ){4} * (es ){2}mov \$0x[a-f0-9]+,%r11d -[ ]*[a-f0-9]+: 26 26 d5 10 c7 c5 ([0-9a-f]{2} ){4} * (es ){2}mov \$0x[a-f0-9]+,%r21d -[ ]*[a-f0-9]+: 26 26 48 c7 c0 ([0-9a-f]{2} ){4} * (es ){2}mov \$0x[a-f0-9]+,%rax -[ ]*[a-f0-9]+: 26 26 49 c7 c3 ([0-9a-f]{2} ){4} * (es ){2}mov \$0x[a-f0-9]+,%r11 -[ ]*[a-f0-9]+: 26 26 d5 18 c7 c5 ([0-9a-f]{2} ){4} * (es ){2}mov \$0x[a-f0-9]+,%r21 -[ ]*[a-f0-9]+: 26 26 48 c7 c0 ([0-9a-f]{2} ){4} * (es ){2}mov \$0x[a-f0-9]+,%rax -[ ]*[a-f0-9]+: 26 26 49 c7 c3 ([0-9a-f]{2} ){4} * (es ){2}mov \$0x[a-f0-9]+,%r11 +[ ]*[a-f0-9]+: 2e 2e c7 c0 ([0-9a-f]{2} ){4} * (cs ){2}mov \$0x[a-f0-9]+,%eax +[ ]*[a-f0-9]+: 2e 2e 41 c7 c3 ([0-9a-f]{2} ){4} * (cs ){2}mov \$0x[a-f0-9]+,%r11d +[ ]*[a-f0-9]+: 2e 2e d5 10 c7 c5 ([0-9a-f]{2} ){4} * (cs ){2}mov \$0x[a-f0-9]+,%r21d +[ ]*[a-f0-9]+: 2e 2e 48 c7 c0 ([0-9a-f]{2} ){4} * (cs ){2}mov \$0x[a-f0-9]+,%rax +[ ]*[a-f0-9]+: 2e 2e 49 c7 c3 ([0-9a-f]{2} ){4} * (cs ){2}mov \$0x[a-f0-9]+,%r11 +[ ]*[a-f0-9]+: 2e 2e d5 18 c7 c5 ([0-9a-f]{2} ){4} * (cs ){2}mov \$0x[a-f0-9]+,%r21 +[ ]*[a-f0-9]+: 2e 2e 48 c7 c0 ([0-9a-f]{2} ){4} * (cs ){2}mov \$0x[a-f0-9]+,%rax +[ ]*[a-f0-9]+: 2e 2e 49 c7 c3 ([0-9a-f]{2} ){4} * (cs ){2}mov \$0x[a-f0-9]+,%r11 #pass diff --git a/ld/testsuite/ld-x86-64/load3b.d b/ld/testsuite/ld-x86-64/load3b.d index f555fcbc1d9..d38f9e227f8 100644 --- a/ld/testsuite/ld-x86-64/load3b.d +++ b/ld/testsuite/ld-x86-64/load3b.d @@ -10,12 +10,12 @@ Disassembly of section .text: #... [a-f0-9]+ <_start>: -[ ]*[a-f0-9]+: 26 26 8d 05 ([0-9a-f]{2} ){4} * (es ){2}lea -0x[a-f0-9]+\(%rip\),%eax # [a-f0-9]+ -[ ]*[a-f0-9]+: 26 26 44 8d 1d ([0-9a-f]{2} ){4} * (es ){2}lea 0x[a-f0-9]+\(%rip\),%r11d # [a-f0-9]+ -[ ]*[a-f0-9]+: 26 26 d5 40 8d 2d ([0-9a-f]{2} ){4} * (es ){2}lea 0x[a-f0-9]+\(%rip\),%r21d # [a-f0-9]+ -[ ]*[a-f0-9]+: 26 26 48 8d 05 ([0-9a-f]{2} ){4} * (es ){2}lea -0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ -[ ]*[a-f0-9]+: 26 26 4c 8d 1d ([0-9a-f]{2} ){4} * (es ){2}lea 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ -[ ]*[a-f0-9]+: 26 26 d5 48 8d 2d ([0-9a-f]{2} ){4} * (es ){2}lea 0x[a-f0-9]+\(%rip\),%r21 # [a-f0-9]+ -[ ]*[a-f0-9]+: 26 26 48 8d 05 ([0-9a-f]{2} ){4} * (es ){2}lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <__start_my_section> -[ ]*[a-f0-9]+: 26 26 4c 8d 1d ([0-9a-f]{2} ){4} * (es ){2}lea 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <(__stop_my_section|pad)> +[ ]*[a-f0-9]+: 2e 2e 8d 05 ([0-9a-f]{2} ){4} * (cs ){2}lea -0x[a-f0-9]+\(%rip\),%eax # [a-f0-9]+ +[ ]*[a-f0-9]+: 2e 2e 44 8d 1d ([0-9a-f]{2} ){4} * (cs ){2}lea 0x[a-f0-9]+\(%rip\),%r11d # [a-f0-9]+ +[ ]*[a-f0-9]+: 2e 2e d5 40 8d 2d ([0-9a-f]{2} ){4} * (cs ){2}lea 0x[a-f0-9]+\(%rip\),%r21d # [a-f0-9]+ +[ ]*[a-f0-9]+: 2e 2e 48 8d 05 ([0-9a-f]{2} ){4} * (cs ){2}lea -0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ +[ ]*[a-f0-9]+: 2e 2e 4c 8d 1d ([0-9a-f]{2} ){4} * (cs ){2}lea 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ +[ ]*[a-f0-9]+: 2e 2e d5 48 8d 2d ([0-9a-f]{2} ){4} * (cs ){2}lea 0x[a-f0-9]+\(%rip\),%r21 # [a-f0-9]+ +[ ]*[a-f0-9]+: 2e 2e 48 8d 05 ([0-9a-f]{2} ){4} * (cs ){2}lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <__start_my_section> +[ ]*[a-f0-9]+: 2e 2e 4c 8d 1d ([0-9a-f]{2} ){4} * (cs ){2}lea 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <(__stop_my_section|pad)> #pass diff --git a/ld/testsuite/ld-x86-64/tlsbindesc.dd b/ld/testsuite/ld-x86-64/tlsbindesc.dd index ae10e8f8170..72757bab143 100644 --- a/ld/testsuite/ld-x86-64/tlsbindesc.dd +++ b/ld/testsuite/ld-x86-64/tlsbindesc.dd @@ -256,18 +256,18 @@ Disassembly of section .text: +[0-9a-f]+: d5 18 c7 c5 90 ff ff[ ]+mov \$0xf+90,%r21 # sl5 +[0-9a-f]+: ff * - +[0-9a-f]+: 26 26 49 c7 c3 90 ff[ ]+(es ){2}mov \$0xf+90,%r11 + +[0-9a-f]+: 2e 2e 49 c7 c3 90 ff[ ]+(cs ){2}mov \$0xf+90,%r11 # sl5 +[0-9a-f]+: ff ff * - +[0-9a-f]+: 26 26 d5 18 c7 c5 90[ ]+(es ){2}mov \$0xf+90,%r21 + +[0-9a-f]+: 2e 2e d5 18 c7 c5 90[ ]+(cs ){2}mov \$0xf+90,%r21 # sl5 +[0-9a-f]+: ff ff ff * # IE->LE against hidden var +[0-9a-f]+: d5 18 c7 c6 b0 ff ff[ ]+mov \$0xf+b0,%r22 +[0-9a-f]+: ff * - +[0-9a-f]+: 26 26 49 c7 c4 b0 ff[ ]+(es ){2}mov \$0xf+b0,%r12 + +[0-9a-f]+: 2e 2e 49 c7 c4 b0 ff[ ]+(cs ){2}mov \$0xf+b0,%r12 +[0-9a-f]+: ff ff * - +[0-9a-f]+: 26 26 d5 18 c7 c6 b0[ ]+(es ){2}mov \$0xf+b0,%r22 + +[0-9a-f]+: 2e 2e d5 18 c7 c6 b0[ ]+(cs ){2}mov \$0xf+b0,%r22 +[0-9a-f]+: ff ff ff * # GD -> IE because variable is not defined in executable +[0-9a-f]+: d5 48 8b 05 ([0-9a-f]{2} ){3}[ ]+mov 0x[0-9a-f]+\(%rip\),%r16 +# [0-9a-f]+