Browse Source

2009-10-20 Doug Kwan <dougkwan@google.com>

* object.cc (Sized_relobj::do_finalize_local_symbols): Handle section
	symbols of relaxed input sections.
	* output.h (Output_section::find_relaxed_input_section): Make
	method public.
gdb_7_1-branch
Doug Kwan 17 years ago
parent
commit
6c17254915
  1. 7
      gold/ChangeLog
  2. 18
      gold/object.cc
  3. 10
      gold/output.h

7
gold/ChangeLog

@ -1,3 +1,10 @@
2009-10-20 Doug Kwan <dougkwan@google.com>
* object.cc (Sized_relobj::do_finalize_local_symbols): Handle section
symbols of relaxed input sections.
* output.h (Output_section::find_relaxed_input_section): Make
method public.
2009-10-16 Doug Kwan <dougkwan@google.com>
* dynobj.cc (Versions::Versions): Initialize version_script_.

18
gold/object.cc

@ -1711,12 +1711,18 @@ Sized_relobj<size, big_endian>::do_finalize_local_symbols(unsigned int index,
}
else if (!os->find_starting_output_address(this, shndx, &start))
{
// This is a section symbol, but apparently not one
// in a merged section. Just use the start of the
// output section. This happens with relocatable
// links when the input object has section symbols
// for arbitrary non-merge sections.
lv.set_output_value(os->address());
// This is a section symbol, but apparently not one in a
// merged section. First check to see if this is a relaxed
// input section. If so, use its address. Otherwise just
// use the start of the output section. This happens with
// relocatable links when the input object has section
// symbols for arbitrary non-merge sections.
const Output_section_data* posd =
os->find_relaxed_input_section(this, shndx);
if (posd != NULL)
lv.set_output_value(posd->address());
else
lv.set_output_value(os->address());
}
else
{

10
gold/output.h

@ -2585,6 +2585,11 @@ class Output_section : public Output_data
convert_input_sections_to_relaxed_sections(
const std::vector<Output_relaxed_input_section*>& sections);
// Find a relaxed input section to an input section in OBJECT
// with index SHNDX. Return NULL if none is found.
const Output_section_data*
find_relaxed_input_section(const Relobj* object, unsigned int shndx) const;
// Print merge statistics to stderr.
void
print_merge_stats();
@ -3208,11 +3213,6 @@ class Output_section : public Output_data
Output_section_data*
find_merge_section(const Relobj* object, unsigned int shndx) const;
// Find a relaxed input section to an input section in OBJECT
// with index SHNDX. Return NULL if none is found.
const Output_section_data*
find_relaxed_input_section(const Relobj* object, unsigned int shndx) const;
// Build a relaxation map.
void
build_relaxation_map(

Loading…
Cancel
Save