diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 235bc66655..d41c0a611c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,12 @@ +2003-10-14 Kaz Kojima + + * elf-bfd.h (struct elf_backend_data): New function pointer member + elf_backend_merge_symbol_attribute. + * elflink.h (elf_link_add_object_symbols): Adjust call to + elf_backend_merge_symbol_attribute if the backend defined it. + * elfxx-target.h (elf_backend_merge_symbol_attribute): New macro. + (elfNN_bed): Add that to the initializer. + 2003-10-14 Bob Wilson * elf32-xtensa.c (get_is_linkonce_section): Delete. diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index 99036949ad..bf73762ada 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -813,6 +813,11 @@ struct elf_backend_data void (*elf_backend_hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean); + /* Merge the backend specific symbol attribute. */ + void (*elf_backend_merge_symbol_attribute) + (struct elf_link_hash_entry *, const Elf_Internal_Sym *, bfd_boolean, + bfd_boolean); + /* Emit relocations. Overrides default routine for emitting relocs, except during a relocatable link, or if all relocs are being emitted. */ bfd_boolean (*elf_backend_emit_relocs) diff --git a/bfd/elflink.h b/bfd/elflink.h index bd94cbf4fc..71fdbaa303 100644 --- a/bfd/elflink.h +++ b/bfd/elflink.h @@ -1261,6 +1261,10 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) /* If st_other has a processor-specific meaning, specific code might be needed here. We never merge the visibility attribute with the one from a dynamic object. */ + if (bed->elf_backend_merge_symbol_attribute) + (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition, + dynamic); + if (isym->st_other != 0 && !dynamic) { unsigned char hvis, symvis, other, nvis; diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h index 544f8f3647..2d1e5e2572 100644 --- a/bfd/elfxx-target.h +++ b/bfd/elfxx-target.h @@ -361,6 +361,9 @@ #ifndef elf_backend_hide_symbol #define elf_backend_hide_symbol _bfd_elf_link_hash_hide_symbol #endif +#ifndef elf_backend_merge_symbol_attribute +#define elf_backend_merge_symbol_attribute NULL +#endif #ifndef elf_backend_emit_relocs #define elf_backend_emit_relocs NULL #endif @@ -483,6 +486,7 @@ static const struct elf_backend_data elfNN_bed = elf_backend_output_arch_syms, elf_backend_copy_indirect_symbol, elf_backend_hide_symbol, + elf_backend_merge_symbol_attribute, elf_backend_emit_relocs, elf_backend_count_relocs, elf_backend_grok_prstatus,