X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gold%2Fmerge.h;h=8ac638eb6bd7855a27e407214b81cdd2f17551cc;hb=63ffd7c9131c0e9723016d33cf8d435cc508d02b;hp=62efa130163562779b08a2d6ce1d18631d94bc4b;hpb=67f95b96b4d5e8e19520d94bebae92db2f67af74;p=deliverable%2Fbinutils-gdb.git diff --git a/gold/merge.h b/gold/merge.h index 62efa13016..8ac638eb6b 100644 --- a/gold/merge.h +++ b/gold/merge.h @@ -1,6 +1,6 @@ // merge.h -- handle section merging for gold -*- C++ -*- -// Copyright (C) 2006-2015 Free Software Foundation, Inc. +// Copyright (C) 2006-2020 Free Software Foundation, Inc. // Written by Ian Lance Taylor . // This file is part of gold. @@ -42,9 +42,7 @@ class Object_merge_map { public: Object_merge_map() - : first_shnum_(-1U), first_map_(), - second_shnum_(-1U), second_map_(), - section_merge_maps_() + : section_merge_maps_() { } ~Object_merge_map(); @@ -85,7 +83,6 @@ class Object_merge_map Unordered_map::Elf_Addr>*); - private: // Map input section offsets to a length and an output section // offset. An output section offset of -1 means that this part of // the input section is being discarded. @@ -99,17 +96,12 @@ class Object_merge_map section_offset_type output_offset; }; - // A less-than comparison routine for Input_merge_entry. - struct Input_merge_compare - { - bool - operator()(const Input_merge_entry& i1, const Input_merge_entry& i2) const - { return i1.input_offset < i2.input_offset; } - }; - // A list of entries for a particular input section. struct Input_merge_map { + void add_mapping(section_offset_type input_offset, section_size_type length, + section_offset_type output_offset); + typedef std::vector Entries; // We store these with the Relobj, and we look them up by input @@ -142,8 +134,24 @@ class Object_merge_map { } }; + // Get or make the Input_merge_map to use for the section SHNDX + // with MERGE_MAP. + Input_merge_map* + get_or_make_input_merge_map(const Output_section_data* merge_map, + unsigned int shndx); + + private: + // A less-than comparison routine for Input_merge_entry. + struct Input_merge_compare + { + bool + operator()(const Input_merge_entry& i1, const Input_merge_entry& i2) const + { return i1.input_offset < i2.input_offset; } + }; + // Map input section indices to merge maps. - typedef std::map Section_merge_maps; + typedef std::vector > + Section_merge_maps; // Return a pointer to the Input_merge_map to use for the input // section SHNDX, or NULL. @@ -156,21 +164,6 @@ class Object_merge_map this)->get_input_merge_map(shndx)); } - // Get or make the Input_merge_map to use for the section SHNDX - // with MERGE_MAP. - Input_merge_map* - get_or_make_input_merge_map(const Output_section_data* merge_map, - unsigned int shndx); - - // Any given object file will normally only have a couple of input - // sections with mergeable contents. So we keep the first two input - // section numbers inline, and push any further ones into a map. A - // value of -1U in first_shnum_ or second_shnum_ means that we don't - // have a corresponding entry. - unsigned int first_shnum_; - Input_merge_map first_map_; - unsigned int second_shnum_; - Input_merge_map second_map_; Section_merge_maps section_merge_maps_; };