X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gold%2Fstringpool.cc;h=1329b35e1f161e8159b13c86b71779f700361b1d;hb=458620aabb33d9b0efa61d0fb402c8d19e65eabd;hp=00ed1842bd013a833b4aa5dd60b95e12128e3882;hpb=6c09fb0ba1f48543909dea5a988cf8f951699d10;p=deliverable%2Fbinutils-gdb.git diff --git a/gold/stringpool.cc b/gold/stringpool.cc index 00ed1842bd..1329b35e1f 100644 --- a/gold/stringpool.cc +++ b/gold/stringpool.cc @@ -1,6 +1,6 @@ // stringpool.cc -- a string pool for gold -// Copyright 2006, 2007, 2008 Free Software Foundation, Inc. +// Copyright (C) 2006-2021 Free Software Foundation, Inc. // Written by Ian Lance Taylor . // This file is part of gold. @@ -39,7 +39,9 @@ Stringpool_template::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; } @@ -226,9 +228,8 @@ Stringpool_template::new_key_offset(size_t length) else { offset = this->offset_; - // Align non-zero length strings. - if (length != 0) - offset = align_address(offset, this->addralign_); + // Align strings. + offset = align_address(offset, this->addralign_); this->offset_ = offset + (length + 1) * sizeof(Stringpool_char); } this->key_to_offset_.push_back(offset); @@ -419,6 +420,8 @@ Stringpool_template::set_string_offsets() if (this->zero_null_ && (*curr)->first.string[0] == 0) this_offset = 0; else if (last != v.end() + && ((((*curr)->first.length - (*last)->first.length) + % this->addralign_) == 0) && is_suffix((*curr)->first.string, (*curr)->first.length, (*last)->first.string,