Do exception offset computations in 64 bits, not 32.

This fixes clang-built binaries on a gcc powerpc64 world.  Gets us one step
closer to a clang-built world.  The same change was made in later upstream
binutils.

Submitted by:	rdivacky
MFC after:	2 weeks
This commit is contained in:
Justin Hibbits 2017-10-11 02:39:20 +00:00
parent e312709278
commit 7a174c3469

View File

@ -1344,7 +1344,7 @@ _bfd_elf_write_section_eh_frame (bfd *abfd,
val = read_value (abfd, buf, per_width,
get_DW_EH_PE_signed (per_encoding));
val += ent->offset - ent->new_offset;
val += (bfd_vma)ent->offset - ent->new_offset;
val -= extra_string + extra_data;
write_value (abfd, buf, val, per_width);
action &= ~4;
@ -1400,7 +1400,7 @@ _bfd_elf_write_section_eh_frame (bfd *abfd,
}
break;
case DW_EH_PE_pcrel:
value += ent->offset - ent->new_offset;
value += (bfd_vma)ent->offset - ent->new_offset;
address += sec->output_section->vma + ent->offset + 8;
break;
}
@ -1428,7 +1428,7 @@ _bfd_elf_write_section_eh_frame (bfd *abfd,
if (value)
{
if ((ent->lsda_encoding & 0xf0) == DW_EH_PE_pcrel)
value += ent->offset - ent->new_offset;
value += (bfd_vma)ent->offset - ent->new_offset;
else if (ent->cie_inf->need_lsda_relative)
value -= (sec->output_section->vma + ent->new_offset + 8
+ ent->lsda_offset);