From 22ef172a21663abb477d72284b4d59c8eabcbb82 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 21 Jan 2014 05:33:48 -0800 Subject: [PATCH] Don't check shared/export_dynamic/ref_dynamic for type mismatch There is nothing linker can do when a type mismatched default definition are made dynamic by info->shared, info->export_dynamic or h->ref_dynamic. But we do want to avoid exporting it when building PIE. Let's remove those checks. bfd/ PR ld/2404 * elflink.c (_bfd_elf_merge_symbol): Don't check info->shared, info->export_dynamic, nor !h->ref_dynamic for type mismatch when adding the default version. ld/testsuite/ PR ld/2404 * ld-elf/shared.exp: Add a PIE test for PR ld/2404. --- bfd/ChangeLog | 7 +++++++ bfd/elflink.c | 3 --- ld/testsuite/ChangeLog | 5 +++++ ld/testsuite/ld-elf/shared.exp | 26 ++++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 6e1e334189b..5923bc39742 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2014-01-21 H.J. Lu + + PR ld/2404 + * elflink.c (_bfd_elf_merge_symbol): Don't check info->shared, + info->export_dynamic nor h->ref_dynamic for type mismatch when + adding the default version. + 2014-01-16 Alan Modra * elfxx-mips.c (mips_elf_record_got_page_entry): Pass in a diff --git a/bfd/elflink.c b/bfd/elflink.c index 7dcafd67f1e..8ba0888c19a 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -1090,9 +1090,6 @@ _bfd_elf_merge_symbol (bfd *abfd, the type of existing regular definition mismatch. We only do it if the existing regular definition won't be dynamic. */ if (pold_alignment == NULL - && !info->shared - && !info->export_dynamic - && !h->ref_dynamic && newdyn && newdef && !olddyn diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 84729b6cee4..ac65a3a5d1d 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-01-21 H.J. Lu + + PR ld/2404 + * ld-elf/shared.exp: Add a PIE test for PR ld/2404. + 2014-01-20 H.J. Lu PR ld/2404 diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp index afc262c184c..bbfd464574e 100644 --- a/ld/testsuite/ld-elf/shared.exp +++ b/ld/testsuite/ld-elf/shared.exp @@ -453,3 +453,29 @@ set run_cxx_tests { run_cc_link_tests $build_cxx_tests run_ld_link_exec_tests [] $run_cxx_tests + +if { [istarget *-*-linux*] + || [istarget *-*-nacl*] + || [istarget *-*-gnu*] } { + run_cc_link_tests [list \ + [list \ + "Build libpr2404b.a with PIE" \ + "" \ + "-fPIE" \ + { pr2404b.c } \ + {} \ + "libpr2404b.a" \ + ] \ + ] + run_ld_link_exec_tests [] [list \ + [list \ + "Run pr2404 with PIE" \ + "-pie tmpdir/pr2404b.o tmpdir/libpr2404a.so" \ + "" \ + { dummy.c } \ + "pr2404pie" \ + "pr2404.out" \ + "-fPIE" \ + ] \ + ] +} -- 2.30.2