From e2153196343ab5120efa49044081baaeeae8a293 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 11 Jul 2011 16:19:51 +0000 Subject: [PATCH] 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. --- gold/ChangeLog | 10 ++++++++++ gold/layout.cc | 2 ++ gold/options.cc | 8 ++++++++ gold/options.h | 3 +++ gold/target-reloc.h | 2 ++ 5 files changed, 25 insertions(+) diff --git a/gold/ChangeLog b/gold/ChangeLog index 07a6f29c075..3dc9723da39 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,13 @@ +2011-07-11 Ian Lance Taylor + + 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 PR gold/11985 diff --git a/gold/layout.cc b/gold/layout.cc index 40dd47163cf..8cdf1ec71b2 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -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); } diff --git a/gold/options.cc b/gold/options.cc index 16699aa7415..be3264554a4 100644 --- a/gold/options.cc +++ b/gold/options.cc @@ -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); diff --git a/gold/options.h b/gold/options.h index 817d0f00573..8fa59d7c831 100644 --- a/gold/options.h +++ b/gold/options.h @@ -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); diff --git a/gold/target-reloc.h b/gold/target-reloc.h index 87fa593d12a..832c5d6db7d 100644 --- a/gold/target-reloc.h +++ b/gold/target-reloc.h @@ -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()) -- 2.30.2