This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] x86-64: Limit PIC check to shared library build


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

commit c5bb8910e80c6cd80c63541f86471c18375c8198
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Jul 17 12:17:59 2017 -0700

    x86-64: Limit PIC check to shared library build
    
    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.

Diff:
---
 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(-)

diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 79bc9fb..3658df4 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 0000000..59f5e3e
--- /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 0000000..a200deb
--- /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 0000000..72914d9
--- /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 9b83e1c..c582582 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"


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]