PR gold/12979
authorIan Lance Taylor <ian@airs.com>
Mon, 11 Jul 2011 16:19:51 +0000 (16:19 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 11 Jul 2011 16:19:51 +0000 (16:19 +0000)
* options.h (class General_options): Add -Bgroup.
* options.cc (General_options::finalize): If -Bgroup is set,
default to --unresolved-symbols=report-all.
* layout.cc (Layout::finish_dynamic_section): Implement -Bgroup.
* target-reloc.h (issue_undefined_symbol_error): Handle
--unresolved-symbols=report-all.

gold/ChangeLog
gold/layout.cc
gold/options.cc
gold/options.h
gold/target-reloc.h

index 07a6f29c075c6e731a9a2c4bfcdc1704be20ec57..3dc9723da39b0184cb47033100087b8acb87ebd1 100644 (file)
@@ -1,3 +1,13 @@
+2011-07-11  Ian Lance Taylor  <iant@google.com>
+
+       PR gold/12979
+       * options.h (class General_options): Add -Bgroup.
+       * options.cc (General_options::finalize): If -Bgroup is set,
+       default to --unresolved-symbols=report-all.
+       * layout.cc (Layout::finish_dynamic_section): Implement -Bgroup.
+       * target-reloc.h (issue_undefined_symbol_error): Handle
+       --unresolved-symbols=report-all.
+
 2011-07-08  Ian Lance Taylor  <iant@google.com>
 
        PR gold/11985
index 40dd47163cf92c133f8b5d5a6e41004a59a57a75..8cdf1ec71b2699141b383b0018863c07b70040a5 100644 (file)
@@ -4370,6 +4370,8 @@ Layout::finish_dynamic_section(const Input_objects* input_objects,
     flags |= elfcpp::DF_1_ORIGIN;
   if (parameters->options().now())
     flags |= elfcpp::DF_1_NOW;
+  if (parameters->options().Bgroup())
+    flags |= elfcpp::DF_1_GROUP;
   if (flags != 0)
     odyn->add_constant(elfcpp::DT_FLAGS_1, flags);
 }
index 16699aa7415bb92652e61043073e7ec3c089a8cf..be3264554a416c6eb7b448208b569a0afd4663cd 100644 (file)
@@ -1168,6 +1168,14 @@ General_options::finalize()
         }
     }
 
+  // -Bgroup implies --unresolved-symbols=report-all.
+  if (this->Bgroup() && !this->user_set_unresolved_symbols())
+    this->set_unresolved_symbols("report-all");
+
+  // -shared implies --allow-shlib-undefined.  Currently
+  // ---allow-shlib-undefined controls warnings issued based on the
+  // -symbol table.  --unresolved-symbols controls warnings issued
+  // -based on relocations.
   if (this->shared() && !this->user_set_allow_shlib_undefined())
     this->set_allow_shlib_undefined(true);
 
index 817d0f00573e4385fba7cbf884135bbb3fae9cc2..8fa59d7c831a41536a870bd33a0d5370150d95aa 100644 (file)
@@ -643,6 +643,9 @@ class General_options
   DEFINE_bool_alias(dn, Bdynamic, options::ONE_DASH, '\0',
                    N_("alias for -Bstatic"), NULL, true);
 
+  DEFINE_bool(Bgroup, options::ONE_DASH, '\0', false,
+             N_("Use group name lookup rules for shared library"), NULL);
+
   DEFINE_bool(Bsymbolic, options::ONE_DASH, '\0', false,
               N_("Bind defined symbols locally"), NULL);
 
index 87fa593d12a43d8db0d1abb29d305bd6aa1f691a..832c5d6db7dafeec8be16b57ded273cb785e2256 100644 (file)
@@ -203,6 +203,8 @@ issue_undefined_symbol_error(const Symbol* sym)
     {
       if (strcmp(u, "ignore-all") == 0)
        return false;
+      if (strcmp(u, "report-all") == 0)
+       return true;
       if (strcmp(u, "ignore-in-object-files") == 0 && !sym->in_dyn())
        return false;
       if (strcmp(u, "ignore-in-shared-libs") == 0 && !sym->in_reg())