From 886288f10bd9d10fb446191e5266154c38f0cbad Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Sun, 3 Jul 2011 04:46:56 +0000 Subject: [PATCH] PR gold/12957 * options.h (class General_options): Add -f and -F. * options.cc (General_options::finalize): Fatal error if -f/-F are used without -shared. * layout.cc (Layout::finish_dynamic_section): Implement -f/-F. --- gold/ChangeLog | 8 ++++++++ gold/layout.cc | 14 ++++++++++++-- gold/options.cc | 8 ++++++++ gold/options.h | 8 ++++++++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index 4ac6808..fdedd86 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,5 +1,13 @@ 2011-07-02 Ian Lance Taylor + PR gold/12957 + * options.h (class General_options): Add -f and -F. + * options.cc (General_options::finalize): Fatal error if -f/-F + are used without -shared. + * layout.cc (Layout::finish_dynamic_section): Implement -f/-F. + +2011-07-02 Ian Lance Taylor + * dirsearch.cc (Dir_cache::read_files): Ignore ENOTDIR errors. 2011-07-01 Ian Lance Taylor diff --git a/gold/layout.cc b/gold/layout.cc index 11dbbef..e6fd7e5 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -4218,8 +4218,18 @@ Layout::finish_dynamic_section(const Input_objects* input_objects, } } - // Add a DT_FLAGS entry. We add it even if no flags are set so that - // post-link tools can easily modify these flags if desired. + if (parameters->options().filter() != NULL) + odyn->add_string(elfcpp::DT_FILTER, parameters->options().filter()); + if (parameters->options().any_auxiliary()) + { + for (options::String_set::const_iterator p = + parameters->options().auxiliary_begin(); + p != parameters->options().auxiliary_end(); + ++p) + odyn->add_string(elfcpp::DT_AUXILIARY, *p); + } + + // Add a DT_FLAGS entry if necessary. unsigned int flags = 0; if (have_textrel) { diff --git a/gold/options.cc b/gold/options.cc index 50fc557..f1dc1cb 100644 --- a/gold/options.cc +++ b/gold/options.cc @@ -1166,6 +1166,14 @@ General_options::finalize() if (this->pie() && this->relocatable()) gold_fatal(_("-pie and -r are incompatible")); + if (!this->shared()) + { + if (this->filter() != NULL) + gold_fatal(_("-F/--filter may not used without -shared")); + if (this->any_auxiliary()) + gold_fatal(_("-f/--auxiliary may not be used without -shared")); + } + // TODO: implement support for -retain-symbols-file with -r, if needed. if (this->relocatable() && this->retain_symbols_file()) gold_fatal(_("-retain-symbols-file does not yet work with -r")); diff --git a/gold/options.h b/gold/options.h index 506c376..57d5810 100644 --- a/gold/options.h +++ b/gold/options.h @@ -735,6 +735,14 @@ class General_options N_("(ARM only) Do not warn about objects with incompatible " "enum sizes")); + DEFINE_set(auxiliary, options::TWO_DASHES, 'f', + N_("Auxiliary filter for shared object symbol table"), + N_("SHLIB")); + + DEFINE_string(filter, options::TWO_DASHES, 'F', NULL, + N_("Filter for shared object symbol table"), + N_("SHLIB")); + DEFINE_bool(fatal_warnings, options::TWO_DASHES, '\0', false, N_("Treat warnings as errors"), N_("Do not treat warnings as errors")); -- 2.7.4