From dc3f80feec3ab89febde78bc6d11655431555365 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 7 Jan 2010 18:31:30 +0000 Subject: [PATCH] PR 10980 * options.h (class General_options): Add --warn-unresolved-symbols and --error-unresolved-symbols. * errors.cc (Errors::undefined_symbol): Implement --warn-unresolved-symbols. --- gold/ChangeLog | 6 ++++++ gold/errors.cc | 24 ++++++++++++++++++------ gold/options.h | 8 ++++++++ 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index 43b5c08ee2e..ce620ce9c04 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,5 +1,11 @@ 2010-01-07 Ian Lance Taylor + 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 618f9cd643e..b8031b1ba7b 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 . // 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 de1f07a43ff..b22060afa16 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")); -- 2.30.2