diff options
author | Cary Coutant <ccoutant@google.com> | 2010-07-21 21:03:54 +0000 |
---|---|---|
committer | Cary Coutant <ccoutant@google.com> | 2010-07-21 21:03:54 +0000 |
commit | 7689733114f888b7f2390ffd2ff2b76fcbf3b8b7 (patch) | |
tree | 5b0eaa53ae83fe433f89180b1fb456ebe98ef1dc /gold/merge.h | |
parent | 23bd0f7c5e23178ccc1c00925813c8e6f17c5eb2 (diff) | |
download | gdb-7689733114f888b7f2390ffd2ff2b76fcbf3b8b7.zip gdb-7689733114f888b7f2390ffd2ff2b76fcbf3b8b7.tar.gz gdb-7689733114f888b7f2390ffd2ff2b76fcbf3b8b7.tar.bz2 |
* merge.h (Output_merge_string::Merged_string): Remove object, shndx,
string, and length fields.
(Output_merge_string::Merged_strings_list): New type.
(Output_merge_string::Merged_strings_lists): New typedef.
(Output_merge_string): Replace merged_strings_ with
merged_strings_lists_.
* merge.cc (Output_merge_string::do_add_input_section): Allocate new
Merged_strings_list per input object and section. Don't store pointer
to the string. Don't store length with each merged string entry.
(Output_merge_string::finalize_merged_data): Loop over list of merged
strings lists. Recompute length of each merged string.
Diffstat (limited to 'gold/merge.h')
-rw-r--r-- | gold/merge.h | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/gold/merge.h b/gold/merge.h index c2d305b..b1284ae 100644 --- a/gold/merge.h +++ b/gold/merge.h @@ -462,7 +462,7 @@ class Output_merge_string : public Output_merge_base public: Output_merge_string(uint64_t addralign) : Output_merge_base(sizeof(Char_type), addralign), stringpool_(), - merged_strings_(), input_count_(0) + merged_strings_lists_(), input_count_(0) { gold_assert(addralign <= sizeof(Char_type)); this->stringpool_.set_no_zero_null(); @@ -531,34 +531,39 @@ class Output_merge_string : public Output_merge_base // index and offset to strings. struct Merged_string { - // The input object where the string was found. - Relobj* object; - // The input section in the input object. - unsigned int shndx; // The offset in the input section. section_offset_type offset; - // The string itself, a pointer into a Stringpool. - const Char_type* string; - // The length of the string in bytes, including the null terminator. - size_t length; // The key in the Stringpool. Stringpool::Key stringpool_key; - Merged_string(Relobj *objecta, unsigned int shndxa, - section_offset_type offseta, const Char_type* stringa, - size_t lengtha, Stringpool::Key stringpool_keya) - : object(objecta), shndx(shndxa), offset(offseta), string(stringa), - length(lengtha), stringpool_key(stringpool_keya) + Merged_string(section_offset_type offseta, Stringpool::Key stringpool_keya) + : offset(offseta), stringpool_key(stringpool_keya) { } }; typedef std::vector<Merged_string> Merged_strings; + struct Merged_strings_list + { + // The input object where the strings were found. + Relobj* object; + // The input section in the input object. + unsigned int shndx; + // The list of merged strings. + Merged_strings merged_strings; + + Merged_strings_list(Relobj* objecta, unsigned int shndxa) + : object(objecta), shndx(shndxa), merged_strings() + { } + }; + + typedef std::vector<Merged_strings_list*> Merged_strings_lists; + // As we see the strings, we add them to a Stringpool. Stringpool_template<Char_type> stringpool_; // Map from a location in an input object to an entry in the // Stringpool. - Merged_strings merged_strings_; + Merged_strings_lists merged_strings_lists_; // The number of entries seen in input files. size_t input_count_; }; |