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
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=324511

View File

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