diff options
author | Alan Modra <amodra@gmail.com> | 2019-09-09 14:29:39 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2019-09-11 13:24:41 +0930 |
commit | 0410b45003d287eb29e9f2b949a29588c663bca1 (patch) | |
tree | 4df5f6493c2ce0c10c49e182dc2b050f7b3d18d3 | |
parent | e9697e24f52b8e3e5ba974f84f3fc64eb99fac00 (diff) | |
download | gdb-0410b45003d287eb29e9f2b949a29588c663bca1.zip gdb-0410b45003d287eb29e9f2b949a29588c663bca1.tar.gz gdb-0410b45003d287eb29e9f2b949a29588c663bca1.tar.bz2 |
Tidy ld/plugin.c
* plugin.c (asymbol_from_plugin_symbol): Move code handling
ELF common symbols to block handling ELF visibility. Simplify
visibility setting.
-rw-r--r-- | ld/ChangeLog | 6 | ||||
-rw-r--r-- | ld/plugin.c | 18 |
2 files changed, 14 insertions, 10 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index a210a37..d24973e 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2019-09-11 Alan Modra <amodra@gmail.com> + + * plugin.c (asymbol_from_plugin_symbol): Move code handling + ELF common symbols to block handling ELF visibility. Simplify + visibility setting. + 2019-09-09 H.J. Lu <hongjiu.lu@intel.com> PR binutils/24887 diff --git a/ld/plugin.c b/ld/plugin.c index 47e5cea..c8ad732 100644 --- a/ld/plugin.c +++ b/ld/plugin.c @@ -403,12 +403,6 @@ asymbol_from_plugin_symbol (bfd *abfd, asymbol *asym, flags = BSF_GLOBAL; section = bfd_com_section_ptr; asym->value = ldsym->size; - /* For ELF targets, set alignment of common symbol to 1. */ - if (bfd_get_flavour (abfd) == bfd_target_elf_flavour) - { - ((elf_symbol_type *) asym)->internal_elf_sym.st_shndx = SHN_COMMON; - ((elf_symbol_type *) asym)->internal_elf_sym.st_value = 1; - } break; default: @@ -417,7 +411,6 @@ asymbol_from_plugin_symbol (bfd *abfd, asymbol *asym, asym->flags = flags; asym->section = section; - /* Visibility only applies on ELF targets. */ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour) { elf_symbol_type *elfsym = elf_symbol_from (abfd, asym); @@ -425,6 +418,13 @@ asymbol_from_plugin_symbol (bfd *abfd, asymbol *asym, if (!elfsym) einfo (_("%F%P: %s: non-ELF symbol in ELF BFD!\n"), asym->name); + + if (ldsym->def == LDPK_COMMON) + { + elfsym->internal_elf_sym.st_shndx = SHN_COMMON; + elfsym->internal_elf_sym.st_value = 1; + } + switch (ldsym->visibility) { default: @@ -445,9 +445,7 @@ asymbol_from_plugin_symbol (bfd *abfd, asymbol *asym, visibility = STV_HIDDEN; break; } - elfsym->internal_elf_sym.st_other - = (visibility | (elfsym->internal_elf_sym.st_other - & ~ELF_ST_VISIBILITY (-1))); + elfsym->internal_elf_sym.st_other |= visibility; } return LDPS_OK; |