diff options
-rw-r--r-- | gold/ChangeLog | 6 | ||||
-rw-r--r-- | gold/errors.cc | 24 | ||||
-rw-r--r-- | gold/options.h | 8 |
3 files changed, 32 insertions, 6 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 43b5c08..ce620ce 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -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. diff --git a/gold/errors.cc b/gold/errors.cc index 618f9cd..b8031b1 100644 --- a/gold/errors.cc +++ b/gold/errors.cc @@ -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); } diff --git a/gold/options.h b/gold/options.h index de1f07a..b22060a 100644 --- a/gold/options.h +++ b/gold/options.h @@ -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")); |