This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: [PATCH/RFA] Merge non visibility STO attribute
It looks fine to me. Someone else has to approve it.
H.J.
---
On Tue, Oct 14, 2003 at 04:44:59PM +0900, kaz Kojima wrote:
> "H. J. Lu" <hjl@lucon.org> wrote:
> > Why not
> >
> > if (bed->elf_backend_merge_symbol_attribute)
> > (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition,
> > dynamic);
> >
> > if (isym->st_other != 0 && !dynamic)
> >
> > A target can define elf_backend_merge_symbol_attribute for merging
> > none-visilibity attributes.
>
> It's plausible and looks more uninvasive. Thanks!
> Here is the revised patch.
>
> Regards,
> kaz
> --
> 2003-10-13 Kaz Kojima <kkojima@rr.iij4u.or.jp>
>
> * 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.
>
> diff -u3prN ORIG/src/bfd/elf-bfd.h LOCAL/src/bfd/elf-bfd.h
> --- ORIG/src/bfd/elf-bfd.h Wed Sep 24 14:48:15 2003
> +++ LOCAL/src/bfd/elf-bfd.h Tue Oct 14 07:59:05 2003
> @@ -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 -u3prN ORIG/src/bfd/elflink.h LOCAL/src/bfd/elflink.h
> --- ORIG/src/bfd/elflink.h Sat Oct 11 11:57:08 2003
> +++ LOCAL/src/bfd/elflink.h Tue Oct 14 16:31:16 2003
> @@ -1261,6 +1261,10 @@ elf_link_add_object_symbols (bfd *abfd,
> /* 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 -u3prN ORIG/src/bfd/elfxx-target.h LOCAL/src/bfd/elfxx-target.h
> --- ORIG/src/bfd/elfxx-target.h Fri Aug 8 10:52:29 2003
> +++ LOCAL/src/bfd/elfxx-target.h Tue Oct 14 07:09:44 2003
> @@ -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 elf
> 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,