]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
x86-64: Verify that TLS IE works with APX NF
authorkonglin1 <lingling.kong@intel.com>
Tue, 2 Jul 2024 06:01:12 +0000 (23:01 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 2 Jul 2024 06:08:31 +0000 (23:08 -0700)
Verify that

{nf} add %reg1, foo@gottpoff(%rip), %reg2
{nf} add foo@gottpoff(%rip), %reg, %reg2

work correctly with ld and gold.

gas/

* testsuite/gas/i386/x86-64-gottpoff.d: Updated.
* testsuite/gas/i386/x86-64-gottpoff.s: Add tests for
"{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 %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.

Co-Authored-By: H.J. Lu <hjl.tools@gmail.com>
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
gas/testsuite/gas/i386/x86-64-gottpoff.d
gas/testsuite/gas/i386/x86-64-gottpoff.s
gold/testsuite/x86_64_ie_to_le.s
gold/testsuite/x86_64_ie_to_le.sh
ld/testsuite/ld-x86-64/tlsbindesc.dd
ld/testsuite/ld-x86-64/tlsbindesc.rd
ld/testsuite/ld-x86-64/tlsbindesc.s

index f2c039abe727628297e6298944f6c57e26bfca5c..5d0dd582425086f84c3ab472be85acef7e06b95a 100644 (file)
@@ -18,6 +18,10 @@ 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
 #pass
index e39010afc6925500644835719cf66465e2fc2f0a..d1f55017b0a1151e2cc4ef62f98535f4e535d313 100644 (file)
@@ -18,8 +18,12 @@ _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} add        r16, QWORD PTR [rip + foo@GOTTPOFF], r8
+       {nf} add        r12, rax, QWORD PTR [rip + foo@GOTTPOFF]
index bd0643dc87f671ef6d98a8ed979fa432767ad572..56f3dfcc35ea841a06e45c0aa9ce60573f90acbc 100644 (file)
@@ -9,6 +9,8 @@ _start:
        movq    foo@gottpoff(%rip), %r20
        addq    %r30, foo@gottpoff(%rip), %r8
        addq    foo@gottpoff(%rip), %rax, %r20
+       {nf} addq       %r30, foo@gottpoff(%rip), %r8
+       {nf} addq       foo@gottpoff(%rip), %rax, %r20
        .size   _start, .-_start
        .section        .tdata,"awT",@progbits
        .align 4
index 5308712ddbd70c8d7d83fa5b24eca82299ed527e..29272727c5ac18174bc16b8892b3f35bb32d1ce3 100755 (executable)
@@ -29,3 +29,5 @@ 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]\+,%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
index be89f38199dda62d4a2514d6c21af40b352428bf..7aa1b922b3cd5812bbf4796c70a8c652d28f0883 100644 (file)
@@ -173,6 +173,12 @@ 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 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 +189,12 @@ 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 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 +205,12 @@ 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 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 +221,12 @@ 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 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
index 59325b04e19ec25c746419d30208683435acf35e..1e0348e963fef3df79386e32ab874ddfc55df745 100644 (file)
@@ -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+2fd 00 +AX +0 +0 +4096
+ +\[[ 0-9]+\] .tdata +PROGBITS +0+6012fd 0+12fd 0+60 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .tbss +NOBITS +0+60135d 0+135d 0+40 00 WAT +0 +0 +1
+ +\[[ 0-9]+\] .dynamic +DYNAMIC +0+601360 0+1360 0+100 10 +WA +4 +0 +8
+ +\[[ 0-9]+\] .got +PROGBITS +0+601460 0+1460 0+20 08 +WA +0 +0 +8
+ +\[[ 0-9]+\] .got.plt +PROGBITS +0+601480 0+1480 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 0x401205
 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+12fd 0x0+12fd R E 0x200000
+ +LOAD +0x0+12fd 0x0+6012fd 0x0+6012fd 0x0+19b 0x0+19b RW +0x200000
+ +DYNAMIC +0x0+1360 0x0+601360 0x0+601360 0x0+100 0x0+100 RW +0x8
+ +TLS +0x0+12fd 0x0+6012fd 0x0+6012fd 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+601460 +0+100000012 R_X86_64_TPOFF64 +0+ sG5 \+ 0
+0+601468 +0+200000012 R_X86_64_TPOFF64 +0+ sG2 \+ 0
+0+601470 +0+300000012 R_X86_64_TPOFF64 +0+ sG6 \+ 0
+0+601478 +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+601360 +0 +OBJECT +LOCAL +DEFAULT +9 _DYNAMIC
+ +[0-9]+: 0+601480 +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+401205 +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
index 4747fc1bc307838b52b633539c421999a283b212..8aad1025de846f2af39d5520044ff0ff6d104d5c 100644 (file)
@@ -131,21 +131,29 @@ fn2:
        addq    sG2@gottpoff(%rip), %r16
        addq    %rax, sG2@gottpoff(%rip), %r16
        addq    sG2@gottpoff(%rip), %rax, %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       %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       %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       %r19, sh1@gottpoff(%rip), %r8
+       {nf} addq       sh1@gottpoff(%rip), %r19, %r8
 
        /* Direct access through %fs  */