PR 10980
authorIan Lance Taylor <ian@airs.com>
Thu, 7 Jan 2010 18:31:30 +0000 (18:31 +0000)
committerIan Lance Taylor <ian@airs.com>
Thu, 7 Jan 2010 18:31:30 +0000 (18:31 +0000)
* options.h (class General_options): Add --warn-unresolved-symbols
and --error-unresolved-symbols.
* errors.cc (Errors::undefined_symbol): Implement
--warn-unresolved-symbols.

gold/ChangeLog
gold/errors.cc
gold/options.h

index 43b5c08ee2ebfaaab2cdcf2e9795b3a9bb513335..ce620ce9c044082a8c679542c870113e7bb61045 100644 (file)
@@ -1,5 +1,11 @@
 2010-01-07  Ian Lance Taylor  <iant@google.com>
 
+       PR 10980
+       * options.h (class General_options): Add --warn-unresolved-symbols
+       and --error-unresolved-symbols.
+       * errors.cc (Errors::undefined_symbol): Implement
+       --warn-unresolved-symbols.
+
        * options.h (class General_options): Add -z text and -z textoff.
        * layout.cc (Layout::finish_dynamic_section): Implement -z text.
 
index 618f9cd643e5e3bd01efe5029fd6a80abe72a64b..b8031b1ba7bb8519c0581c25758cf260d36d2a5f 100644 (file)
@@ -1,6 +1,6 @@
 // errors.cc -- handle errors for gold
 
-// Copyright 2006, 2007, 2008 Free Software Foundation, Inc.
+// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 // Written by Ian Lance Taylor <iant@google.com>.
 
 // This file is part of gold.
@@ -156,21 +156,33 @@ Errors::undefined_symbol(const Symbol* sym, const std::string& location)
 {
   bool initialized = this->initialize_lock();
   gold_assert(initialized);
+
+  const char* zmsg;
   {
     Hold_lock h(*this->lock_);
     if (++this->undefined_symbols_[sym] >= max_undefined_error_report)
       return;
-    ++this->error_count_;
+    if (parameters->options().warn_unresolved_symbols())
+      {
+       ++this->warning_count_;
+       zmsg = _("warning");
+      }
+    else
+      {
+       ++this->error_count_;
+       zmsg = _("error");
+      }
   }
+
   const char* const version = sym->version();
   if (version == NULL)
-    fprintf(stderr, _("%s: %s: error: undefined reference to '%s'\n"),
-           this->program_name_, location.c_str(),
+    fprintf(stderr, _("%s: %s: %s: undefined reference to '%s'\n"),
+           this->program_name_, location.c_str(), zmsg,
            sym->demangled_name().c_str());
   else
     fprintf(stderr,
-            _("%s: %s: error: undefined reference to '%s', version '%s'\n"),
-           this->program_name_, location.c_str(),
+            _("%s: %s: %s: undefined reference to '%s', version '%s'\n"),
+           this->program_name_, location.c_str(), zmsg,
            sym->demangled_name().c_str(), version);
 }
 
index de1f07a43fff009b7b7beee6b2a5b89eb18ae126..b22060afa16f4a4336c89d99b80a49080079cda7 100644 (file)
@@ -972,6 +972,14 @@ class General_options
              N_("Warn if text segment is not shareable"),
              N_("Do not warn if text segment is not shareable (default)"));
 
+  DEFINE_bool(warn_unresolved_symbols, options::TWO_DASHES, '\0', false,
+             N_("Report unresolved symbols as warnings"),
+             NULL);
+  DEFINE_bool_alias(error_unresolved_symbols, warn_unresolved_symbols,
+                   options::TWO_DASHES, '\0',
+                   N_("Report unresolved symbols as errors"),
+                   NULL, true);
+
   DEFINE_bool(whole_archive, options::TWO_DASHES, '\0', false,
               N_("Include all archive contents"),
               N_("Include only needed archive contents"));