bfd: Fix 64-bit relocation handling for a.out
* aoutx.h (swap_std_reloc_out): Special case 64 bit relocations. (aout_link_reloc_link_order): Likewise. Make r_length an unsigned.
This commit is contained in:
parent
c2e71e57a0
commit
dfa85db14c
2 changed files with 16 additions and 3 deletions
|
@ -1,3 +1,8 @@
|
|||
2020-04-29 Gunther Nikl <gnikl@justmail.de>
|
||||
|
||||
* aoutx.h (swap_std_reloc_out): Special case 64 bit relocations.
|
||||
(aout_link_reloc_link_order): Likewise. Make r_length an unsigned.
|
||||
|
||||
2020-04-28 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* vms-alpha.c (_bfd_vms_slurp_etir): Correct divide by zero check.
|
||||
|
|
14
bfd/aoutx.h
14
bfd/aoutx.h
|
@ -1945,7 +1945,12 @@ NAME (aout, swap_std_reloc_out) (bfd *abfd,
|
|||
PUT_WORD (abfd, g->address, natptr->r_address);
|
||||
|
||||
BFD_ASSERT (g->howto != NULL);
|
||||
r_length = g->howto->size ; /* Size as a power of two. */
|
||||
|
||||
if (bfd_get_reloc_size (g->howto) != 8)
|
||||
r_length = g->howto->size; /* Size as a power of two. */
|
||||
else
|
||||
r_length = 3;
|
||||
|
||||
r_pcrel = (int) g->howto->pc_relative; /* Relative to PC? */
|
||||
/* XXX This relies on relocs coming from a.out files. */
|
||||
r_baserel = (g->howto->type & 8) != 0;
|
||||
|
@ -3803,13 +3808,16 @@ aout_link_reloc_link_order (struct aout_final_link_info *flaginfo,
|
|||
int r_baserel;
|
||||
int r_jmptable;
|
||||
int r_relative;
|
||||
int r_length;
|
||||
unsigned int r_length;
|
||||
|
||||
r_pcrel = (int) howto->pc_relative;
|
||||
r_baserel = (howto->type & 8) != 0;
|
||||
r_jmptable = (howto->type & 16) != 0;
|
||||
r_relative = (howto->type & 32) != 0;
|
||||
r_length = howto->size;
|
||||
if (bfd_get_reloc_size (howto) != 8)
|
||||
r_length = howto->size; /* Size as a power of two. */
|
||||
else
|
||||
r_length = 3;
|
||||
|
||||
PUT_WORD (flaginfo->output_bfd, p->offset, srel.r_address);
|
||||
if (bfd_header_big_endian (flaginfo->output_bfd))
|
||||
|
|
Loading…
Add table
Reference in a new issue