PR 10133
authorIan Lance Taylor <ian@airs.com>
Tue, 23 Jun 2009 07:04:10 +0000 (07:04 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 23 Jun 2009 07:04:10 +0000 (07:04 +0000)
* 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.

gold/ChangeLog
gold/layout.cc
gold/stringpool.cc
gold/stringpool.h

index ebb7a54..c62aa99 100644 (file)
@@ -1,3 +1,15 @@
+2009-06-23  Ian Lance Taylor  <iant@google.com>
+
+       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  <iant@google.com>
 
        PR 10030
index ae2a5dc..4efb9c1 100644 (file)
@@ -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.
index e37846b..05d1d68 100644 (file)
@@ -36,8 +36,10 @@ namespace gold
 template<typename Stringpool_char>
 Stringpool_template<Stringpool_char>::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<typename Stringpool_char>
@@ -395,7 +397,7 @@ Stringpool_template<Stringpool_char>::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();
index 6fe2066..906ceaa 100644 (file)
@@ -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.