+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_.
}
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
{
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();
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(