diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-07-17 12:17:59 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-07-17 12:17:59 -0700 |
commit | c5bb8910e80c6cd80c63541f86471c18375c8198 (patch) | |
tree | b5a5700669844bb7176eb26624c094b070021a68 | |
parent | 1d550c828c00978860de9ba35b9ab5b182b968bc (diff) | |
download | gdb-c5bb8910e80c6cd80c63541f86471c18375c8198.zip gdb-c5bb8910e80c6cd80c63541f86471c18375c8198.tar.gz gdb-c5bb8910e80c6cd80c63541f86471c18375c8198.tar.bz2 |
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.
-rw-r--r-- | bfd/elf64-x86-64.c | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/pie3-nacl.d | 14 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/pie3.d | 13 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/pie3.s | 5 | ||||
-rw-r--r-- | 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" |