2010-05-27 Doug Kwan <dougkwan@google.com>
* object.cc (Sized_relobj::do_finalize_local_symbols): Use offset from start of output section instead of address for a local symbol in a merged or relaxed section when doing a relocatable link.
This commit is contained in:
parent
23de6b3410
commit
29e1142177
2 changed files with 19 additions and 3 deletions
|
@ -1,3 +1,9 @@
|
|||
2010-05-27 Doug Kwan <dougkwan@google.com>
|
||||
|
||||
* object.cc (Sized_relobj::do_finalize_local_symbols): Use offset
|
||||
from start of output section instead of address for a local symbol
|
||||
in a merged or relaxed section when doing a relocatable link.
|
||||
|
||||
2010-05-26 Rafael Espindola <espindola@google.com>
|
||||
|
||||
PR 11604
|
||||
|
|
|
@ -1827,7 +1827,12 @@ Sized_relobj<size, big_endian>::do_finalize_local_symbols(unsigned int index,
|
|||
const Output_section_data* posd =
|
||||
os->find_relaxed_input_section(this, shndx);
|
||||
if (posd != NULL)
|
||||
lv.set_output_value(posd->address());
|
||||
{
|
||||
Address relocatable_link_adjustment =
|
||||
relocatable ? os->address() : 0;
|
||||
lv.set_output_value(posd->address()
|
||||
- relocatable_link_adjustment);
|
||||
}
|
||||
else
|
||||
lv.set_output_value(os->address());
|
||||
}
|
||||
|
@ -1835,9 +1840,14 @@ Sized_relobj<size, big_endian>::do_finalize_local_symbols(unsigned int index,
|
|||
{
|
||||
// We have to consider the addend to determine the
|
||||
// value to use in a relocation. START is the start
|
||||
// of this input section.
|
||||
// of this input section. If we are doing a relocatable
|
||||
// link, use offset from start output section instead of
|
||||
// address.
|
||||
Address adjusted_start =
|
||||
relocatable ? start - os->address() : start;
|
||||
Merged_symbol_value<size>* msv =
|
||||
new Merged_symbol_value<size>(lv.input_value(), start);
|
||||
new Merged_symbol_value<size>(lv.input_value(),
|
||||
adjusted_start);
|
||||
lv.set_merged_symbol_value(msv);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue