diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-05-27 14:32:24 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-05-27 14:32:24 -0700 |
commit | 8ded2ddc8bac501c1ee0706cb3d3ef3fb1c10b85 (patch) | |
tree | e9aa707387d1a08ca901853b0b1887839590338e /ld | |
parent | 924c2928ae3f7a9fa1130103e6a83ff2b1ff17dd (diff) | |
download | fsf-binutils-gdb-8ded2ddc8bac501c1ee0706cb3d3ef3fb1c10b85.zip fsf-binutils-gdb-8ded2ddc8bac501c1ee0706cb3d3ef3fb1c10b85.tar.gz fsf-binutils-gdb-8ded2ddc8bac501c1ee0706cb3d3ef3fb1c10b85.tar.bz2 |
Convert PLT reloc only if pointer equality isn't needed
When pointer equality needed, we can't replace PLT relocations with
GOT relocations for -z now. This patch checks if pointer equality is
needed before converting PLT relocations to GOT relocations.
bfd/
PR binutils/18458
* elf32-i386.c (elf_i386_check_relocs): Create .plt.got section
for now binding only if pointer equality isn't needed.
(elf_i386_allocate_dynrelocs): Use .plt.got section for now
binding only if pointer equality isn't needed.
* elf64-x86-64.c (elf_x86_64_check_relocs): Create .plt.got
section for now binding only if pointer equality isn't needed.
(elf_x86_64_allocate_dynrelocs): Use .plt.got section for now
binding only if pointer equality isn't needed.
ld/testsuite/
PR binutils/18458
* ld-elf/shared.exp (build_tests): Build libpr18458a.so and
libpr18458b.so.
(run_tests): Run pr18458 test.
* ld-elf/pr18458a.c: New file.
* ld-elf/pr18458b.c: Likewise.
* ld-elf/pr18458c.c: Likewise.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/testsuite/ChangeLog | 10 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/pr18458a.c | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/pr18458b.c | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/pr18458c.c | 18 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/shared.exp | 9 |
5 files changed, 49 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index e6a551c..779fc03 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2015-05-27 H.J. Lu <hongjiu.lu@intel.com> + + PR binutils/18458 + * ld-elf/shared.exp (build_tests): Build libpr18458a.so and + libpr18458b.so. + (run_tests): Run pr18458 test. + * ld-elf/pr18458a.c: New file. + * ld-elf/pr18458b.c: Likewise. + * ld-elf/pr18458c.c: Likewise. + 2015-05-16 H.J. Lu <hongjiu.lu@intel.com> * ld-i386/i386.exp: Run PR ld/17689 tests with -z now. diff --git a/ld/testsuite/ld-elf/pr18458a.c b/ld/testsuite/ld-elf/pr18458a.c new file mode 100644 index 0000000..d6aa49f --- /dev/null +++ b/ld/testsuite/ld-elf/pr18458a.c @@ -0,0 +1,6 @@ +#include <stdio.h> +void +a (void) +{ + printf("PASS\n"); +} diff --git a/ld/testsuite/ld-elf/pr18458b.c b/ld/testsuite/ld-elf/pr18458b.c new file mode 100644 index 0000000..33c1cb6 --- /dev/null +++ b/ld/testsuite/ld-elf/pr18458b.c @@ -0,0 +1,6 @@ +extern void a (void); +void +b (void) +{ + a(); +} diff --git a/ld/testsuite/ld-elf/pr18458c.c b/ld/testsuite/ld-elf/pr18458c.c new file mode 100644 index 0000000..d40f98c --- /dev/null +++ b/ld/testsuite/ld-elf/pr18458c.c @@ -0,0 +1,18 @@ +extern void a(void); +extern void b(void); + +void dummy (void) +{ + a(); +} +int +compare (void (*f)(void)) +{ + return a == f; +} +int +main (void) +{ + b (); + return 0; +} diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp index 8aa7a32..bcbe8e2 100644 --- a/ld/testsuite/ld-elf/shared.exp +++ b/ld/testsuite/ld-elf/shared.exp @@ -267,6 +267,12 @@ set build_tests { {"Build pr16457" "tmpdir/libpr16452b.so -Wl,-rpath=tmpdir" "" {pr16452b.c} {{objdump {-p} pr16457.od}} "pr16457"} + {"Build libpr18458a.so" + "-shared -Wl,-z,now" "-fPIC" + {pr18458a.c} {} "libpr18458a.so"} + {"Build libpr18458b.so" + "-shared -Wl,-z,now tmpdir/libpr18458a.so" "-fPIC" + {pr18458b.c} {} "libpr18458b.so"} } run_cc_link_tests $build_tests @@ -417,6 +423,9 @@ set run_tests { {"Run pr2404" "tmpdir/pr2404b.o tmpdir/libpr2404a.so" "" {dummy.c} "pr2404" "pr2404.out"} + {"Run pr18458" + "tmpdir/libpr18458a.so tmpdir/libpr18458b.so -z now" "" + {pr18458c.c} "pr18458" "pass.out"} } # NetBSD ELF systems do not currently support the .*_array sections. |