From: Ian Lance Taylor Date: Tue, 23 Jun 2009 07:04:10 +0000 (+0000) Subject: PR 10133 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f7c8a183e8d2c83eddadddb3b473338abf30a1d5;p=binutils-gdb.git PR 10133 * stringpool.h (class Stringpool_template): Add optimize_ field. (Stringpool_template::set_optimize): New function. * stringpool.cc (Stringpool_template::Stringpool_template): Initialize optimize_ field. (Stringpool_template::set_string_offsets): Test local optimize fild rather than parameter. * layout.cc (Layout::Layout): Call set_optimize on the section name stringpool. --- diff --git a/gold/ChangeLog b/gold/ChangeLog index ebb7a547e41..c62aa99fdf5 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,15 @@ +2009-06-23 Ian Lance Taylor + + PR 10133 + * stringpool.h (class Stringpool_template): Add optimize_ field. + (Stringpool_template::set_optimize): New function. + * stringpool.cc (Stringpool_template::Stringpool_template): + Initialize optimize_ field. + (Stringpool_template::set_string_offsets): Test local optimize + fild rather than parameter. + * layout.cc (Layout::Layout): Call set_optimize on the section + name stringpool. + 2009-06-22 Ian Lance Taylor PR 10030 diff --git a/gold/layout.cc b/gold/layout.cc index ae2a5dc8e7d..4efb9c195f9 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -137,6 +137,10 @@ Layout::Layout(int number_of_input_files, Script_options* script_options) // Initialize structure needed for an incremental build. if (parameters->options().incremental()) this->incremental_inputs_ = new Incremental_inputs; + + // The section name pool is worth optimizing in all cases, because + // it is small, but there are often overlaps due to .rel sections. + this->namepool_.set_optimize(); } // Hash a key we use to look up an output section mapping. diff --git a/gold/stringpool.cc b/gold/stringpool.cc index e37846b9edc..05d1d68e5d5 100644 --- a/gold/stringpool.cc +++ b/gold/stringpool.cc @@ -36,8 +36,10 @@ namespace gold template Stringpool_template::Stringpool_template() : string_set_(), key_to_offset_(), strings_(), strtab_size_(0), - zero_null_(true) + zero_null_(true), optimize_(false) { + if (parameters->options_valid() && parameters->options().optimize() >= 2) + this->optimize_ = true; } template @@ -395,7 +397,7 @@ Stringpool_template::set_string_offsets() // the strtab size, and gives a relatively small benefit (it's // typically rare for a symbol to be a suffix of another), we only // take the time to sort when the user asks for heavy optimization. - if (parameters->options().optimize() < 2) + if (!this->optimize_) { for (typename String_set_type::iterator curr = this->string_set_.begin(); curr != this->string_set_.end(); diff --git a/gold/stringpool.h b/gold/stringpool.h index 6fe2066eaa4..906ceaa17a4 100644 --- a/gold/stringpool.h +++ b/gold/stringpool.h @@ -176,6 +176,12 @@ class Stringpool_template set_no_zero_null() { this->zero_null_ = false; } + // Indicate that this string pool should be optimized, even if not + // running with -O2. + void + set_optimize() + { this->optimize_ = true; } + // Add the string S to the pool. This returns a canonical permanent // pointer to the string in the pool. If COPY is true, the string // is copied into permanent storage. If PKEY is not NULL, this sets @@ -364,6 +370,8 @@ class Stringpool_template section_size_type strtab_size_; // Whether to reserve offset 0 to hold the null string. bool zero_null_; + // Whether to optimize the string table. + bool optimize_; }; // The most common type of Stringpool.