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 --git a/ld/testsuite/ld-x86-64/no-plt-1a.dd b/ld/testsuite/ld-x86-64/no-plt-1a.dd
index b1d5d7e..89bfaa1 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 @@
+[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 2ab8da5..1f430b8 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 @@
+[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 1f6ea27..ef772af 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 @@
+[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 49f34ad..cd500bd 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 @@
+[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 465574f..0180dd3 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 @@
+[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 2ab8da5..1f430b8 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 @@
+[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 0526fb0..b6adc0d 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 @@
+[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 61d32b1..4526e5e 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 @@
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)