aboutsummaryrefslogtreecommitdiff
path: root/bfd/elflink.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2005-02-02 02:36:35 +0000
committerAlan Modra <amodra@gmail.com>2005-02-02 02:36:35 +0000
commitec13b3bb1f3ba22763e9ea1b0b1cecd1dbc74652 (patch)
tree4bd21c40707e1e1a250462aa455a864c756a69aa /bfd/elflink.c
parent336549c1f5f607f216a31f10511566f7939e0287 (diff)
downloadgdb-ec13b3bb1f3ba22763e9ea1b0b1cecd1dbc74652.zip
gdb-ec13b3bb1f3ba22763e9ea1b0b1cecd1dbc74652.tar.gz
gdb-ec13b3bb1f3ba22763e9ea1b0b1cecd1dbc74652.tar.bz2
* elflink.c (elf_smash_syms): Expand comments.
(elf_link_add_object_symbols): Only call elf_smash_syms for as-needed dynamic objects.
Diffstat (limited to 'bfd/elflink.c')
-rw-r--r--bfd/elflink.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 9d07c4c..0e8bff4 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -2815,7 +2815,12 @@ elf_add_dt_needed_tag (bfd *abfd,
/* Called via elf_link_hash_traverse, elf_smash_syms sets all symbols
belonging to NOT_NEEDED to bfd_link_hash_new. We know there are no
- references to these symbols. */
+ references from regular objects to these symbols.
+
+ ??? Should we do something about references from other dynamic
+ obects? If not, we potentially lose some warnings about undefined
+ symbols. But how can we recover the initial undefined / undefweak
+ state? */
struct elf_smash_syms_data
{
@@ -4094,8 +4099,11 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
free (isymbuf);
isymbuf = NULL;
- if (!add_needed)
+ if (!add_needed
+ && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
{
+ /* Remove symbols defined in an as-needed shared lib that wasn't
+ needed. */
struct elf_smash_syms_data inf;
inf.not_needed = abfd;
inf.htab = hash_table;