forked from Imagelibrary/binutils-gdb
Remove empty class Merge_map.
2015-03-02 Rafael Ávila de Espíndola <rafael.espindola@gmail.com> * ehframe.cc (Cie::set_output_offset): Pass in and use a Output_section_data instead of a Merge_map. (Eh_frame::Eh_frame): Don't initialize merge_map_. (Eh_frame::read_cie): Use add_merge_mapping instead of Merge_map::add_mapping. (Eh_frame::read_fde): Ditto. (Eh_frame::set_final_data_size): Use this instead of this->merge_map_. (Eh_frame::do_output_offset): Use merge_output_offset istead of merge_map_->get_output_offset. (Eh_frame::do_is_merge_section_for): Delete. * ehframe.h (Fde::add_mapping): Pass in and use a Output_section_data instead of a Merge_map. (Cie::set_output_offset): Pass in a Output_section_data instead of a Merge_map. (Eh_frame::do_is_merge_section_for): Delete. (Eh_frame::merge_map_): Delete. * merge.cc (Object_merge_map::get_or_make_input_merge_map): Pass in and use a Output_section_data instead of a Merge_map. (Object_merge_map::add_mapping): Ditto. (Object_merge_map::get_output_offset): Remove the merge_map argument. (Object_merge_map::is_merge_section_for): Pass in and use a Output_section_data instead of a Merge_map. (Merge_map): Delete. (Output_merge_base::do_output_offset): Use merge_output_offset instead of merge_map_.get_output_offset. (Output_merge_base::do_is_merge_section_for): Delete. (Output_merge_data::do_add_input_section): Use object->add_merge_mapping instead of add_mapping. (Output_merge_string<Char_type>::finalize_merged_data): Ditto. * merge.h (Merge_map): Delete forward declaration. (Object_merge_map::add_mapping): Pass in and use a Output_section_data instead of a Merge_map. (Object_merge_map::get_output_offset): Remove the merge_map argument. (Object_merge_map::is_merge_section_for): Pass in and use a Output_section_data instead of a Merge_map. (Input_merge_map::Object_merge_map::merge_map): Replace with output_data. (Object_merge_map::get_or_make_input_merge_map): Pass in and use a Output_section_data instead of a Merge_map. (Merge_map): Delete. (Output_merge_base::Output_merge_base): Don't initialize merge_map_. (Output_merge_base::do_is_merge_section_for): Delete. (Output_merge_base::add_mapping): Delete. (Output_merge_base::merge_map_): Delete. * object.cc (Relobj::initialize_input_to_output_map): New. (Relobj::initialize_input_to_output_map): New. (Relobj::merge_output_offset): New. (Relobj::is_merge_section_for): New. (Relobj::initialize_input_to_output_map): Instantiate for 32 and 64 bits. * object.h (Relobj::merge_map): Delete. (initialize_input_to_output_map): New. (set_merge_map): Delete. (add_merge_mapping): New. (merge_output_offset): New. (is_merge_section_for): New. * output.cc (Output_section::Input_section::is_merge_section_for): Use object->is_merge_section_for. * output.h (Output_section_data::is_merge_section_for): Delete. (Output_section_data::do_is_merge_section_for): Delete. * reloc.cc (Merged_symbol_value<size>::initialize_input_to_output_map): Use object->initialize_input_to_output_map. (Merged_symbol_value<size>::value_from_output_section): Use object->merge_output_offset.
This commit is contained in:
committed by
Cary Coutant
parent
a8d9763abd
commit
dbe40a8891
78
gold/merge.h
78
gold/merge.h
@@ -33,8 +33,6 @@
|
||||
namespace gold
|
||||
{
|
||||
|
||||
class Merge_map;
|
||||
|
||||
// For each object with merge sections, we store an Object_merge_map.
|
||||
// This is used to map locations in input sections to a merged output
|
||||
// section. The output section itself is not recorded here--it can be
|
||||
@@ -57,8 +55,9 @@ class Object_merge_map
|
||||
// discarded. OUTPUT_OFFSET is relative to the start of the merged
|
||||
// data in the output section.
|
||||
void
|
||||
add_mapping(const Merge_map*, unsigned int shndx, section_offset_type offset,
|
||||
section_size_type length, section_offset_type output_offset);
|
||||
add_mapping(const Output_section_data*, unsigned int shndx,
|
||||
section_offset_type offset, section_size_type length,
|
||||
section_offset_type output_offset);
|
||||
|
||||
// Get the output offset for an input address. MERGE_MAP is the map
|
||||
// we are looking for, or NULL if we don't care. The input address
|
||||
@@ -68,13 +67,13 @@ class Object_merge_map
|
||||
// mapping is known, false otherwise. *OUTPUT_OFFSET is relative to
|
||||
// the start of the merged data in the output section.
|
||||
bool
|
||||
get_output_offset(const Merge_map*, unsigned int shndx,
|
||||
get_output_offset(unsigned int shndx,
|
||||
section_offset_type offset,
|
||||
section_offset_type* output_offset);
|
||||
|
||||
// Return whether this is the merge map for section SHNDX.
|
||||
bool
|
||||
is_merge_section_for(const Merge_map*, unsigned int shndx);
|
||||
is_merge_section_for(const Output_section_data*, unsigned int shndx);
|
||||
|
||||
// Initialize an mapping from input offsets to output addresses for
|
||||
// section SHNDX. STARTING_ADDRESS is the output address of the
|
||||
@@ -133,14 +132,14 @@ class Object_merge_map
|
||||
// look up information for a different Merge_map, we report that
|
||||
// we don't have it, rather than trying a lookup and returning an
|
||||
// answer which will receive the wrong offset.
|
||||
const Merge_map* merge_map;
|
||||
const Output_section_data* output_data;
|
||||
// The list of mappings.
|
||||
Entries entries;
|
||||
// Whether the ENTRIES field is sorted by input_offset.
|
||||
bool sorted;
|
||||
|
||||
Input_merge_map()
|
||||
: merge_map(NULL), entries(), sorted(true)
|
||||
: output_data(NULL), entries(), sorted(true)
|
||||
{ }
|
||||
};
|
||||
|
||||
@@ -155,7 +154,8 @@ 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 Merge_map* merge_map, unsigned int shndx);
|
||||
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
|
||||
@@ -169,46 +169,6 @@ class Object_merge_map
|
||||
Section_merge_maps section_merge_maps_;
|
||||
};
|
||||
|
||||
// This class manages mappings from input sections to offsets in an
|
||||
// output section. This is used where input sections are merged. The
|
||||
// actual data is stored in fields in Object.
|
||||
|
||||
class Merge_map
|
||||
{
|
||||
public:
|
||||
Merge_map()
|
||||
{ }
|
||||
|
||||
// Add a mapping for the bytes from OFFSET to OFFSET + LENGTH in the
|
||||
// input section SHNDX in object OBJECT to OUTPUT_OFFSET in the
|
||||
// output section. An OUTPUT_OFFSET of -1 means that the bytes are
|
||||
// discarded. OUTPUT_OFFSET is not the offset from the start of the
|
||||
// output section, it is the offset from the start of the merged
|
||||
// data within the output section.
|
||||
void
|
||||
add_mapping(Relobj* object, unsigned int shndx,
|
||||
section_offset_type offset, section_size_type length,
|
||||
section_offset_type output_offset);
|
||||
|
||||
// Return the output offset for an input address. The input address
|
||||
// is at offset OFFSET in section SHNDX in OBJECT. This sets
|
||||
// *OUTPUT_OFFSET to the offset in the output section; this will be
|
||||
// -1 if the bytes are not being copied to the output. This returns
|
||||
// true if the mapping is known, false otherwise. This returns the
|
||||
// value stored by add_mapping, namely the offset from the start of
|
||||
// the merged data within the output section.
|
||||
bool
|
||||
get_output_offset(const Relobj* object, unsigned int shndx,
|
||||
section_offset_type offset,
|
||||
section_offset_type* output_offset) const;
|
||||
|
||||
// Return whether this is the merge mapping for section SHNDX in
|
||||
// OBJECT. This should return true when get_output_offset would
|
||||
// return true for some input offset.
|
||||
bool
|
||||
is_merge_section_for(const Relobj* object, unsigned int shndx) const;
|
||||
};
|
||||
|
||||
// A general class for SHF_MERGE data, to hold functions shared by
|
||||
// fixed-size constant data and string data.
|
||||
|
||||
@@ -216,7 +176,7 @@ class Output_merge_base : public Output_section_data
|
||||
{
|
||||
public:
|
||||
Output_merge_base(uint64_t entsize, uint64_t addralign)
|
||||
: Output_section_data(addralign), merge_map_(), entsize_(entsize),
|
||||
: Output_section_data(addralign), entsize_(entsize),
|
||||
keeps_input_sections_(false), first_relobj_(NULL), first_shndx_(-1),
|
||||
input_sections_()
|
||||
{ }
|
||||
@@ -285,21 +245,6 @@ class Output_merge_base : public Output_section_data
|
||||
section_offset_type offset,
|
||||
section_offset_type* poutput) const;
|
||||
|
||||
// Return whether this is the merge section for an input section.
|
||||
bool
|
||||
do_is_merge_section_for(const Relobj*, unsigned int shndx) const;
|
||||
|
||||
// Add a mapping from an OFFSET in input section SHNDX in object
|
||||
// OBJECT to an OUTPUT_OFFSET in the output section. OUTPUT_OFFSET
|
||||
// is the offset from the start of the merged data in the output
|
||||
// section.
|
||||
void
|
||||
add_mapping(Relobj* object, unsigned int shndx, section_offset_type offset,
|
||||
section_size_type length, section_offset_type output_offset)
|
||||
{
|
||||
this->merge_map_.add_mapping(object, shndx, offset, length, output_offset);
|
||||
}
|
||||
|
||||
// This may be overridden by the child class.
|
||||
virtual bool
|
||||
do_is_string()
|
||||
@@ -315,9 +260,6 @@ class Output_merge_base : public Output_section_data
|
||||
record_input_section(Relobj* relobj, unsigned int shndx);
|
||||
|
||||
private:
|
||||
// A mapping from input object/section/offset to offset in output
|
||||
// section.
|
||||
Merge_map merge_map_;
|
||||
// The entry size. For fixed-size constants, this is the size of
|
||||
// the constants. For strings, this is the size of a character.
|
||||
uint64_t entsize_;
|
||||
|
||||
Reference in New Issue
Block a user