* config/obj-elf.c (obj_elf_type): Add code to support a type of
gnu_unique_object. * doc/as.texinfo: Document new feature of .type directive. * NEWS: Mention support for gnu_unique_object symbol type. * common.h (STB_GNU_UNIQUE): Define. * NEWS: Mention the linker's support for symbols with a binding of STB_GNU_UNIQUE. * gas/elf/type.s: Add unique global symbol definition. * gas/elf/type.e: Add expected readelf output for global unique symbol. * elfcpp.h (enum STB): Add STB_GNU_UNIQUE. * readelf.c (get_symbol_binding): For Linux targeted files return UNIQUE for symbols with the STB_GNU_UNIQUE binding. * doc/binutils.texi: Document the meaning of the 'u' symbol binding in the output of nm and objdump --syms. * elf-bfd.h (struct elf_link_hash_entry): Add unique_global field. * elf.c (swap_out_syms): Set binding to STB_GNU_UNIQUE for symbols with the BSF_GNU_UNIQUE flag bit set. * elfcode.h (elf_slurp_symbol_table): Set the BSF_GNU_UNIQUE flag for symbols with STB_GNU_UNIQUE binding. * elflink.c (_bfd_elf_merge_symbol): Set unique_global for symbols with the STB_GNU_UNIQUE binding. (elf_link_add_object_symbols): Set the BSF_GNU_UNIQUE flag for symbols with STB_GNU_UNIQUE binding. Set STB_GNU_UNIQUE for symbols with the unique_global field set. (elf_link_output_extsym): Set unique_global field for symbols with the STB_GNU_UNIQUE binding. * syms.c (struct bfd_symbol): Define BSF_GNU_UNIQUE flag bit. (bfd_print_symbol_vandf): Print a 'u' character for BSF_GNU_UNIQUE symbols. (bfd_decode_symclass): Return a 'u' character for BSF_GNU_UNIQUE symbols. * bfd-in2.h: Regenerate.
This commit is contained in:
parent
6ec8e7022b
commit
3e7a7d11f1
23 changed files with 167 additions and 18 deletions
|
@ -6902,7 +6902,14 @@ get_symbol_binding (unsigned int binding)
|
|||
snprintf (buff, sizeof (buff), _("<processor specific>: %d"),
|
||||
binding);
|
||||
else if (binding >= STB_LOOS && binding <= STB_HIOS)
|
||||
snprintf (buff, sizeof (buff), _("<OS specific>: %d"), binding);
|
||||
{
|
||||
if (binding == STB_GNU_UNIQUE
|
||||
&& (elf_header.e_ident[EI_OSABI] == ELFOSABI_LINUX
|
||||
/* GNU/Linux is still using the default value 0. */
|
||||
|| elf_header.e_ident[EI_OSABI] == ELFOSABI_NONE))
|
||||
return "UNIQUE";
|
||||
snprintf (buff, sizeof (buff), _("<OS specific>: %d"), binding);
|
||||
}
|
||||
else
|
||||
snprintf (buff, sizeof (buff), _("<unknown>: %d"), binding);
|
||||
return buff;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue