* elflink.c (_bfd_elf_dynamic_symbol_p): Rename param. Make

common syms local.
	(_bfd_elf_symbol_refs_local_p): Expand comment.
	(elf_link_output_extsym): Fix style nit.
This commit is contained in:
Alan Modra
2010-08-28 04:04:16 +00:00
parent 400971588d
commit 89a2ee5a08
2 changed files with 20 additions and 5 deletions

View File

@ -1,3 +1,10 @@
2010-08-28 Alan Modra <amodra@gmail.com>
* elflink.c (_bfd_elf_dynamic_symbol_p): Rename param. Make
common syms local.
(_bfd_elf_symbol_refs_local_p): Expand comment.
(elf_link_output_extsym): Fix style nit.
2010-08-26 Nathan Sidwell <nathan@codesourcery.com> 2010-08-26 Nathan Sidwell <nathan@codesourcery.com>
* elf32-arm.c (elf32_arm_final_link): Process stub sections * elf32-arm.c (elf32_arm_final_link): Process stub sections

View File

@ -2770,7 +2770,7 @@ _bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data)
bfd_boolean bfd_boolean
_bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h, _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
struct bfd_link_info *info, struct bfd_link_info *info,
bfd_boolean ignore_protected) bfd_boolean not_local_protected)
{ {
bfd_boolean binding_stays_local_p; bfd_boolean binding_stays_local_p;
const struct elf_backend_data *bed; const struct elf_backend_data *bed;
@ -2809,7 +2809,7 @@ _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
/* Proper resolution for function pointer equality may require /* Proper resolution for function pointer equality may require
that these symbols perhaps be resolved dynamically, even though that these symbols perhaps be resolved dynamically, even though
we should be resolving them to the current module. */ we should be resolving them to the current module. */
if (!ignore_protected || !bed->is_function_type (h->type)) if (!not_local_protected || !bed->is_function_type (h->type))
binding_stays_local_p = TRUE; binding_stays_local_p = TRUE;
break; break;
@ -2818,7 +2818,7 @@ _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
} }
/* If it isn't defined locally, then clearly it's dynamic. */ /* If it isn't defined locally, then clearly it's dynamic. */
if (!h->def_regular) if (!h->def_regular && !ELF_COMMON_DEF_P (h))
return TRUE; return TRUE;
/* Otherwise, the symbol is dynamic if binding rules don't tell /* Otherwise, the symbol is dynamic if binding rules don't tell
@ -2829,7 +2829,15 @@ _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
/* Return true if the symbol referred to by H should be considered /* Return true if the symbol referred to by H should be considered
to resolve local to the current module, and false otherwise. Differs to resolve local to the current module, and false otherwise. Differs
from (the inverse of) _bfd_elf_dynamic_symbol_p in the treatment of from (the inverse of) _bfd_elf_dynamic_symbol_p in the treatment of
undefined symbols and weak symbols. */ undefined symbols. The two functions are vitually identical except
for the place where forced_local and dynindx == -1 are tested. If
either of those tests are true, _bfd_elf_dynamic_symbol_p will say
the symbol is local, while _bfd_elf_symbol_refs_local_p will say
the symbol is local only for defined symbols.
It might seem that _bfd_elf_dynamic_symbol_p could be rewritten as
!_bfd_elf_symbol_refs_local_p, except that targets differ in their
treatment of undefined weak symbols. For those that do not make
undefined weak symbols dynamic, both functions may return false. */
bfd_boolean bfd_boolean
_bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h, _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
@ -8635,7 +8643,7 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
ignore_undef = bed->elf_backend_ignore_undef_symbol (h); ignore_undef = bed->elf_backend_ignore_undef_symbol (h);
/* If we are reporting errors for this situation then do so now. */ /* If we are reporting errors for this situation then do so now. */
if (ignore_undef == FALSE if (!ignore_undef
&& h->ref_dynamic && h->ref_dynamic
&& (!h->ref_regular || finfo->info->gc_sections) && (!h->ref_regular || finfo->info->gc_sections)
&& ! elf_link_check_versioned_symbol (finfo->info, bed, h) && ! elf_link_check_versioned_symbol (finfo->info, bed, h)