mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-01-09 21:50:35 +00:00
Use a std::vector instead of a std::map to hold Input_merge_map.
A std::map is hardly the best data structure for a small map from small integers.
This commit is contained in:
parent
d78b645051
commit
400f89447b
@ -1,3 +1,10 @@
|
||||
2015-06-01 Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
|
||||
|
||||
* merge.cc (get_input_merge_map): Update for data structure change.
|
||||
(get_or_make_input_merge_map): Update for data structure change.
|
||||
* merge.h (Object_merge_map): Use a std::vector<std::pair>> instead of
|
||||
a std::map. Remove first_shnum_, first_map_, second_shnum_, second_map_.
|
||||
|
||||
2015-05-16 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* reloc.cc (Sized_relobj_file::find_functions): Use function_location.
|
||||
|
@ -49,13 +49,13 @@ const Object_merge_map::Input_merge_map*
|
||||
Object_merge_map::get_input_merge_map(unsigned int shndx) const
|
||||
{
|
||||
gold_assert(shndx != -1U);
|
||||
if (shndx == this->first_shnum_)
|
||||
return &this->first_map_;
|
||||
if (shndx == this->second_shnum_)
|
||||
return &this->second_map_;
|
||||
Section_merge_maps::const_iterator p = this->section_merge_maps_.find(shndx);
|
||||
if (p != this->section_merge_maps_.end())
|
||||
return p->second;
|
||||
const Section_merge_maps &maps = this->section_merge_maps_;
|
||||
for (Section_merge_maps::const_iterator i = maps.begin(), e = maps.end();
|
||||
i != e; ++i)
|
||||
{
|
||||
if (i->first == shndx)
|
||||
return i->second;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -73,23 +73,10 @@ Object_merge_map::get_or_make_input_merge_map(
|
||||
return map;
|
||||
}
|
||||
|
||||
// We need to create a new entry.
|
||||
if (this->first_shnum_ == -1U)
|
||||
{
|
||||
this->first_shnum_ = shndx;
|
||||
this->first_map_.output_data = output_data;
|
||||
return &this->first_map_;
|
||||
}
|
||||
if (this->second_shnum_ == -1U)
|
||||
{
|
||||
this->second_shnum_ = shndx;
|
||||
this->second_map_.output_data = output_data;
|
||||
return &this->second_map_;
|
||||
}
|
||||
|
||||
Input_merge_map* new_map = new Input_merge_map;
|
||||
new_map->output_data = output_data;
|
||||
this->section_merge_maps_[shndx] = new_map;
|
||||
Section_merge_maps &maps = this->section_merge_maps_;
|
||||
maps.push_back(std::make_pair(shndx, new_map));
|
||||
return new_map;
|
||||
}
|
||||
|
||||
|
16
gold/merge.h
16
gold/merge.h
@ -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();
|
||||
@ -152,7 +150,8 @@ class Object_merge_map
|
||||
};
|
||||
|
||||
// Map input section indices to merge maps.
|
||||
typedef std::map<unsigned int, Input_merge_map*> Section_merge_maps;
|
||||
typedef std::vector<std::pair<unsigned int, Input_merge_map*> >
|
||||
Section_merge_maps;
|
||||
|
||||
// Return a pointer to the Input_merge_map to use for the input
|
||||
// section SHNDX, or NULL.
|
||||
@ -165,15 +164,6 @@ class Object_merge_map
|
||||
this)->get_input_merge_map(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_;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user