x86-64: Relax BFD_RELOC_X86_64_GOTTPOFF check
Checks
Context |
Check |
Description |
linaro-tcwg-bot/tcwg_binutils_build--master-arm |
success
|
Build passed
|
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 |
success
|
Build passed
|
linaro-tcwg-bot/tcwg_binutils_check--master-aarch64 |
success
|
Test passed
|
linaro-tcwg-bot/tcwg_binutils_check--master-arm |
success
|
Test passed
|
Commit Message
From: konglin1 <lingling.kong@intel.com>
Relax BFD_RELOC_X86_64_GOTTPOFF check for APX NF,
Allow "{nf} add %foo@gottpoff(%rip), %reg1"
gas/
* config/tc-i386.c (md_assemble): Relax
BFD_RELOC_X86_64_CODE_6_GOTTPOFF check.
Allow "add %reg1, foo@gottpoff(%rip), %reg2".
* testsuite/gas/i386/x86-64-gottpoff.d: Updated.
* testsuite/gas/i386/x86-64-gottpoff.s: Add tests for
"{nf} add foo@gottpoff(%rip), %reg",
"{nf} add %reg1, foo@gottpoff(%rip), %reg2" and
"{nf} add foo@gottpoff(%rip), %reg, %reg2".
gold/
* testsuite/x86_64_ie_to_le.s: Add tests for
"{nf} add foo@gottpoff(%rip), %reg",
"{nf} add %reg1, foo@gottpoff(%rip), %reg2" and
"{nf} add foo@gottpoff(%rip), %reg, %reg2".
* testsuite/x86_64_ie_to_le.sh: Updated.
ld/
* testsuite/ld-x86-64/tlsbindesc.s: Add R_X86_64_CODE_6_GOTTPOFF
for APX NF tests.
* testsuite/ld-x86-64/tlsbindesc.d: Updated.
* testsuite/ld-x86-64/tlsbindesc.rd: Likewise.
---
gas/config/tc-i386.c | 3 +-
gas/testsuite/gas/i386/x86-64-gottpoff.d | 12 ++++++--
gas/testsuite/gas/i386/x86-64-gottpoff.s | 14 +++++++++
gold/testsuite/x86_64_ie_to_le.s | 3 ++
gold/testsuite/x86_64_ie_to_le.sh | 3 ++
ld/testsuite/ld-x86-64/tlsbindesc.dd | 36 ++++++++++++++++++++++++
ld/testsuite/ld-x86-64/tlsbindesc.rd | 36 ++++++++++++------------
ld/testsuite/ld-x86-64/tlsbindesc.s | 12 ++++++++
8 files changed, 98 insertions(+), 21 deletions(-)
Comments
The commit message should be
Allow "{nf} add foo@gottpoff(%rip), %reg".
On Thu, Jun 27, 2024, 11:33 AM Lingling Kong <lingling.kong@intel.com>
wrote:
> From: konglin1 <lingling.kong@intel.com>
>
> Relax BFD_RELOC_X86_64_GOTTPOFF check for APX NF,
> Allow "{nf} add %foo@gottpoff(%rip), %reg1"
>
> gas/
>
> * config/tc-i386.c (md_assemble): Relax
> BFD_RELOC_X86_64_CODE_6_GOTTPOFF check.
> Allow "add %reg1, foo@gottpoff(%rip), %reg2".
> * testsuite/gas/i386/x86-64-gottpoff.d: Updated.
> * testsuite/gas/i386/x86-64-gottpoff.s: Add tests for
> "{nf} add foo@gottpoff(%rip), %reg",
> "{nf} add %reg1, foo@gottpoff(%rip), %reg2" and
> "{nf} add foo@gottpoff(%rip), %reg, %reg2".
>
> gold/
> * testsuite/x86_64_ie_to_le.s: Add tests for
> "{nf} add foo@gottpoff(%rip), %reg",
> "{nf} add %reg1, foo@gottpoff(%rip), %reg2" and
> "{nf} add foo@gottpoff(%rip), %reg, %reg2".
> * testsuite/x86_64_ie_to_le.sh: Updated.
>
> ld/
>
> * testsuite/ld-x86-64/tlsbindesc.s: Add R_X86_64_CODE_6_GOTTPOFF
> for APX NF tests.
> * testsuite/ld-x86-64/tlsbindesc.d: Updated.
> * testsuite/ld-x86-64/tlsbindesc.rd: Likewise.
> ---
> gas/config/tc-i386.c | 3 +-
> gas/testsuite/gas/i386/x86-64-gottpoff.d | 12 ++++++--
> gas/testsuite/gas/i386/x86-64-gottpoff.s | 14 +++++++++
> gold/testsuite/x86_64_ie_to_le.s | 3 ++
> gold/testsuite/x86_64_ie_to_le.sh | 3 ++
> ld/testsuite/ld-x86-64/tlsbindesc.dd | 36 ++++++++++++++++++++++++
> ld/testsuite/ld-x86-64/tlsbindesc.rd | 36 ++++++++++++------------
> ld/testsuite/ld-x86-64/tlsbindesc.s | 12 ++++++++
> 8 files changed, 98 insertions(+), 21 deletions(-)
>
> diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
> index ab526924897..49263598dff 100644
> --- a/gas/config/tc-i386.c
> +++ b/gas/config/tc-i386.c
> @@ -7137,7 +7137,8 @@ md_assemble (char *line)
> && i.base_reg
> && i.base_reg->reg_num == RegIP
> && i.tm.operand_types[0].bitfield.class == Reg
> - && i.tm.operand_types[2].bitfield.class == Reg)
> + && (i.tm.operand_types[2].bitfield.class == Reg
> + || (i.tm.operands == 2 && i.tm.opcode_modifier.nf)))
> /* Allow APX: add %reg1, foo@gottpoff(%rip), %reg2. */
> break;
> /* Fall through. */
> diff --git a/gas/testsuite/gas/i386/x86-64-gottpoff.d
> b/gas/testsuite/gas/i386/x86-64-gottpoff.d
> index f2c039abe72..8f1c10f936c 100644
> --- a/gas/testsuite/gas/i386/x86-64-gottpoff.d
> +++ b/gas/testsuite/gas/i386/x86-64-gottpoff.d
> @@ -18,6 +18,14 @@ Disassembly of section .text:
> +[a-f0-9]+: d5 48 8b 25 00 00 00 00 mov 0x0\(%rip\),%r20
> # 3c <_start\+0x3c> 38: R_X86_64_CODE_4_GOTTPOFF foo-0x4
> +[a-f0-9]+: 62 74 fc 10 01 05 00 00 00 00 add
> %r8,0x0\(%rip\),%r16 # 46 <_start\+0x46> 42:
> R_X86_64_CODE_6_GOTTPOFF foo-0x4
> +[a-f0-9]+: 62 f4 9c 18 03 05 00 00 00 00 add
> 0x0\(%rip\),%rax,%r12 # 50 <_start\+0x50> 4c:
> R_X86_64_CODE_6_GOTTPOFF foo-0x4
> - +[a-f0-9]+: 62 74 fc 10 01 05 00 00 00 00 add
> %r8,0x0\(%rip\),%r16 # 5a <_start\+0x5a> 56:
> R_X86_64_CODE_6_GOTTPOFF foo-0x4
> - +[a-f0-9]+: 62 f4 9c 18 03 05 00 00 00 00 add
> 0x0\(%rip\),%rax,%r12 # 64 <_start\+0x64> 60:
> R_X86_64_CODE_6_GOTTPOFF foo-0x4
> + +[a-f0-9]+: 62 74 fc 14 01 05 00 00 00 00 \{nf\} add
> %r8,0x0\(%rip\),%r16 # 5a <_start\+0x5a> 56:
> R_X86_64_CODE_6_GOTTPOFF foo-0x4
> + +[a-f0-9]+: 62 f4 9c 1c 03 05 00 00 00 00 \{nf\} add
> 0x0\(%rip\),%rax,%r12 # 64 <_start\+0x64> 60:
> R_X86_64_CODE_6_GOTTPOFF foo-0x4
> + +[a-f0-9]+: 62 74 fc 10 01 05 00 00 00 00 add
> %r8,0x0\(%rip\),%r16 # 6e <_start\+0x6e> 6a:
> R_X86_64_CODE_6_GOTTPOFF foo-0x4
> + +[a-f0-9]+: 62 f4 9c 18 03 05 00 00 00 00 add
> 0x0\(%rip\),%rax,%r12 # 78 <_start\+0x78> 74:
> R_X86_64_CODE_6_GOTTPOFF foo-0x4
> + +[a-f0-9]+: 62 74 fc 14 01 05 00 00 00 00 \{nf\} add
> %r8,0x0\(%rip\),%r16 # 82 <_start\+0x82> 7e:
> R_X86_64_CODE_6_GOTTPOFF foo-0x4
> + +[a-f0-9]+: 62 f4 9c 1c 03 05 00 00 00 00 \{nf\} add
> 0x0\(%rip\),%rax,%r12 # 8c <_start\+0x8c> 88:
> R_X86_64_CODE_6_GOTTPOFF foo-0x4
> + +[a-f0-9]+: 62 f4 fc 0c 03 05 00 00 00 00 \{nf\} add
> 0x0\(%rip\),%rax # 96 <_start\+0x96> 92: R_X86_64_CODE_6_GOTTPOFF
> foo-0x4
> + +[a-f0-9]+: 62 e4 fc 0c 03 05 00 00 00 00 \{nf\} add
> 0x0\(%rip\),%r16 # a0 <_start\+0xa0> 9c: R_X86_64_CODE_6_GOTTPOFF
> foo-0x4
> + +[a-f0-9]+: 62 f4 fc 0c 03 05 00 00 00 00 \{nf\} add
> 0x0\(%rip\),%rax # aa <_start\+0xaa> a6: R_X86_64_CODE_6_GOTTPOFF
> foo-0x4
> + +[a-f0-9]+: 62 e4 fc 0c 03 05 00 00 00 00 \{nf\} add
> 0x0\(%rip\),%r16 # b4 <_start\+0xb4> b0: R_X86_64_CODE_6_GOTTPOFF
> foo-0x4
> #pass
> diff --git a/gas/testsuite/gas/i386/x86-64-gottpoff.s
> b/gas/testsuite/gas/i386/x86-64-gottpoff.s
> index e39010afc69..6ca348486c1 100644
> --- a/gas/testsuite/gas/i386/x86-64-gottpoff.s
> +++ b/gas/testsuite/gas/i386/x86-64-gottpoff.s
> @@ -18,8 +18,22 @@ _start:
>
> addq %r8, foo@GOTTPOFF(%rip), %r16
> addq foo@GOTTPOFF(%rip), %rax, %r12
> + {nf} addq %r8, foo@GOTTPOFF(%rip), %r16
> + {nf} addq foo@GOTTPOFF(%rip), %rax, %r12
>
> .intel_syntax noprefix
>
> add r16, QWORD PTR [rip + foo@GOTTPOFF], r8
> add r12, rax, QWORD PTR [rip + foo@GOTTPOFF]
> + {nf} addq r16, QWORD PTR [rip + foo@GOTTPOFF], r8
> + {nf} addq r12, rax, QWORD PTR [rip + foo@GOTTPOFF]
> +
> + .att_syntax prefix
> +
> + {nf} addq foo@GOTTPOFF(%rip), %rax
> + {nf} addq foo@GOTTPOFF(%rip), %r16
> +
> + .intel_syntax noprefix
> +
> + {nf} addq rax, QWORD PTR [rip + foo@GOTTPOFF]
> + {nf} addq r16, QWORD PTR [rip + foo@GOTTPOFF]
> diff --git a/gold/testsuite/x86_64_ie_to_le.s
> b/gold/testsuite/x86_64_ie_to_le.s
> index bd0643dc87f..4bf3f4abafb 100644
> --- a/gold/testsuite/x86_64_ie_to_le.s
> +++ b/gold/testsuite/x86_64_ie_to_le.s
> @@ -9,6 +9,9 @@ _start:
> movq foo@gottpoff(%rip), %r20
> addq %r30, foo@gottpoff(%rip), %r8
> addq foo@gottpoff(%rip), %rax, %r20
> + {nf} addq foo@gottpoff(%rip), %r16
> + {nf} addq %r30, foo@gottpoff(%rip), %r8
> + {nf} addq foo@gottpoff(%rip), %rax, %r20
> .size _start, .-_start
> .section .tdata,"awT",@progbits
> .align 4
> diff --git a/gold/testsuite/x86_64_ie_to_le.sh
> b/gold/testsuite/x86_64_ie_to_le.sh
> index 5308712ddbd..10e84686db8 100755
> --- a/gold/testsuite/x86_64_ie_to_le.sh
> +++ b/gold/testsuite/x86_64_ie_to_le.sh
> @@ -29,3 +29,6 @@ grep -q "add[ \t]\+\$0x[a-f0-9]\+,%r16"
> x86_64_ie_to_le.stdout
> grep -q "mov[ \t]\+\$0x[a-f0-9]\+,%r20" x86_64_ie_to_le.stdout
> grep -q "add[ \t]\+\$0x[a-f0-9]\+,%r30,%r8" x86_64_ie_to_le.stdout
> grep -q "add[ \t]\+\$0x[a-f0-9]\+,%rax,%r20" x86_64_ie_to_le.stdout
> +grep -q "\{nf\} add[ \t]\+\$0x[a-f0-9]\+,%r16" x86_64_ie_to_le.stdout
> +grep -q "\{nf\} add[ \t]\+\$0x[a-f0-9]\+,%r30,%r8" x86_64_ie_to_le.stdout
> +grep -q "\{nf\} add[ \t]\+\$0x[a-f0-9]\+,%rax,%r20" x86_64_ie_to_le.stdout
> diff --git a/ld/testsuite/ld-x86-64/tlsbindesc.dd
> b/ld/testsuite/ld-x86-64/tlsbindesc.dd
> index be89f38199d..601dfc2fc6d 100644
> --- a/ld/testsuite/ld-x86-64/tlsbindesc.dd
> +++ b/ld/testsuite/ld-x86-64/tlsbindesc.dd
> @@ -173,6 +173,15 @@ Disassembly of section .text:
> # -> R_X86_64_TPOFF64 sG2
> +[0-9a-f]+: ([0-9a-f]{2} ){3} *
> +[0-9a-f]+: 62 f4 fc 10 03 ([0-9a-f]{2} ){2}[ ]+add
> 0x[0-9a-f]+\(%rip\),%rax,%r16 +# [0-9a-f]+ <sG2>
> +# -> R_X86_64_TPOFF64 sG2
> + +[0-9a-f]+: ([0-9a-f]{2} ){3} *
> + +[0-9a-f]+: 62 e4 fc 0c 03 ([0-9a-f]{2} ){2}[ ]+\{nf\} add
> 0x[0-9a-f]+\(%rip\),%r16 +# [0-9a-f]+ <sG2>
> +# -> R_X86_64_TPOFF64 sG2
> + +[0-9a-f]+: ([0-9a-f]{2} ){3} *
> + +[0-9a-f]+: 62 f4 fc 14 01 ([0-9a-f]{2} ){2}[ ]+\{nf\} add
> %rax,0x[0-9a-f]+\(%rip\),%r16 +# [0-9a-f]+ <sG2>
> +# -> R_X86_64_TPOFF64 sG2
> + +[0-9a-f]+: ([0-9a-f]{2} ){3} *
> + +[0-9a-f]+: 62 f4 fc 14 03 ([0-9a-f]{2} ){2}[ ]+\{nf\} add
> 0x[0-9a-f]+\(%rip\),%rax,%r16 +# [0-9a-f]+ <sG2>
> # -> R_X86_64_TPOFF64 sG2
> +[0-9a-f]+: ([0-9a-f]{2} ){3} *
> # IE -> LE against global var defined in exec
> @@ -183,6 +192,15 @@ Disassembly of section .text:
> # sg1
> +[0-9a-f]+: ff ff ff *
> +[0-9a-f]+: 62 d4 f4 10 81 ([0-9a-f]{2} ){2}[ ]+add
> \$0x[0-9a-f]+,%r8,%r17
> +# sg1
> + +[0-9a-f]+: ff ff ff *
> + +[0-9a-f]+: 62 fc fc 0c 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add
> \$0x[0-9a-f]+,%r17
> +# sg1
> + +[0-9a-f]+: ff ff ff *
> + +[0-9a-f]+: 62 d4 f4 14 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add
> \$0x[0-9a-f]+,%r8,%r17
> +# sg1
> + +[0-9a-f]+: ff ff ff *
> + +[0-9a-f]+: 62 d4 f4 14 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add
> \$0x[0-9a-f]+,%r8,%r17
> # sg1
> +[0-9a-f]+: ff ff ff *
> # IE -> LE against local var
> @@ -193,6 +211,15 @@ Disassembly of section .text:
> # sl1
> +[0-9a-f]+: ff ff ff *
> +[0-9a-f]+: 62 d4 fc 18 81 ([0-9a-f]{2} ){2}[ ]+add
> \$0x[0-9a-f]+,%r8,%rax
> +# sl1
> + +[0-9a-f]+: ff ff ff *
> + +[0-9a-f]+: 62 fc fc 0c 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add
> \$0x[0-9a-f]+,%r18
> +# sl1
> + +[0-9a-f]+: ff ff ff *
> + +[0-9a-f]+: 62 d4 fc 1c 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add
> \$0x[0-9a-f]+,%r8,%rax
> +# sl1
> + +[0-9a-f]+: ff ff ff *
> + +[0-9a-f]+: 62 d4 fc 1c 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add
> \$0x[0-9a-f]+,%r8,%rax
> # sl1
> +[0-9a-f]+: ff ff ff *
> # IE -> LE against hidden var
> @@ -203,6 +230,15 @@ Disassembly of section .text:
> # sh1
> +[0-9a-f]+: ff ff ff *
> +[0-9a-f]+: 62 fc bc 18 81 ([0-9a-f]{2} ){2}[ ]+add
> \$0x[0-9a-f]+,%r19,%r8
> +# sh1
> + +[0-9a-f]+: ff ff ff *
> + +[0-9a-f]+: 62 fc fc 0c 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add
> \$0x[0-9a-f]+,%r19
> +# sh1
> + +[0-9a-f]+: ff ff ff *
> + +[0-9a-f]+: 62 fc bc 1c 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add
> \$0x[0-9a-f]+,%r19,%r8
> +# sh1
> + +[0-9a-f]+: ff ff ff *
> + +[0-9a-f]+: 62 fc bc 1c 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add
> \$0x[0-9a-f]+,%r19,%r8
> # sh1
> +[0-9a-f]+: ff ff ff *
> # Direct access through %fs
> diff --git a/ld/testsuite/ld-x86-64/tlsbindesc.rd
> b/ld/testsuite/ld-x86-64/tlsbindesc.rd
> index 59325b04e19..2fc965aef20 100644
> --- a/ld/testsuite/ld-x86-64/tlsbindesc.rd
> +++ b/ld/testsuite/ld-x86-64/tlsbindesc.rd
> @@ -15,12 +15,12 @@ Section Headers:
> +\[[ 0-9]+\] .dynsym +.*
> +\[[ 0-9]+\] .dynstr +.*
> +\[[ 0-9]+\] .rela.dyn +.*
> - +\[[ 0-9]+\] .text +PROGBITS +0+401000 0+1000 0+2ad 00 +AX +0 +0 +4096
> - +\[[ 0-9]+\] .tdata +PROGBITS +0+6012ad 0+12ad 0+60 00 WAT +0 +0 +1
> - +\[[ 0-9]+\] .tbss +NOBITS +0+60130d 0+130d 0+40 00 WAT +0 +0 +1
> - +\[[ 0-9]+\] .dynamic +DYNAMIC +0+601310 0+1310 0+100 10 +WA +4 +0 +8
> - +\[[ 0-9]+\] .got +PROGBITS +0+601410 0+1410 0+20 08 +WA +0 +0 +8
> - +\[[ 0-9]+\] .got.plt +PROGBITS +0+601430 0+1430 0+18 08 +WA +0 +0 +8
> + +\[[ 0-9]+\] .text +PROGBITS +0+401000 0+1000 0+325 00 +AX +0 +0 +4096
> + +\[[ 0-9]+\] .tdata +PROGBITS +0+601325 0+1325 0+60 00 WAT +0 +0 +1
> + +\[[ 0-9]+\] .tbss +NOBITS +0+601385 0+1385 0+40 00 WAT +0 +0 +1
> + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+601388 0+1388 0+100 10 +WA +4 +0 +8
> + +\[[ 0-9]+\] .got +PROGBITS +0+601488 0+1488 0+20 08 +WA +0 +0 +8
> + +\[[ 0-9]+\] .got.plt +PROGBITS +0+6014a8 0+14a8 0+18 08 +WA +0 +0 +8
> +\[[ 0-9]+\] .symtab +.*
> +\[[ 0-9]+\] .strtab +.*
> +\[[ 0-9]+\] .shstrtab +.*
> @@ -28,7 +28,7 @@ Key to Flags:
> #...
>
> Elf file type is EXEC \(Executable file\)
> -Entry point 0x4011b5
> +Entry point 0x40122d
> There are [0-9]+ program headers, starting at offset [0-9]+
>
> Program Headers:
> @@ -36,10 +36,10 @@ Program Headers:
> +PHDR.*
> +INTERP.*
> .*Requesting program interpreter.*
> - +LOAD +0x0+ 0x0+400000 0x0+400000 0x0+12ad 0x0+12ad R E 0x200000
> - +LOAD +0x0+12ad 0x0+6012ad 0x0+6012ad 0x0+19b 0x0+19b RW +0x200000
> - +DYNAMIC +0x0+1310 0x0+601310 0x0+601310 0x0+100 0x0+100 RW +0x8
> - +TLS +0x0+12ad 0x0+6012ad 0x0+6012ad 0x0+60 0x0+a0 R +0x1
> + +LOAD +0x0+ 0x0+400000 0x0+400000 0x0+1325 0x0+1325 R E 0x200000
> + +LOAD +0x0+1325 0x0+601325 0x0+601325 0x0+19b 0x0+19b RW +0x200000
> + +DYNAMIC +0x0+1388 0x0+601388 0x0+601388 0x0+100 0x0+100 RW +0x8
> + +TLS +0x0+1325 0x0+601325 0x0+601325 0x0+60 0x0+a0 R +0x1
>
> Section to Segment mapping:
> +Segment Sections...
> @@ -52,10 +52,10 @@ Program Headers:
>
> Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
> +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
> -0+601410 +0+100000012 R_X86_64_TPOFF64 +0+ sG5 \+ 0
> -0+601418 +0+200000012 R_X86_64_TPOFF64 +0+ sG2 \+ 0
> -0+601420 +0+300000012 R_X86_64_TPOFF64 +0+ sG6 \+ 0
> -0+601428 +0+400000012 R_X86_64_TPOFF64 +0+ sG1 \+ 0
> +0+601488 +0+100000012 R_X86_64_TPOFF64 +0+ sG5 \+ 0
> +0+601490 +0+200000012 R_X86_64_TPOFF64 +0+ sG2 \+ 0
> +0+601498 +0+300000012 R_X86_64_TPOFF64 +0+ sG6 \+ 0
> +0+6014a0 +0+400000012 R_X86_64_TPOFF64 +0+ sG1 \+ 0
>
> Symbol table '\.dynsym' contains [0-9]+ entries:
> +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
> @@ -88,8 +88,8 @@ Symbol table '\.symtab' contains [0-9]+ entries:
> +[0-9]+: 0+9c +0 +TLS +LOCAL +DEFAULT +8 bl8
> .* FILE +LOCAL +DEFAULT +ABS
> +[0-9]+: 0+a0 +0 +TLS +LOCAL +DEFAULT +7 _TLS_MODULE_BASE_
> - +[0-9]+: 0+601310 +0 +OBJECT +LOCAL +DEFAULT +9 _DYNAMIC
> - +[0-9]+: 0+601430 +0 +OBJECT +LOCAL +DEFAULT +11 _GLOBAL_OFFSET_TABLE_
> + +[0-9]+: 0+601388 +0 +OBJECT +LOCAL +DEFAULT +9 _DYNAMIC
> + +[0-9]+: 0+6014a8 +0 +OBJECT +LOCAL +DEFAULT +11 _GLOBAL_OFFSET_TABLE_
> +[0-9]+: 0+1c +0 +TLS +GLOBAL +DEFAULT +7 sg8
> +[0-9]+: 0+7c +0 +TLS +GLOBAL +DEFAULT +8 bg8
> +[0-9]+: 0+74 +0 +TLS +GLOBAL +DEFAULT +8 bg6
> @@ -104,7 +104,7 @@ Symbol table '\.symtab' contains [0-9]+ entries:
> +[0-9]+: 0+58 +0 +TLS +GLOBAL +HIDDEN +7 sh7
> +[0-9]+: 0+5c +0 +TLS +GLOBAL +HIDDEN +7 sh8
> +[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +7 sg1
> - +[0-9]+: 0+4011b5 +0 +FUNC +GLOBAL +DEFAULT +6 _start
> + +[0-9]+: 0+40122d +0 +FUNC +GLOBAL +DEFAULT +6 _start
> +[0-9]+: 0+4c +0 +TLS +GLOBAL +HIDDEN +7 sh4
> +[0-9]+: 0+78 +0 +TLS +GLOBAL +DEFAULT +8 bg7
> +[0-9]+: 0+50 +0 +TLS +GLOBAL +HIDDEN +7 sh5
> diff --git a/ld/testsuite/ld-x86-64/tlsbindesc.s
> b/ld/testsuite/ld-x86-64/tlsbindesc.s
> index 4747fc1bc30..39ba3bbaa9f 100644
> --- a/ld/testsuite/ld-x86-64/tlsbindesc.s
> +++ b/ld/testsuite/ld-x86-64/tlsbindesc.s
> @@ -131,21 +131,33 @@ fn2:
> addq sG2@gottpoff(%rip), %r16
> addq %rax, sG2@gottpoff(%rip), %r16
> addq sG2@gottpoff(%rip), %rax, %r16
> + {nf} addq sG2@gottpoff(%rip), %r16
> + {nf} addq %rax, sG2@gottpoff(%rip), %r16
> + {nf} addq sG2@gottpoff(%rip), %rax, %r16
>
> /* IE -> LE against global var defined in exec */
> addq sg1@gottpoff(%rip), %r17
> addq %r8, sg1@gottpoff(%rip), %r17
> addq sg1@gottpoff(%rip), %r8, %r17
> + {nf} addq sg1@gottpoff(%rip), %r17
> + {nf} addq %r8, sg1@gottpoff(%rip), %r17
> + {nf} addq sg1@gottpoff(%rip), %r8, %r17
>
> /* IE -> LE against local var */
> addq sl1@gottpoff(%rip), %r18
> addq %r8, sl1@gottpoff(%rip), %rax
> addq sl1@gottpoff(%rip), %r8, %rax
> + {nf} addq sl1@gottpoff(%rip), %r18
> + {nf} addq %r8, sl1@gottpoff(%rip), %rax
> + {nf} addq sl1@gottpoff(%rip), %r8, %rax
>
> /* IE -> LE against hidden var */
> addq sh1@gottpoff(%rip), %r19
> addq %r19, sh1@gottpoff(%rip), %r8
> addq sh1@gottpoff(%rip), %r19, %r8
> + {nf} addq sh1@gottpoff(%rip), %r19
> + {nf} addq %r19, sh1@gottpoff(%rip), %r8
> + {nf} addq sh1@gottpoff(%rip), %r19, %r8
>
> /* Direct access through %fs */
>
> --
> 2.31.1
>
>
@@ -7137,7 +7137,8 @@ md_assemble (char *line)
&& i.base_reg
&& i.base_reg->reg_num == RegIP
&& i.tm.operand_types[0].bitfield.class == Reg
- && i.tm.operand_types[2].bitfield.class == Reg)
+ && (i.tm.operand_types[2].bitfield.class == Reg
+ || (i.tm.operands == 2 && i.tm.opcode_modifier.nf)))
/* Allow APX: add %reg1, foo@gottpoff(%rip), %reg2. */
break;
/* Fall through. */
@@ -18,6 +18,14 @@ Disassembly of section .text:
+[a-f0-9]+: d5 48 8b 25 00 00 00 00 mov 0x0\(%rip\),%r20 # 3c <_start\+0x3c> 38: R_X86_64_CODE_4_GOTTPOFF foo-0x4
+[a-f0-9]+: 62 74 fc 10 01 05 00 00 00 00 add %r8,0x0\(%rip\),%r16 # 46 <_start\+0x46> 42: R_X86_64_CODE_6_GOTTPOFF foo-0x4
+[a-f0-9]+: 62 f4 9c 18 03 05 00 00 00 00 add 0x0\(%rip\),%rax,%r12 # 50 <_start\+0x50> 4c: R_X86_64_CODE_6_GOTTPOFF foo-0x4
- +[a-f0-9]+: 62 74 fc 10 01 05 00 00 00 00 add %r8,0x0\(%rip\),%r16 # 5a <_start\+0x5a> 56: R_X86_64_CODE_6_GOTTPOFF foo-0x4
- +[a-f0-9]+: 62 f4 9c 18 03 05 00 00 00 00 add 0x0\(%rip\),%rax,%r12 # 64 <_start\+0x64> 60: R_X86_64_CODE_6_GOTTPOFF foo-0x4
+ +[a-f0-9]+: 62 74 fc 14 01 05 00 00 00 00 \{nf\} add %r8,0x0\(%rip\),%r16 # 5a <_start\+0x5a> 56: R_X86_64_CODE_6_GOTTPOFF foo-0x4
+ +[a-f0-9]+: 62 f4 9c 1c 03 05 00 00 00 00 \{nf\} add 0x0\(%rip\),%rax,%r12 # 64 <_start\+0x64> 60: R_X86_64_CODE_6_GOTTPOFF foo-0x4
+ +[a-f0-9]+: 62 74 fc 10 01 05 00 00 00 00 add %r8,0x0\(%rip\),%r16 # 6e <_start\+0x6e> 6a: R_X86_64_CODE_6_GOTTPOFF foo-0x4
+ +[a-f0-9]+: 62 f4 9c 18 03 05 00 00 00 00 add 0x0\(%rip\),%rax,%r12 # 78 <_start\+0x78> 74: R_X86_64_CODE_6_GOTTPOFF foo-0x4
+ +[a-f0-9]+: 62 74 fc 14 01 05 00 00 00 00 \{nf\} add %r8,0x0\(%rip\),%r16 # 82 <_start\+0x82> 7e: R_X86_64_CODE_6_GOTTPOFF foo-0x4
+ +[a-f0-9]+: 62 f4 9c 1c 03 05 00 00 00 00 \{nf\} add 0x0\(%rip\),%rax,%r12 # 8c <_start\+0x8c> 88: R_X86_64_CODE_6_GOTTPOFF foo-0x4
+ +[a-f0-9]+: 62 f4 fc 0c 03 05 00 00 00 00 \{nf\} add 0x0\(%rip\),%rax # 96 <_start\+0x96> 92: R_X86_64_CODE_6_GOTTPOFF foo-0x4
+ +[a-f0-9]+: 62 e4 fc 0c 03 05 00 00 00 00 \{nf\} add 0x0\(%rip\),%r16 # a0 <_start\+0xa0> 9c: R_X86_64_CODE_6_GOTTPOFF foo-0x4
+ +[a-f0-9]+: 62 f4 fc 0c 03 05 00 00 00 00 \{nf\} add 0x0\(%rip\),%rax # aa <_start\+0xaa> a6: R_X86_64_CODE_6_GOTTPOFF foo-0x4
+ +[a-f0-9]+: 62 e4 fc 0c 03 05 00 00 00 00 \{nf\} add 0x0\(%rip\),%r16 # b4 <_start\+0xb4> b0: R_X86_64_CODE_6_GOTTPOFF foo-0x4
#pass
@@ -18,8 +18,22 @@ _start:
addq %r8, foo@GOTTPOFF(%rip), %r16
addq foo@GOTTPOFF(%rip), %rax, %r12
+ {nf} addq %r8, foo@GOTTPOFF(%rip), %r16
+ {nf} addq foo@GOTTPOFF(%rip), %rax, %r12
.intel_syntax noprefix
add r16, QWORD PTR [rip + foo@GOTTPOFF], r8
add r12, rax, QWORD PTR [rip + foo@GOTTPOFF]
+ {nf} addq r16, QWORD PTR [rip + foo@GOTTPOFF], r8
+ {nf} addq r12, rax, QWORD PTR [rip + foo@GOTTPOFF]
+
+ .att_syntax prefix
+
+ {nf} addq foo@GOTTPOFF(%rip), %rax
+ {nf} addq foo@GOTTPOFF(%rip), %r16
+
+ .intel_syntax noprefix
+
+ {nf} addq rax, QWORD PTR [rip + foo@GOTTPOFF]
+ {nf} addq r16, QWORD PTR [rip + foo@GOTTPOFF]
@@ -9,6 +9,9 @@ _start:
movq foo@gottpoff(%rip), %r20
addq %r30, foo@gottpoff(%rip), %r8
addq foo@gottpoff(%rip), %rax, %r20
+ {nf} addq foo@gottpoff(%rip), %r16
+ {nf} addq %r30, foo@gottpoff(%rip), %r8
+ {nf} addq foo@gottpoff(%rip), %rax, %r20
.size _start, .-_start
.section .tdata,"awT",@progbits
.align 4
@@ -29,3 +29,6 @@ grep -q "add[ \t]\+\$0x[a-f0-9]\+,%r16" x86_64_ie_to_le.stdout
grep -q "mov[ \t]\+\$0x[a-f0-9]\+,%r20" x86_64_ie_to_le.stdout
grep -q "add[ \t]\+\$0x[a-f0-9]\+,%r30,%r8" x86_64_ie_to_le.stdout
grep -q "add[ \t]\+\$0x[a-f0-9]\+,%rax,%r20" x86_64_ie_to_le.stdout
+grep -q "\{nf\} add[ \t]\+\$0x[a-f0-9]\+,%r16" x86_64_ie_to_le.stdout
+grep -q "\{nf\} add[ \t]\+\$0x[a-f0-9]\+,%r30,%r8" x86_64_ie_to_le.stdout
+grep -q "\{nf\} add[ \t]\+\$0x[a-f0-9]\+,%rax,%r20" x86_64_ie_to_le.stdout
@@ -173,6 +173,15 @@ Disassembly of section .text:
# -> R_X86_64_TPOFF64 sG2
+[0-9a-f]+: ([0-9a-f]{2} ){3} *
+[0-9a-f]+: 62 f4 fc 10 03 ([0-9a-f]{2} ){2}[ ]+add 0x[0-9a-f]+\(%rip\),%rax,%r16 +# [0-9a-f]+ <sG2>
+# -> R_X86_64_TPOFF64 sG2
+ +[0-9a-f]+: ([0-9a-f]{2} ){3} *
+ +[0-9a-f]+: 62 e4 fc 0c 03 ([0-9a-f]{2} ){2}[ ]+\{nf\} add 0x[0-9a-f]+\(%rip\),%r16 +# [0-9a-f]+ <sG2>
+# -> R_X86_64_TPOFF64 sG2
+ +[0-9a-f]+: ([0-9a-f]{2} ){3} *
+ +[0-9a-f]+: 62 f4 fc 14 01 ([0-9a-f]{2} ){2}[ ]+\{nf\} add %rax,0x[0-9a-f]+\(%rip\),%r16 +# [0-9a-f]+ <sG2>
+# -> R_X86_64_TPOFF64 sG2
+ +[0-9a-f]+: ([0-9a-f]{2} ){3} *
+ +[0-9a-f]+: 62 f4 fc 14 03 ([0-9a-f]{2} ){2}[ ]+\{nf\} add 0x[0-9a-f]+\(%rip\),%rax,%r16 +# [0-9a-f]+ <sG2>
# -> R_X86_64_TPOFF64 sG2
+[0-9a-f]+: ([0-9a-f]{2} ){3} *
# IE -> LE against global var defined in exec
@@ -183,6 +192,15 @@ Disassembly of section .text:
# sg1
+[0-9a-f]+: ff ff ff *
+[0-9a-f]+: 62 d4 f4 10 81 ([0-9a-f]{2} ){2}[ ]+add \$0x[0-9a-f]+,%r8,%r17
+# sg1
+ +[0-9a-f]+: ff ff ff *
+ +[0-9a-f]+: 62 fc fc 0c 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add \$0x[0-9a-f]+,%r17
+# sg1
+ +[0-9a-f]+: ff ff ff *
+ +[0-9a-f]+: 62 d4 f4 14 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add \$0x[0-9a-f]+,%r8,%r17
+# sg1
+ +[0-9a-f]+: ff ff ff *
+ +[0-9a-f]+: 62 d4 f4 14 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add \$0x[0-9a-f]+,%r8,%r17
# sg1
+[0-9a-f]+: ff ff ff *
# IE -> LE against local var
@@ -193,6 +211,15 @@ Disassembly of section .text:
# sl1
+[0-9a-f]+: ff ff ff *
+[0-9a-f]+: 62 d4 fc 18 81 ([0-9a-f]{2} ){2}[ ]+add \$0x[0-9a-f]+,%r8,%rax
+# sl1
+ +[0-9a-f]+: ff ff ff *
+ +[0-9a-f]+: 62 fc fc 0c 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add \$0x[0-9a-f]+,%r18
+# sl1
+ +[0-9a-f]+: ff ff ff *
+ +[0-9a-f]+: 62 d4 fc 1c 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add \$0x[0-9a-f]+,%r8,%rax
+# sl1
+ +[0-9a-f]+: ff ff ff *
+ +[0-9a-f]+: 62 d4 fc 1c 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add \$0x[0-9a-f]+,%r8,%rax
# sl1
+[0-9a-f]+: ff ff ff *
# IE -> LE against hidden var
@@ -203,6 +230,15 @@ Disassembly of section .text:
# sh1
+[0-9a-f]+: ff ff ff *
+[0-9a-f]+: 62 fc bc 18 81 ([0-9a-f]{2} ){2}[ ]+add \$0x[0-9a-f]+,%r19,%r8
+# sh1
+ +[0-9a-f]+: ff ff ff *
+ +[0-9a-f]+: 62 fc fc 0c 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add \$0x[0-9a-f]+,%r19
+# sh1
+ +[0-9a-f]+: ff ff ff *
+ +[0-9a-f]+: 62 fc bc 1c 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add \$0x[0-9a-f]+,%r19,%r8
+# sh1
+ +[0-9a-f]+: ff ff ff *
+ +[0-9a-f]+: 62 fc bc 1c 81 ([0-9a-f]{2} ){2}[ ]+\{nf\} add \$0x[0-9a-f]+,%r19,%r8
# sh1
+[0-9a-f]+: ff ff ff *
# Direct access through %fs
@@ -15,12 +15,12 @@ Section Headers:
+\[[ 0-9]+\] .dynsym +.*
+\[[ 0-9]+\] .dynstr +.*
+\[[ 0-9]+\] .rela.dyn +.*
- +\[[ 0-9]+\] .text +PROGBITS +0+401000 0+1000 0+2ad 00 +AX +0 +0 +4096
- +\[[ 0-9]+\] .tdata +PROGBITS +0+6012ad 0+12ad 0+60 00 WAT +0 +0 +1
- +\[[ 0-9]+\] .tbss +NOBITS +0+60130d 0+130d 0+40 00 WAT +0 +0 +1
- +\[[ 0-9]+\] .dynamic +DYNAMIC +0+601310 0+1310 0+100 10 +WA +4 +0 +8
- +\[[ 0-9]+\] .got +PROGBITS +0+601410 0+1410 0+20 08 +WA +0 +0 +8
- +\[[ 0-9]+\] .got.plt +PROGBITS +0+601430 0+1430 0+18 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] .text +PROGBITS +0+401000 0+1000 0+325 00 +AX +0 +0 +4096
+ +\[[ 0-9]+\] .tdata +PROGBITS +0+601325 0+1325 0+60 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .tbss +NOBITS +0+601385 0+1385 0+40 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +0+601388 0+1388 0+100 10 +WA +4 +0 +8
+ +\[[ 0-9]+\] .got +PROGBITS +0+601488 0+1488 0+20 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] .got.plt +PROGBITS +0+6014a8 0+14a8 0+18 08 +WA +0 +0 +8
+\[[ 0-9]+\] .symtab +.*
+\[[ 0-9]+\] .strtab +.*
+\[[ 0-9]+\] .shstrtab +.*
@@ -28,7 +28,7 @@ Key to Flags:
#...
Elf file type is EXEC \(Executable file\)
-Entry point 0x4011b5
+Entry point 0x40122d
There are [0-9]+ program headers, starting at offset [0-9]+
Program Headers:
@@ -36,10 +36,10 @@ Program Headers:
+PHDR.*
+INTERP.*
.*Requesting program interpreter.*
- +LOAD +0x0+ 0x0+400000 0x0+400000 0x0+12ad 0x0+12ad R E 0x200000
- +LOAD +0x0+12ad 0x0+6012ad 0x0+6012ad 0x0+19b 0x0+19b RW +0x200000
- +DYNAMIC +0x0+1310 0x0+601310 0x0+601310 0x0+100 0x0+100 RW +0x8
- +TLS +0x0+12ad 0x0+6012ad 0x0+6012ad 0x0+60 0x0+a0 R +0x1
+ +LOAD +0x0+ 0x0+400000 0x0+400000 0x0+1325 0x0+1325 R E 0x200000
+ +LOAD +0x0+1325 0x0+601325 0x0+601325 0x0+19b 0x0+19b RW +0x200000
+ +DYNAMIC +0x0+1388 0x0+601388 0x0+601388 0x0+100 0x0+100 RW +0x8
+ +TLS +0x0+1325 0x0+601325 0x0+601325 0x0+60 0x0+a0 R +0x1
Section to Segment mapping:
+Segment Sections...
@@ -52,10 +52,10 @@ Program Headers:
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
+Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
-0+601410 +0+100000012 R_X86_64_TPOFF64 +0+ sG5 \+ 0
-0+601418 +0+200000012 R_X86_64_TPOFF64 +0+ sG2 \+ 0
-0+601420 +0+300000012 R_X86_64_TPOFF64 +0+ sG6 \+ 0
-0+601428 +0+400000012 R_X86_64_TPOFF64 +0+ sG1 \+ 0
+0+601488 +0+100000012 R_X86_64_TPOFF64 +0+ sG5 \+ 0
+0+601490 +0+200000012 R_X86_64_TPOFF64 +0+ sG2 \+ 0
+0+601498 +0+300000012 R_X86_64_TPOFF64 +0+ sG6 \+ 0
+0+6014a0 +0+400000012 R_X86_64_TPOFF64 +0+ sG1 \+ 0
Symbol table '\.dynsym' contains [0-9]+ entries:
+Num: +Value +Size +Type +Bind +Vis +Ndx +Name
@@ -88,8 +88,8 @@ Symbol table '\.symtab' contains [0-9]+ entries:
+[0-9]+: 0+9c +0 +TLS +LOCAL +DEFAULT +8 bl8
.* FILE +LOCAL +DEFAULT +ABS
+[0-9]+: 0+a0 +0 +TLS +LOCAL +DEFAULT +7 _TLS_MODULE_BASE_
- +[0-9]+: 0+601310 +0 +OBJECT +LOCAL +DEFAULT +9 _DYNAMIC
- +[0-9]+: 0+601430 +0 +OBJECT +LOCAL +DEFAULT +11 _GLOBAL_OFFSET_TABLE_
+ +[0-9]+: 0+601388 +0 +OBJECT +LOCAL +DEFAULT +9 _DYNAMIC
+ +[0-9]+: 0+6014a8 +0 +OBJECT +LOCAL +DEFAULT +11 _GLOBAL_OFFSET_TABLE_
+[0-9]+: 0+1c +0 +TLS +GLOBAL +DEFAULT +7 sg8
+[0-9]+: 0+7c +0 +TLS +GLOBAL +DEFAULT +8 bg8
+[0-9]+: 0+74 +0 +TLS +GLOBAL +DEFAULT +8 bg6
@@ -104,7 +104,7 @@ Symbol table '\.symtab' contains [0-9]+ entries:
+[0-9]+: 0+58 +0 +TLS +GLOBAL +HIDDEN +7 sh7
+[0-9]+: 0+5c +0 +TLS +GLOBAL +HIDDEN +7 sh8
+[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +7 sg1
- +[0-9]+: 0+4011b5 +0 +FUNC +GLOBAL +DEFAULT +6 _start
+ +[0-9]+: 0+40122d +0 +FUNC +GLOBAL +DEFAULT +6 _start
+[0-9]+: 0+4c +0 +TLS +GLOBAL +HIDDEN +7 sh4
+[0-9]+: 0+78 +0 +TLS +GLOBAL +DEFAULT +8 bg7
+[0-9]+: 0+50 +0 +TLS +GLOBAL +HIDDEN +7 sh5
@@ -131,21 +131,33 @@ fn2:
addq sG2@gottpoff(%rip), %r16
addq %rax, sG2@gottpoff(%rip), %r16
addq sG2@gottpoff(%rip), %rax, %r16
+ {nf} addq sG2@gottpoff(%rip), %r16
+ {nf} addq %rax, sG2@gottpoff(%rip), %r16
+ {nf} addq sG2@gottpoff(%rip), %rax, %r16
/* IE -> LE against global var defined in exec */
addq sg1@gottpoff(%rip), %r17
addq %r8, sg1@gottpoff(%rip), %r17
addq sg1@gottpoff(%rip), %r8, %r17
+ {nf} addq sg1@gottpoff(%rip), %r17
+ {nf} addq %r8, sg1@gottpoff(%rip), %r17
+ {nf} addq sg1@gottpoff(%rip), %r8, %r17
/* IE -> LE against local var */
addq sl1@gottpoff(%rip), %r18
addq %r8, sl1@gottpoff(%rip), %rax
addq sl1@gottpoff(%rip), %r8, %rax
+ {nf} addq sl1@gottpoff(%rip), %r18
+ {nf} addq %r8, sl1@gottpoff(%rip), %rax
+ {nf} addq sl1@gottpoff(%rip), %r8, %rax
/* IE -> LE against hidden var */
addq sh1@gottpoff(%rip), %r19
addq %r19, sh1@gottpoff(%rip), %r8
addq sh1@gottpoff(%rip), %r19, %r8
+ {nf} addq sh1@gottpoff(%rip), %r19
+ {nf} addq %r19, sh1@gottpoff(%rip), %r8
+ {nf} addq sh1@gottpoff(%rip), %r19, %r8
/* Direct access through %fs */