aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@gmail.com>2015-03-21 21:09:46 -0700
committerCary Coutant <ccoutant@gmail.com>2015-03-21 21:09:46 -0700
commit1c582fe71858efabae951c5f3ed7dccfb23fb86e (patch)
treefb63e6f7a667e5601b96a5be3f0c73c71f82f0a8
parent410da591ba7814912e11be826b20dfba9abed9f7 (diff)
downloadgdb-1c582fe71858efabae951c5f3ed7dccfb23fb86e.zip
gdb-1c582fe71858efabae951c5f3ed7dccfb23fb86e.tar.gz
gdb-1c582fe71858efabae951c5f3ed7dccfb23fb86e.tar.bz2
Fix bug when optimizing string pools of aligned strings.
Tail optimization of string pools (enabled when linker is run with -O2 or greater) should not be done when the section alignment is greater than the size of the characters in the strings; otherwise, unaligned strings may result. gold/ PR gold/18010 * stringpool.cc (Stringpool_template): Don't optimize if section alignment is greater than sizeof(char).
-rw-r--r--gold/ChangeLog6
-rw-r--r--gold/stringpool.cc4
2 files changed, 9 insertions, 1 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index d65c555..cc0aed3 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,5 +1,11 @@
2015-03-21 Cary Coutant <cary@google.com>
+ PR gold/18010
+ * stringpool.cc (Stringpool_template): Don't optimize if section
+ alignment is greater than sizeof(char).
+
+2015-03-21 Cary Coutant <cary@google.com>
+
PR gold/18048
* script-c.h (script_include_directive): Add first_token parameter.
* script.cc (script_include_directive): Add first_token parameter, and
diff --git a/gold/stringpool.cc b/gold/stringpool.cc
index c6d3c9b..d6fd715 100644
--- a/gold/stringpool.cc
+++ b/gold/stringpool.cc
@@ -39,7 +39,9 @@ Stringpool_template<Stringpool_char>::Stringpool_template(uint64_t addralign)
zero_null_(true), optimize_(false), offset_(sizeof(Stringpool_char)),
addralign_(addralign)
{
- if (parameters->options_valid() && parameters->options().optimize() >= 2)
+ if (parameters->options_valid()
+ && parameters->options().optimize() >= 2
+ && addralign <= sizeof(Stringpool_char))
this->optimize_ = true;
}