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.
This commit is contained in:
H.J. Lu 2017-07-17 12:17:59 -07:00
parent 1d550c828c
commit c5bb8910e8
5 changed files with 35 additions and 3 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,5 @@
.text
.global _start
.weak foo
_start:
leaq foo(%rip), %rax

View File

@ -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"