A patch for elflink.h
H . J . Lu
hjl@lucon.org
Fri Apr 27 10:31:00 GMT 2001
Thanks for the bug report. I believe this patch fixes it. I will check
it in shortly and I will make binutils 2.11.90.0.7 this weekend. I am
also enclosing a testcase here.
H.J.
----
2001-04-27 H.J. Lu <hjl@gnu.org>
* elflink.h (elf_fix_symbol_flags): Hide a symbol if and only
if the symbol has hidden or internal visibility.
Index: elflink.h
===================================================================
RCS file: /cvs/src/src/bfd/elflink.h,v
retrieving revision 1.85
diff -u -p -r1.85 elflink.h
--- elflink.h 2001/04/13 00:34:35 1.85
+++ elflink.h 2001/04/27 17:13:44
@@ -3528,20 +3528,28 @@ elf_fix_symbol_flags (h, eif)
symbols to the definition within the shared object), and this
symbol was defined in a regular object, then it actually doesn't
need a PLT entry, and we can accomplish that by forcing it local.
- Likewise, if the symbol has hidden or internal visibility.
+ Likewise, if the symbol has hidden or internal visibility. We
+ hide a symbol if and only if the symbol has hidden or internal
+ visibility.
FIXME: It might be that we also do not need a PLT for other
non-hidden visibilities, but we would have to tell that to the
backend specifically; we can't just clear PLT-related data here. */
if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0
&& eif->info->shared
- && (eif->info->symbolic
- || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
- || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
&& (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
{
- struct elf_backend_data *bed;
- bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
- (*bed->elf_backend_hide_symbol) (eif->info, h);
+ if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
+ || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
+ {
+ struct elf_backend_data *bed;
+ bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
+ (*bed->elf_backend_hide_symbol) (eif->info, h);
+ }
+ else if (eif->info->symbolic)
+ {
+ h->elf_link_hash_flags &=~ ELF_LINK_HASH_NEEDS_PLT;
+ h->plt.offset = (bfd_vma) -1;
+ }
}
/* If this is a weak defined symbol in a dynamic object, and we know
-------------- next part --------------
A non-text attachment was scrubbed...
Name: symbolic.tar.gz
Type: application/x-gzip
Size: 447 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20010427/2f87f1b7/attachment.bin>
More information about the Binutils
mailing list