[binutils-gdb] x86-64: Use the GOT indirection in no-plt-check1.S

H.J. Lu hjl@sourceware.org
Sat Aug 23 20:57:19 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=833aa67d03a955a8575a361260423d594e9ae24c

commit 833aa67d03a955a8575a361260423d594e9ae24c
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Sat Aug 23 09:35:50 2025 -0700

    x86-64: Use the GOT indirection in no-plt-check1.S
    
    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>

Diff:
---
 ld/testsuite/ld-x86-64/no-plt-1a.dd    | 5 +++--
 ld/testsuite/ld-x86-64/no-plt-1b.dd    | 5 +++--
 ld/testsuite/ld-x86-64/no-plt-1c.dd    | 5 +++--
 ld/testsuite/ld-x86-64/no-plt-1d.dd    | 5 +++--
 ld/testsuite/ld-x86-64/no-plt-1e.dd    | 5 +++--
 ld/testsuite/ld-x86-64/no-plt-1f.dd    | 5 +++--
 ld/testsuite/ld-x86-64/no-plt-1g.dd    | 5 +++--
 ld/testsuite/ld-x86-64/no-plt-check1.S | 6 ++++--
 8 files changed, 25 insertions(+), 16 deletions(-)

diff --git a/ld/testsuite/ld-x86-64/no-plt-1a.dd b/ld/testsuite/ld-x86-64/no-plt-1a.dd
index b1d5d7e491a..89bfaa1f3ac 100644
--- a/ld/testsuite/ld-x86-64/no-plt-1a.dd
+++ b/ld/testsuite/ld-x86-64/no-plt-1a.dd
@@ -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
diff --git a/ld/testsuite/ld-x86-64/no-plt-1b.dd b/ld/testsuite/ld-x86-64/no-plt-1b.dd
index 2ab8da59413..1f430b88e39 100644
--- a/ld/testsuite/ld-x86-64/no-plt-1b.dd
+++ b/ld/testsuite/ld-x86-64/no-plt-1b.dd
@@ -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
diff --git a/ld/testsuite/ld-x86-64/no-plt-1c.dd b/ld/testsuite/ld-x86-64/no-plt-1c.dd
index 1f6ea274ed2..ef772af8a62 100644
--- a/ld/testsuite/ld-x86-64/no-plt-1c.dd
+++ b/ld/testsuite/ld-x86-64/no-plt-1c.dd
@@ -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
diff --git a/ld/testsuite/ld-x86-64/no-plt-1d.dd b/ld/testsuite/ld-x86-64/no-plt-1d.dd
index 49f34ade77d..cd500bd2a71 100644
--- a/ld/testsuite/ld-x86-64/no-plt-1d.dd
+++ b/ld/testsuite/ld-x86-64/no-plt-1d.dd
@@ -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
diff --git a/ld/testsuite/ld-x86-64/no-plt-1e.dd b/ld/testsuite/ld-x86-64/no-plt-1e.dd
index 465574f745b..0180dd3d938 100644
--- a/ld/testsuite/ld-x86-64/no-plt-1e.dd
+++ b/ld/testsuite/ld-x86-64/no-plt-1e.dd
@@ -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
diff --git a/ld/testsuite/ld-x86-64/no-plt-1f.dd b/ld/testsuite/ld-x86-64/no-plt-1f.dd
index 2ab8da59413..1f430b88e39 100644
--- a/ld/testsuite/ld-x86-64/no-plt-1f.dd
+++ b/ld/testsuite/ld-x86-64/no-plt-1f.dd
@@ -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
diff --git a/ld/testsuite/ld-x86-64/no-plt-1g.dd b/ld/testsuite/ld-x86-64/no-plt-1g.dd
index 0526fb0cabd..b6adc0d1181 100644
--- a/ld/testsuite/ld-x86-64/no-plt-1g.dd
+++ b/ld/testsuite/ld-x86-64/no-plt-1g.dd
@@ -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
diff --git a/ld/testsuite/ld-x86-64/no-plt-check1.S b/ld/testsuite/ld-x86-64/no-plt-check1.S
index 61d32b15f8b..4526e5ed334 100644
--- a/ld/testsuite/ld-x86-64/no-plt-check1.S
+++ b/ld/testsuite/ld-x86-64/no-plt-check1.S
@@ -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)


More information about the Binutils-cvs mailing list