PowerPC64 GOLD: complain on misaligned _DS relocs
PR 18010 * powerpc.cc (Powerpc_relocate_functions::addr16_ds): Always complain if value is not a multiple of four. (Target_powerpc::Relocate::relocate): Correct handling of R_POWERPC_GOT_TPREL16 and R_POWERPC_GOT_TPREL16_LO for ppc64.
This commit is contained in:
parent
ecfe515167
commit
ec86f43468
|
@ -1,3 +1,11 @@
|
|||
2015-02-24 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 18010
|
||||
* powerpc.cc (Powerpc_relocate_functions::addr16_ds): Always
|
||||
complain if value is not a multiple of four.
|
||||
(Target_powerpc::Relocate::relocate): Correct handling of
|
||||
R_POWERPC_GOT_TPREL16 and R_POWERPC_GOT_TPREL16_LO for ppc64.
|
||||
|
||||
2015-02-21 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* configure.ac (default_size): Set to 32 for x32.
|
||||
|
|
|
@ -1650,7 +1650,7 @@ public:
|
|||
addr16_ds(unsigned char* view, Address value, Overflow_check overflow)
|
||||
{
|
||||
Status stat = This::template rela<16,16>(view, 0, 0xfffc, value, overflow);
|
||||
if (overflow != CHECK_NONE && (value & 3) != 0)
|
||||
if ((value & 3) != 0)
|
||||
stat = STATUS_OVERFLOW;
|
||||
return stat;
|
||||
}
|
||||
|
@ -7597,8 +7597,11 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
|
|||
|
||||
case elfcpp::R_POWERPC_GOT_DTPREL16:
|
||||
case elfcpp::R_POWERPC_GOT_DTPREL16_LO:
|
||||
case elfcpp::R_POWERPC_GOT_TPREL16:
|
||||
case elfcpp::R_POWERPC_GOT_TPREL16_LO:
|
||||
if (size == 64)
|
||||
{
|
||||
// On ppc64 these are all ds form
|
||||
status = Reloc::addr16_ds(view, value, overflow);
|
||||
break;
|
||||
}
|
||||
|
@ -7611,7 +7614,6 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
|
|||
case elfcpp::R_POWERPC_DTPREL16:
|
||||
case elfcpp::R_POWERPC_GOT_TLSGD16:
|
||||
case elfcpp::R_POWERPC_GOT_TLSLD16:
|
||||
case elfcpp::R_POWERPC_GOT_TPREL16:
|
||||
case elfcpp::R_POWERPC_ADDR16_LO:
|
||||
case elfcpp::R_POWERPC_REL16_LO:
|
||||
case elfcpp::R_PPC64_TOC16_LO:
|
||||
|
@ -7621,7 +7623,6 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
|
|||
case elfcpp::R_POWERPC_DTPREL16_LO:
|
||||
case elfcpp::R_POWERPC_GOT_TLSGD16_LO:
|
||||
case elfcpp::R_POWERPC_GOT_TLSLD16_LO:
|
||||
case elfcpp::R_POWERPC_GOT_TPREL16_LO:
|
||||
status = Reloc::addr16(view, value, overflow);
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in New Issue