diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2010-01-08 03:03:15 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2010-01-08 03:03:15 +0000 |
commit | 6963b41523a1042367485dd05b7f1af995506280 (patch) | |
tree | 16efa1dcb0c7ab73576b98bb3d1761622909edcd /bfd | |
parent | 6bf43254b9653f4d9b93506b651b89686772f34e (diff) | |
download | binutils-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/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/elflink.c | 8 |
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 (); } |