gold/
2010-02-08 David S. Miller <davem@davemloft.net> * sparc.cc (Target_sparc::Relocate::relocate): If relocation offset is unaligned for R_SPARC_16, R_SPARC_32, or R_SPARC_64, use the unaligned relocation helper function.
This commit is contained in:
parent
4baec45cb0
commit
705b512121
|
@ -1,3 +1,9 @@
|
||||||
|
2010-02-08 David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
|
* sparc.cc (Target_sparc::Relocate::relocate): If relocation offset is
|
||||||
|
unaligned for R_SPARC_16, R_SPARC_32, or R_SPARC_64, use the unaligned
|
||||||
|
relocation helper function.
|
||||||
|
|
||||||
2010-02-06 Ian Lance Taylor <iant@google.com>
|
2010-02-06 Ian Lance Taylor <iant@google.com>
|
||||||
|
|
||||||
* configure.ac: Rewrite targetobjs duplicate removal code to use
|
* configure.ac: Rewrite targetobjs duplicate removal code to use
|
||||||
|
|
|
@ -2447,14 +2447,30 @@ Target_sparc<size, big_endian>::Relocate::relocate(
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case elfcpp::R_SPARC_16:
|
case elfcpp::R_SPARC_16:
|
||||||
Relocate_functions<size, big_endian>::rela16(view, object,
|
if (rela.get_r_offset() & 0x1)
|
||||||
psymval, addend);
|
{
|
||||||
|
// The assembler can sometimes emit unaligned relocations
|
||||||
|
// for dwarf2 cfi directives.
|
||||||
|
Reloc::ua16(view, object, psymval, addend);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Relocate_functions<size, big_endian>::rela16(view, object,
|
||||||
|
psymval, addend);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case elfcpp::R_SPARC_32:
|
case elfcpp::R_SPARC_32:
|
||||||
if (!parameters->options().output_is_position_independent())
|
if (!parameters->options().output_is_position_independent())
|
||||||
Relocate_functions<size, big_endian>::rela32(view, object,
|
{
|
||||||
psymval, addend);
|
if (rela.get_r_offset() & 0x3)
|
||||||
|
{
|
||||||
|
// The assembler can sometimes emit unaligned relocations
|
||||||
|
// for dwarf2 cfi directives.
|
||||||
|
Reloc::ua32(view, object, psymval, addend);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Relocate_functions<size, big_endian>::rela32(view, object,
|
||||||
|
psymval, addend);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case elfcpp::R_SPARC_DISP8:
|
case elfcpp::R_SPARC_DISP8:
|
||||||
|
@ -2563,8 +2579,17 @@ Target_sparc<size, big_endian>::Relocate::relocate(
|
||||||
|
|
||||||
case elfcpp::R_SPARC_64:
|
case elfcpp::R_SPARC_64:
|
||||||
if (!parameters->options().output_is_position_independent())
|
if (!parameters->options().output_is_position_independent())
|
||||||
Relocate_functions<size, big_endian>::rela64(view, object,
|
{
|
||||||
psymval, addend);
|
if (rela.get_r_offset() & 0x7)
|
||||||
|
{
|
||||||
|
// The assembler can sometimes emit unaligned relocations
|
||||||
|
// for dwarf2 cfi directives.
|
||||||
|
Reloc::ua64(view, object, psymval, addend);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Relocate_functions<size, big_endian>::rela64(view, object,
|
||||||
|
psymval, addend);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case elfcpp::R_SPARC_OLO10:
|
case elfcpp::R_SPARC_OLO10:
|
||||||
|
|
Loading…
Reference in New Issue