aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>2009-12-30 08:29:37 +0000
committerIan Lance Taylor <ian@airs.com>2009-12-30 08:29:37 +0000
commit176fe33f0d2b5c96ea89acba35b684757bdf6e52 (patch)
tree30897a025b15b8a846dca61fdea19608d571b54a /gold/dynobj.cc
parent PR 10450 (diff)
downloadbinutils-gdb-176fe33f0d2b5c96ea89acba35b684757bdf6e52.tar.gz
binutils-gdb-176fe33f0d2b5c96ea89acba35b684757bdf6e52.tar.bz2
binutils-gdb-176fe33f0d2b5c96ea89acba35b684757bdf6e52.zip
PR 10450
* dynobj.cc (Dynobj::create_gnu_hash_table): Add symbols to the GNU hash table if they need a dynamic value. Otherwise, don't add them if they are defined in a dynamic object or are forced local.
Diffstat (limited to 'gold/dynobj.cc')
-rw-r--r--gold/dynobj.cc7
1 files changed, 4 insertions, 3 deletions
diff --git a/gold/dynobj.cc b/gold/dynobj.cc
index ebb5f33ad9d..f982c4b469d 100644
--- a/gold/dynobj.cc
+++ b/gold/dynobj.cc
@@ -959,9 +959,10 @@ Dynobj::create_gnu_hash_table(const std::vector<Symbol*>& dynsyms,
{
Symbol* sym = dynsyms[i];
- // FIXME: Should put on unhashed_dynsyms if the symbol is
- // hidden.
- if (sym->is_undefined())
+ if (!sym->needs_dynsym_value()
+ && (sym->is_undefined()
+ || sym->is_from_dynobj()
+ || sym->is_forced_local()))
unhashed_dynsyms.push_back(sym);
else
{