[committed, PATCH] x86-64: Limit PIC check to shared library build

H.J. Lu hongjiu.lu@intel.com
Mon Jul 17 19:19:00 GMT 2017


When building an executable, undefined symbols are error and undefined
weak symbols are resolved to zero.  We only need to check PIC for
building a shared library.

bfd/

	PR ld/21782
	* elf64-x86-64.c (elf_x86_64_relocate_section): Limit PIC check
	to shared library.

ld/

	PR ld/21782
	* testsuite/ld-x86-64/pie3-nacl.d: New file.
	* testsuite/ld-x86-64/pie3.d: Likewise.
	* testsuite/ld-x86-64/pie3.s: Likewise.
	* testsuite/ld-x86-64/x86-64.exp: Run pie3 and pie3-nacl.
---
 bfd/elf64-x86-64.c                 |  4 +---
 ld/testsuite/ld-x86-64/pie3-nacl.d | 14 ++++++++++++++
 ld/testsuite/ld-x86-64/pie3.d      | 13 +++++++++++++
 ld/testsuite/ld-x86-64/pie3.s      |  5 +++++
 ld/testsuite/ld-x86-64/x86-64.exp  |  2 ++
 5 files changed, 35 insertions(+), 3 deletions(-)
 create mode 100644 ld/testsuite/ld-x86-64/pie3-nacl.d
 create mode 100644 ld/testsuite/ld-x86-64/pie3.d
 create mode 100644 ld/testsuite/ld-x86-64/pie3.s

diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 79bc9fbecf..3658df4562 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -4968,9 +4968,7 @@ do_ifunc_pointer:
 	      && ((bfd_link_executable (info)
 		   && h->root.type == bfd_link_hash_undefweak
 		   && !resolved_to_zero)
-		  || (bfd_link_pic (info)
-		      && !(bfd_link_pie (info)
-			   && h->root.type == bfd_link_hash_undefined))))
+		  || bfd_link_dll (info)))
 	    {
 	      bfd_boolean fail = FALSE;
 	      bfd_boolean branch
diff --git a/ld/testsuite/ld-x86-64/pie3-nacl.d b/ld/testsuite/ld-x86-64/pie3-nacl.d
new file mode 100644
index 0000000000..59f5e3e020
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/pie3-nacl.d
@@ -0,0 +1,14 @@
+#source: pie3.s
+#as: --64
+#ld: -pie -melf_x86_64
+#objdump: -dw
+#target: x86_64-*-nacl*
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+0+ <_start>:
+ +0:	48 8d 05 f9 ff ff ff 	lea    -0x7\(%rip\),%rax        # 0 <_start>
+#pass
diff --git a/ld/testsuite/ld-x86-64/pie3.d b/ld/testsuite/ld-x86-64/pie3.d
new file mode 100644
index 0000000000..a200deb32e
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/pie3.d
@@ -0,0 +1,13 @@
+#as: --64
+#ld: -pie -melf_x86_64
+#objdump: -dw
+#notarget: x86_64-*-nacl*
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+0+191 <_start>:
+ +191:	48 8d 05 68 fe ff ff 	lea    -0x198\(%rip\),%rax        # 0 <_start-0x191>
+#pass
diff --git a/ld/testsuite/ld-x86-64/pie3.s b/ld/testsuite/ld-x86-64/pie3.s
new file mode 100644
index 0000000000..72914d9134
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/pie3.s
@@ -0,0 +1,5 @@
+	.text
+	.global _start
+	.weak foo
+_start:
+	leaq	foo(%rip), %rax
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
index 9b83e1c5ce..c582582297 100644
--- a/ld/testsuite/ld-x86-64/x86-64.exp
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
@@ -310,6 +310,8 @@ run_dump_test "pr14207"
 run_dump_test "gotplt1"
 run_dump_test "pie1"
 run_dump_test "pie2"
+run_dump_test "pie3"
+run_dump_test "pie3-nacl"
 run_dump_test "pic1"
 run_dump_test "largecomm-1a"
 run_dump_test "largecomm-1b"
-- 
2.13.0



More information about the Binutils mailing list