mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 01:50:24 +08:00
Check PC-relative offset overflow in PLT entry
PR gold/17619 * x86_64.cc (Output_data_plt_x86_64_standard<size>::do_fill_plt_entry): Check PC-relative offset overflow in PLT entry.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2014-11-21 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR gold/17619
|
||||||
|
* x86_64.cc (Output_data_plt_x86_64_standard<size>::do_fill_plt_entry):
|
||||||
|
Check PC-relative offset overflow in PLT entry.
|
||||||
|
|
||||||
2014-11-21 Alan Modra <amodra@gmail.com>
|
2014-11-21 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* powerpc.cc (Target_powerpc::Relocate::relocate): Correct test
|
* powerpc.cc (Target_powerpc::Relocate::relocate): Correct test
|
||||||
|
@ -1516,11 +1516,16 @@ Output_data_plt_x86_64_standard<size>::do_fill_plt_entry(
|
|||||||
unsigned int plt_offset,
|
unsigned int plt_offset,
|
||||||
unsigned int plt_index)
|
unsigned int plt_index)
|
||||||
{
|
{
|
||||||
|
// Check PC-relative offset overflow in PLT entry.
|
||||||
|
uint64_t plt_got_pcrel_offset = (got_address + got_offset
|
||||||
|
- (plt_address + plt_offset + 6));
|
||||||
|
if (Bits<32>::has_overflow(plt_got_pcrel_offset))
|
||||||
|
gold_error(_("PC-relative offset overflow in PLT entry %d"),
|
||||||
|
plt_index + 1);
|
||||||
|
|
||||||
memcpy(pov, plt_entry, plt_entry_size);
|
memcpy(pov, plt_entry, plt_entry_size);
|
||||||
elfcpp::Swap_unaligned<32, false>::writeval(pov + 2,
|
elfcpp::Swap_unaligned<32, false>::writeval(pov + 2,
|
||||||
(got_address + got_offset
|
plt_got_pcrel_offset);
|
||||||
- (plt_address + plt_offset
|
|
||||||
+ 6)));
|
|
||||||
|
|
||||||
elfcpp::Swap_unaligned<32, false>::writeval(pov + 7, plt_index);
|
elfcpp::Swap_unaligned<32, false>::writeval(pov + 7, plt_index);
|
||||||
elfcpp::Swap<32, false>::writeval(pov + 12,
|
elfcpp::Swap<32, false>::writeval(pov + 12,
|
||||||
|
Reference in New Issue
Block a user