]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
x86-64: Use the GOT indirection in no-plt-check1.S
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 23 Aug 2025 16:35:50 +0000 (09:35 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Sat, 23 Aug 2025 20:54:32 +0000 (13:54 -0700)
There is

cmpq %rax, func_p(%rip)

in no-plt-check1.S which requires copy relocation when func_p, a function
pointer, is defined in a shared library.  Use the GOT indirection to
access func_p

movq func_p@GOTPCREL(%rip), %rdx
cmpq %rax, (%rdx)

to remove copy relocation to support PIE without copy relocation.

PR ld/33237
* testsuite/ld-x86-64/no-plt-check1.S: Use the GOT indirection
to access func_p.
* testsuite/ld-x86-64/no-plt-1a.dd: Adjusted.
* testsuite/ld-x86-64/no-plt-1b.dd: Likewise.
* testsuite/ld-x86-64/no-plt-1a.dd: Likewise.
* testsuite/ld-x86-64/no-plt-1b.dd: Likewise.
* testsuite/ld-x86-64/no-plt-1c.dd: Likewise.
* testsuite/ld-x86-64/no-plt-1d.dd: Likewise.
* testsuite/ld-x86-64/no-plt-1e.dd: Likewise.
* testsuite/ld-x86-64/no-plt-1f.dd: Likewise.
* testsuite/ld-x86-64/no-plt-1g.dd: Likewise.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
ld/testsuite/ld-x86-64/no-plt-1a.dd
ld/testsuite/ld-x86-64/no-plt-1b.dd
ld/testsuite/ld-x86-64/no-plt-1c.dd
ld/testsuite/ld-x86-64/no-plt-1d.dd
ld/testsuite/ld-x86-64/no-plt-1e.dd
ld/testsuite/ld-x86-64/no-plt-1f.dd
ld/testsuite/ld-x86-64/no-plt-1g.dd
ld/testsuite/ld-x86-64/no-plt-check1.S

index b1d5d7e491a2e5ad115e79eb5df9f39ac9e75509..89bfaa1f3ac0fa3968ca267817e0a1581873473e 100644 (file)
@@ -10,8 +10,9 @@ Disassembly of section .text:
  +[a-f0-9]+:   48 83 ec 08             sub    \$0x8,%rsp
  +[a-f0-9]+:   67 e8 ([0-9a-f]{2} ){4}[        ]+addr32 call [0-9a-f]+ <get_func>
  +[a-f0-9]+:   48 81 f8 ([0-9a-f]{2} ){4}[     ]+cmp    \$0x[0-9a-f]+,%rax
- +[a-f0-9]+:   75 34                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
- +[a-f0-9]+:   4(0|8) 39 05 ([0-9a-f]{2} ){4}[         ]+(rex |)cmp +%(e|r)ax,0x[0-9a-f]+\(%rip\) +# [a-f0-9]+ <func_p>
+ +[a-f0-9]+:   75 37                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
+ +[a-f0-9]+:   4(0|8) c7 c2 ([0-9a-f]{2} ){4}[         ]+(rex |)mov +\$0x[0-9a-f]+,%(e|r)dx
+ +[a-f0-9]+:   (48|67) 39 02[  ]+cmp +%(e|r)ax,\(%(e|r)dx\)
  +[a-f0-9]+:   75 2b                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
  +[a-f0-9]+:   67 e8 ([0-9a-f]{2} ){4}[        ]+addr32 call [0-9a-f]+ <func>
  +[a-f0-9]+:   3d 78 56 34 12          cmp    \$0x12345678,%eax
index 2ab8da594135135fb0ca3c9167a79f4dfc78eee7..1f430b88e393e01f5bf737f833827e87fbe2d7e6 100644 (file)
@@ -10,8 +10,9 @@ Disassembly of section .text:
  +[a-f0-9]+:   48 83 ec 08             sub    \$0x8,%rsp
  +[a-f0-9]+:   ff 15 ([0-9a-f]{2} ){4}[        ]+call   \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*>
  +[a-f0-9]+:   48 3b 05 ([0-9a-f]{2} ){4}[     ]+cmp    0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*>
- +[a-f0-9]+:   75 34                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
- +[a-f0-9]+:   4(0|8) 39 05 ([0-9a-f]{2} ){4}[         ]+(rex |)cmp +%(e|r)ax,0x[0-9a-f]+\(%rip\) +# [a-f0-9]+ <.*>
+ +[a-f0-9]+:   75 37                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
+ +[a-f0-9]+:   4(0|8) 8b 15 ([0-9a-f]{2} ){4}[         ]+(rex |)mov +0x[0-9a-f]+\(%rip\),%(e|r)dx +# [a-f0-9]+ <.*>
+ +[a-f0-9]+:   (48|67) 39 02[  ]+cmp +%(e|r)ax,\(%(e|r)dx\)
  +[a-f0-9]+:   75 2b                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
  +[a-f0-9]+:   ff 15 ([0-9a-f]{2} ){4}[        ]+call   \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*>
  +[a-f0-9]+:   3d 78 56 34 12          cmp    \$0x12345678,%eax
index 1f6ea274ed2bf64ab3c38bb396f90d0b87acd461..ef772af8a62048fdf0784e76b0e74f033285a181 100644 (file)
@@ -10,8 +10,9 @@ Disassembly of section .text:
  +[a-f0-9]+:   48 83 ec 08             sub    \$0x8,%rsp
  +[a-f0-9]+:   ff 15 ([0-9a-f]{2} ){4}[        ]+call   \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*>
  +[a-f0-9]+:   48 81 f8 ([0-9a-f]{2} ){4}[     ]+cmp    \$0x[0-9a-f]+,%rax
- +[a-f0-9]+:   75 34                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
- +[a-f0-9]+:   4(0|8) 39 05 ([0-9a-f]{2} ){4}[         ]+(rex |)cmp +%(e|r)ax,0x[0-9a-f]+\(%rip\) +# [a-f0-9]+ <.*>
+ +[a-f0-9]+:   75 37                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
+ +[a-f0-9]+:   4(0|8) 8b 15 ([0-9a-f]{2} ){4}[         ]+(rex |)mov +0x[0-9a-f]+\(%rip\),%(e|r)dx +# [a-f0-9]+ <.*>
+ +[a-f0-9]+:   (48|67) 39 02[  ]+cmp +%(e|r)ax,\(%(e|r)dx\)
  +[a-f0-9]+:   75 2b                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
  +[a-f0-9]+:   67 e8 ([0-9a-f]{2} ){4}[        ]+addr32 call [0-9a-f]+ <func>
  +[a-f0-9]+:   3d 78 56 34 12          cmp    \$0x12345678,%eax
index 49f34ade77d7085fc5c14f66cdb68d38a464fcd2..cd500bd2a71343601f4c872c2e1464257b522b5f 100644 (file)
@@ -10,8 +10,9 @@ Disassembly of section .text:
  +[a-f0-9]+:   48 83 ec 08             sub    \$0x8,%rsp
  +[a-f0-9]+:   67 e8 ([0-9a-f]{2} ){4}[        ]+addr32 call [0-9a-f]+ <get_func>
  +[a-f0-9]+:   48 81 f8 ([0-9a-f]{2} ){4}[     ]+cmp    \$0x[0-9a-f]+,%rax
- +[a-f0-9]+:   75 34                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
- +[a-f0-9]+:   4(0|8) 39 05 ([0-9a-f]{2} ){4}[         ]+(rex |)cmp +%(e|r)ax,0x[0-9a-f]+\(%rip\) +# [a-f0-9]+ <func_p>
+ +[a-f0-9]+:   75 37                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
+ +[a-f0-9]+:   4(0|8) c7 c2 ([0-9a-f]{2} ){4}[         ]+(rex |)mov +\$0x[0-9a-f]+,%(e|r)dx
+ +[a-f0-9]+:   (48|67) 39 02[  ]+cmp +%(e|r)ax,\(%(e|r)dx\)
  +[a-f0-9]+:   75 2b                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
  +[a-f0-9]+:   67 e8 ([0-9a-f]{2} ){4}[        ]+addr32 call [0-9a-f]+ <func>
  +[a-f0-9]+:   3d 78 56 34 12          cmp    \$0x12345678,%eax
index 465574f745b79e3b4692f5e0ee5a8bdaf4f3df9a..0180dd3d938e5c0163a7fc3c9f59c05c3a49868d 100644 (file)
@@ -10,8 +10,9 @@ Disassembly of section .text:
  +[a-f0-9]+:   48 83 ec 08             sub    \$0x8,%rsp
  +[a-f0-9]+:   67 e8 ([0-9a-f]{2} ){4}[        ]+addr32 call [0-9a-f]+ <get_func>
  +[a-f0-9]+:   48 3b 05 ([0-9a-f]{2} ){4}[     ]+cmp    0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*>
- +[a-f0-9]+:   75 34                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
- +[a-f0-9]+:   4(0|8) 39 05 ([0-9a-f]{2} ){4}[         ]+(rex |)cmp +%(e|r)ax,0x[0-9a-f]+\(%rip\) +# [a-f0-9]+ <func_p>
+ +[a-f0-9]+:   75 37                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
+ +[a-f0-9]+:   4(0|8) 8d 15 ([0-9a-f]{2} ){4}[         ]+(rex |)lea +0x[0-9a-f]+\(%rip\),%(e|r)dx +# [a-f0-9]+ <func_p>
+ +[a-f0-9]+:   (48|67) 39 02[  ]+cmp +%(e|r)ax,\(%(e|r)dx\)
  +[a-f0-9]+:   75 2b                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
  +[a-f0-9]+:   67 e8 ([0-9a-f]{2} ){4}[        ]+addr32 call [0-9a-f]+ <func>
  +[a-f0-9]+:   3d 78 56 34 12          cmp    \$0x12345678,%eax
index 2ab8da594135135fb0ca3c9167a79f4dfc78eee7..1f430b88e393e01f5bf737f833827e87fbe2d7e6 100644 (file)
@@ -10,8 +10,9 @@ Disassembly of section .text:
  +[a-f0-9]+:   48 83 ec 08             sub    \$0x8,%rsp
  +[a-f0-9]+:   ff 15 ([0-9a-f]{2} ){4}[        ]+call   \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*>
  +[a-f0-9]+:   48 3b 05 ([0-9a-f]{2} ){4}[     ]+cmp    0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*>
- +[a-f0-9]+:   75 34                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
- +[a-f0-9]+:   4(0|8) 39 05 ([0-9a-f]{2} ){4}[         ]+(rex |)cmp +%(e|r)ax,0x[0-9a-f]+\(%rip\) +# [a-f0-9]+ <.*>
+ +[a-f0-9]+:   75 37                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
+ +[a-f0-9]+:   4(0|8) 8b 15 ([0-9a-f]{2} ){4}[         ]+(rex |)mov +0x[0-9a-f]+\(%rip\),%(e|r)dx +# [a-f0-9]+ <.*>
+ +[a-f0-9]+:   (48|67) 39 02[  ]+cmp +%(e|r)ax,\(%(e|r)dx\)
  +[a-f0-9]+:   75 2b                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
  +[a-f0-9]+:   ff 15 ([0-9a-f]{2} ){4}[        ]+call   \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*>
  +[a-f0-9]+:   3d 78 56 34 12          cmp    \$0x12345678,%eax
index 0526fb0cabd64dd00946daf588969f6c1540b3b7..b6adc0d11817d775c110797e1b2b6e56f919d1dc 100644 (file)
@@ -10,8 +10,9 @@ Disassembly of section .text:
  +[a-f0-9]+:   48 83 ec 08             sub    \$0x8,%rsp
  +[a-f0-9]+:   ff 15 ([0-9a-f]{2} ){4}[        ]+call   \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*>
  +[a-f0-9]+:   48 3b 05 ([0-9a-f]{2} ){4}[     ]+cmp    0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*>
- +[a-f0-9]+:   75 34                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
- +[a-f0-9]+:   4(0|8) 39 05 ([0-9a-f]{2} ){4}[         ]+(rex |)cmp +%(e|r)ax,0x[0-9a-f]+\(%rip\) +# [a-f0-9]+ <.*>
+ +[a-f0-9]+:   75 37                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
+ +[a-f0-9]+:   4(0|8) 8b 15 ([0-9a-f]{2} ){4}[         ]+(rex |)mov +0x[0-9a-f]+\(%rip\),%(e|r)dx +# [a-f0-9]+ <.*>
+ +[a-f0-9]+:   (48|67) 39 02[  ]+cmp +%(e|r)ax,\(%(e|r)dx\)
  +[a-f0-9]+:   75 2b                   jne    [0-9a-f]+ <check\+0x[0-9a-f]+>
  +[a-f0-9]+:   67 e8 ([0-9a-f]{2} ){4}[        ]+addr32 call [0-9a-f]+ <func>
  +[a-f0-9]+:   3d 78 56 34 12          cmp    \$0x12345678,%eax
index 61d32b15f8be58f82d5722b6198431e04359d681..4526e5ed3341977f3677e981712e20ce54574038 100644 (file)
@@ -11,10 +11,12 @@ check:
        cmpq    func@GOTPCREL(%rip), %rax
        jne     .L3
 #ifdef __LP64__
-       cmpq    %rax, func_p(%rip)
+       movq    func_p@GOTPCREL(%rip), %rdx
+       cmpq    %rax, (%rdx)
 #else
        rex
-       cmpl    %eax, func_p(%rip)
+       movl    func_p@GOTPCREL(%rip), %edx
+       cmpl    %eax, (%edx)
 #endif
        jne     .L3
        call    *func@GOTPCREL(%rip)