* elflink.c (elf_smash_syms): Expand comments.

(elf_link_add_object_symbols): Only call elf_smash_syms for
	as-needed dynamic objects.
This commit is contained in:
Alan Modra
2005-02-02 02:36:35 +00:00
parent 336549c1f5
commit ec13b3bb1f
2 changed files with 18 additions and 6 deletions

View File

@ -1,5 +1,9 @@
2005-02-02 Alan Modra <amodra@bigpond.net.au>
* elflink.c (elf_smash_syms): Expand comments.
(elf_link_add_object_symbols): Only call elf_smash_syms for
as-needed dynamic objects.
* elfxx-ia64.c (elfNN_ia64_new_elf_hash_entry): Don't clear
everything, just the field specific to ia64.
* elf64-hppa.c (elf64_hppa_new_dyn_hash_entry): Likewise.
@ -93,7 +97,7 @@
* elf32-arm.c (elf32_arm_symbian_special_sections): Do not set
SHF_WRITE for .init_array, .fini_array, and .preinit_array.
2005-01-31 Nick Clifton <nickc@redhat.com>
* confg.bfd: Make targets scheduled for obsoletion (m68k-lynxos,
@ -115,9 +119,9 @@
* bin-in2.h (bfd_elf32_arm_set_target_relocs): Update prototype.
* elf32-arm.c (elf32_arm_link_hash_table): Add fix_v4bx flag.
(bfd_elf32_arm_set_target_relocs): Add formal parameter fix_v4bx for
passing flag value from ld. Set flag value in global hash table entry.
passing flag value from ld. Set flag value in global hash table entry.
(elf32_arm_final_link_relocate): Add code to implement R_ARM_V4BX
relocation.
relocation.
2005-01-27 Andrew Cagney <cagney@gnu.org>
@ -126,7 +130,7 @@
2005-01-25 Mark Mitchell <mark@codesourcery.com>
* elf32-arm.c (elf_backend_default_use_rela_p): Define to zero for
SymbianOS.
SymbianOS.
2005-01-25 Alexandre Oliva <aoliva@redhat.com>

View File

@ -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;