summaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2010-01-08 03:03:15 +0000
committerH.J. Lu <hjl.tools@gmail.com>2010-01-08 03:03:15 +0000
commit6963b41523a1042367485dd05b7f1af995506280 (patch)
tree16efa1dcb0c7ab73576b98bb3d1761622909edcd /bfd
parent6bf43254b9653f4d9b93506b651b89686772f34e (diff)
downloadbinutils-redhat-6963b41523a1042367485dd05b7f1af995506280.tar.gz
Fix PR ld/11138
bfd/ 2010-01-07 H.J. Lu <hongjiu.lu@intel.com> PR ld/11138 * elflink.c (elf_link_check_versioned_symbol): Don't abort if a symbol referenced by DSO is is defined in a non-shared object and forced local. ld/testsuite/ 2010-01-07 H.J. Lu <hongjiu.lu@intel.com> PR ld/11138 * ld-elf/pr11138-1.c: New. * ld-elf/pr11138-1.map: Likewise. * ld-elf/pr11138-2.c: Likewise. * ld-elf/pr11138-2.map: Likewise. * ld-elf/pr11138.out: Likewise. * ld-elf/shared.exp (build_tests): Add libpr11138-1.so and libpr11138-2.o. (run_tests): Add 2 tests for PR ld/11138.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/elflink.c8
2 files changed, 13 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 0f2e0e4dc1..b9a32c49a8 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,12 @@
2010-01-07 H.J. Lu <hongjiu.lu@intel.com>
+ PR ld/11138
+ * elflink.c (elf_link_check_versioned_symbol): Don't abort if
+ a symbol referenced by DSO is is defined in a non-shared object
+ and forced local.
+
+2010-01-07 H.J. Lu <hongjiu.lu@intel.com>
+
PR ld/11133
* elflink.c (_bfd_elf_gc_mark_hook): Check section XXX for
undefined __start_XXX/__stop_XXX in all input files and set
diff --git a/bfd/elflink.c b/bfd/elflink.c
index f9f804de73..24d870299a 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -8492,10 +8492,14 @@ elf_link_check_versioned_symbol (struct bfd_link_info *info,
_bfd_elf_swap_versym_in (input, ever, &iver);
- if ((iver.vs_vers & VERSYM_HIDDEN) == 0)
+ if ((iver.vs_vers & VERSYM_HIDDEN) == 0
+ && !(h->def_regular
+ && h->forced_local))
{
/* If we have a non-hidden versioned sym, then it should
- have provided a definition for the undefined sym. */
+ have provided a definition for the undefined sym unless
+ it is defined in a non-shared object and forced local.
+ */
abort ();
}