From: Ian Lance Taylor Date: Sat, 15 Dec 2007 01:01:48 +0000 (+0000) Subject: Minor speedup to Output_merge_string::do_add_input_section. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=281b8327ae1f49929a1f7a3c0bba5dec54eeeec2;p=binutils-gdb.git Minor speedup to Output_merge_string::do_add_input_section. --- diff --git a/gold/merge.cc b/gold/merge.cc index 98ea89e1340..3eb7c3ea216 100644 --- a/gold/merge.cc +++ b/gold/merge.cc @@ -466,6 +466,7 @@ Output_merge_string::do_add_input_section(Relobj* object, const unsigned char* pdata = object->section_contents(shndx, &len, false); const Char_type* p = reinterpret_cast(pdata); + const Char_type* pend = p + len; if (len % sizeof(Char_type) != 0) { @@ -478,12 +479,10 @@ Output_merge_string::do_add_input_section(Relobj* object, off_t i = 0; while (i < len) { - off_t plen = 0; - for (const Char_type* pl = p; *pl != 0; ++pl) + const Char_type* pl; + for (pl = p; *pl != 0; ++pl) { - // The length PLEN is in characters, not bytes. - ++plen; - if (i + plen * static_cast(sizeof(Char_type)) >= len) + if (pl >= pend) { object->error(_("entry in mergeable string section " "not null terminated")); @@ -491,13 +490,13 @@ Output_merge_string::do_add_input_section(Relobj* object, } } - const Char_type* str = this->stringpool_.add(p, true, NULL); + const Char_type* str = this->stringpool_.add_prefix(p, pl - p, NULL); - off_t bytelen_with_null = (plen + 1) * sizeof(Char_type); + size_t bytelen_with_null = ((pl - p) + 1) * sizeof(Char_type); this->merged_strings_.push_back(Merged_string(object, shndx, i, str, bytelen_with_null)); - p += plen + 1; + p = pl + 1; i += bytelen_with_null; }