aboutsummaryrefslogtreecommitdiff
path: root/bfd/elflink.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2005-01-19 16:15:11 +0000
committerH.J. Lu <hjl.tools@gmail.com>2005-01-19 16:15:11 +0000
commit1c16dfa5fdc5576b3129d29775da52302b72c500 (patch)
tree615eb5ef0ba2f79ffa340e1a485762e05f73faba /bfd/elflink.c
parent8a9de0e488f81e29b62e2ebb7ec4619e4fece4b6 (diff)
downloadgdb-1c16dfa5fdc5576b3129d29775da52302b72c500.zip
gdb-1c16dfa5fdc5576b3129d29775da52302b72c500.tar.gz
gdb-1c16dfa5fdc5576b3129d29775da52302b72c500.tar.bz2
2005-01-19 H.J. Lu <hongjiu.lu@intel.com>
PR 679 * elflink.c (_bfd_elf_dynamic_symbol_p): Only protected non-function symbols are local. (_bfd_elf_symbol_refs_local_p): Likewise.
Diffstat (limited to 'bfd/elflink.c')
-rw-r--r--bfd/elflink.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/bfd/elflink.c b/bfd/elflink.c
index a973cd5..7a02d34 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -2479,7 +2479,7 @@ _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
/* Proper resolution for function pointer equality may require
that these symbols perhaps be resolved dynamically, even though
we should be resolving them to the current module. */
- if (!ignore_protected)
+ if (!ignore_protected || h->type != STT_FUNC)
binding_stays_local_p = TRUE;
break;
@@ -2542,6 +2542,10 @@ _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
if (ELF_ST_VISIBILITY (h->other) != STV_PROTECTED)
return TRUE;
+ /* STV_PROTECTED non-function symbols are local. */
+ if (h->type != STT_FUNC)
+ return TRUE;
+
/* Function pointer equality tests may require that STV_PROTECTED
symbols be treated as dynamic symbols, even when we know that the
dynamic linker will resolve them locally. */