* elf32-mips.c, elf64-mips.c, elfn32-mips.c
(elf_backend_merge_symbol_attribute): Define. * elflink.c (elf_link_add_object_symbols): Merge only the ELF visibility flags. * elfxx-mips.c (_bfd_mips_elf_merge_symbol_attribute): New function.
This commit is contained in:
parent
4be041b2db
commit
8992f0d7c2
@ -1,3 +1,12 @@
|
||||
2006-08-15 Thiemo Seufer <ths@mips.com>
|
||||
Nigel Stephens <nigel@mips.com>
|
||||
|
||||
* elf32-mips.c, elf64-mips.c, elfn32-mips.c
|
||||
(elf_backend_merge_symbol_attribute): Define.
|
||||
* elflink.c (elf_link_add_object_symbols): Merge only the ELF
|
||||
visibility flags.
|
||||
* elfxx-mips.c (_bfd_mips_elf_merge_symbol_attribute): New function.
|
||||
|
||||
2006-08-15 Thiemo Seufer <ths@mips.com>
|
||||
Nigel Stephens <nigel@mips.com>
|
||||
David Ung <davidu@mips.com>
|
||||
|
@ -1505,6 +1505,8 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
|
||||
#define elf_backend_create_dynamic_sections \
|
||||
_bfd_mips_elf_create_dynamic_sections
|
||||
#define elf_backend_check_relocs _bfd_mips_elf_check_relocs
|
||||
#define elf_backend_merge_symbol_attribute \
|
||||
_bfd_mips_elf_merge_symbol_attribute
|
||||
#define elf_backend_adjust_dynamic_symbol \
|
||||
_bfd_mips_elf_adjust_dynamic_symbol
|
||||
#define elf_backend_always_size_sections \
|
||||
|
@ -3026,6 +3026,8 @@ const struct elf_size_info mips_elf64_size_info =
|
||||
#define elf_backend_create_dynamic_sections \
|
||||
_bfd_mips_elf_create_dynamic_sections
|
||||
#define elf_backend_check_relocs _bfd_mips_elf_check_relocs
|
||||
#define elf_backend_merge_symbol_attribute \
|
||||
_bfd_mips_elf_merge_symbol_attribute
|
||||
#define elf_backend_adjust_dynamic_symbol \
|
||||
_bfd_mips_elf_adjust_dynamic_symbol
|
||||
#define elf_backend_always_size_sections \
|
||||
|
@ -4058,13 +4058,13 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
|
||||
isym->st_other = (STV_HIDDEN
|
||||
| (isym->st_other & ~ELF_ST_VISIBILITY (-1)));
|
||||
|
||||
if (isym->st_other != 0 && !dynamic)
|
||||
if (ELF_ST_VISIBILITY (isym->st_other) != 0 && !dynamic)
|
||||
{
|
||||
unsigned char hvis, symvis, other, nvis;
|
||||
|
||||
/* Take the balance of OTHER from the definition. */
|
||||
other = (definition ? isym->st_other : h->other);
|
||||
other &= ~ ELF_ST_VISIBILITY (-1);
|
||||
/* Only merge the visibility. Leave the remainder of the
|
||||
st_other field to elf_backend_merge_symbol_attribute. */
|
||||
other = h->other & ~ELF_ST_VISIBILITY (-1);
|
||||
|
||||
/* Combine visibilities, using the most constraining one. */
|
||||
hvis = ELF_ST_VISIBILITY (h->other);
|
||||
|
@ -2293,6 +2293,8 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
|
||||
#define elf_backend_create_dynamic_sections \
|
||||
_bfd_mips_elf_create_dynamic_sections
|
||||
#define elf_backend_check_relocs _bfd_mips_elf_check_relocs
|
||||
#define elf_backend_merge_symbol_attribute \
|
||||
_bfd_mips_elf_merge_symbol_attribute
|
||||
#define elf_backend_adjust_dynamic_symbol \
|
||||
_bfd_mips_elf_adjust_dynamic_symbol
|
||||
#define elf_backend_always_size_sections \
|
||||
|
@ -11115,15 +11115,25 @@ const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
|
||||
{ NULL, 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
/* Ensure that the STO_OPTIONAL flag is copied into h->other,
|
||||
even if this is not a defintion of the symbol. */
|
||||
/* Merge non visibility st_other attributes. Ensure that the
|
||||
STO_OPTIONAL flag is copied into h->other, even if this is not a
|
||||
definiton of the symbol. */
|
||||
void
|
||||
_bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
|
||||
const Elf_Internal_Sym *isym,
|
||||
bfd_boolean definition,
|
||||
bfd_boolean dynamic ATTRIBUTE_UNUSED)
|
||||
{
|
||||
if (! definition
|
||||
if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
|
||||
{
|
||||
unsigned char other;
|
||||
|
||||
other = (definition ? isym->st_other : h->other);
|
||||
other &= ~ELF_ST_VISIBILITY (-1);
|
||||
h->other = other | ELF_ST_VISIBILITY (h->other);
|
||||
}
|
||||
|
||||
if (!definition
|
||||
&& ELF_MIPS_IS_OPTIONAL (isym->st_other))
|
||||
h->other |= STO_OPTIONAL;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user