From f31ae5b84b1fb6d66e1b6c6be8efb201748b303b Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 3 May 2013 09:30:24 +0000 Subject: [PATCH] * merge.cc (Output_merge_string::do_add_input_section): Correct scan for number of strings. Rename vars to avoid shadowing. Include missing terminator in input_size_. --- gold/ChangeLog | 6 ++++++ gold/merge.cc | 23 +++++++++++++---------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index 164da85..35aa64a 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,9 @@ +2013-05-03 Alan Modra + + * merge.cc (Output_merge_string::do_add_input_section): Correct + scan for number of strings. Rename vars to avoid shadowing. + Include missing terminator in input_size_. + 2013-05-01 H.J. Lu * merge.cc (Output_merge_string::do_add_input_section): diff --git a/gold/merge.cc b/gold/merge.cc index 2d01462..f370c9c 100644 --- a/gold/merge.cc +++ b/gold/merge.cc @@ -505,17 +505,17 @@ bool Output_merge_string::do_add_input_section(Relobj* object, unsigned int shndx) { - section_size_type len; + section_size_type sec_len; bool is_new; const unsigned char* pdata = object->decompressed_section_contents(shndx, - &len, + &sec_len, &is_new); const Char_type* p = reinterpret_cast(pdata); - const Char_type* pend = p + len / sizeof(Char_type); + const Char_type* pend = p + sec_len / sizeof(Char_type); const Char_type* pend0 = pend; - if (len % sizeof(Char_type) != 0) + if (sec_len % sizeof(Char_type) != 0) { object->error(_("mergeable string section length not multiple of " "character size")); @@ -542,11 +542,14 @@ Output_merge_string::do_add_input_section(Relobj* object, // Count the number of non-null strings in the section and size the list. size_t count = 0; - for (const Char_type* pt = p, len = string_length(pt); - pt < pend0; - pt += len + 1) - if (len != 0) - ++count; + const Char_type* pt = p; + while (pt < pend0) + { + size_t len = string_length(pt); + if (len != 0) + ++count; + pt += len + 1; + } if (pend0 < pend) ++count; merged_strings.reserve(count + 1); @@ -595,7 +598,7 @@ Output_merge_string::do_add_input_section(Relobj* object, merged_strings.push_back(Merged_string(i, 0)); this->input_count_ += count; - this->input_size_ += len; + this->input_size_ += i; if (has_misaligned_strings) gold_warning(_("%s: section %s contains incorrectly aligned strings;" -- 2.7.4