PR 10450
authorIan Lance Taylor <ian@airs.com>
Wed, 30 Dec 2009 08:29:37 +0000 (08:29 +0000)
committerIan Lance Taylor <ian@airs.com>
Wed, 30 Dec 2009 08:29:37 +0000 (08:29 +0000)
* 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.

gold/ChangeLog
gold/dynobj.cc

index 860eda9..8acaf87 100644 (file)
@@ -1,3 +1,10 @@
+2009-12-30  Ian Lance Taylor  <iant@google.com>
+
+       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.
+
 2009-12-29  Ian Lance Taylor  <iant@google.com>
 
        PR 10450
index ebb5f33..f982c4b 100644 (file)
@@ -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
        {