* elf-bfd.h (bfd_elf_perform_complex_relocation): Update prototype.
* elflink.c (bfd_elf_perform_complex_relocation): Return status. Don't print reloc overflow message. * elf32-mep.c (mep_elf_relocate_section): Handle status from bfd_elf_perform_complex_relocation.
This commit is contained in:
parent
8baca0f320
commit
cdfeee4f47
@ -1,3 +1,11 @@
|
||||
2007-11-19 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* elf-bfd.h (bfd_elf_perform_complex_relocation): Update prototype.
|
||||
* elflink.c (bfd_elf_perform_complex_relocation): Return status.
|
||||
Don't print reloc overflow message.
|
||||
* elf32-mep.c (mep_elf_relocate_section): Handle status from
|
||||
bfd_elf_perform_complex_relocation.
|
||||
|
||||
2007-11-17 Thiemo Seufer <ths@mips.com>
|
||||
|
||||
* elfxx-mips.c (mips_elf_merge_obj_attributes): Handle -mips32r2
|
||||
|
@ -1814,7 +1814,7 @@ extern bfd_boolean _bfd_elf_dynamic_symbol_p
|
||||
extern bfd_boolean _bfd_elf_symbol_refs_local_p
|
||||
(struct elf_link_hash_entry *, struct bfd_link_info *, bfd_boolean);
|
||||
|
||||
extern void bfd_elf_perform_complex_relocation
|
||||
extern bfd_reloc_status_type bfd_elf_perform_complex_relocation
|
||||
(bfd *, asection *, bfd_byte *, Elf_Internal_Rela *, bfd_vma);
|
||||
|
||||
extern bfd_boolean _bfd_elf_setup_sections
|
||||
|
@ -513,18 +513,12 @@ mep_elf_relocate_section
|
||||
if (info->relocatable)
|
||||
continue;
|
||||
|
||||
switch (r_type)
|
||||
{
|
||||
case R_RELC:
|
||||
bfd_elf_perform_complex_relocation (input_bfd, input_section,
|
||||
contents, rel, relocation);
|
||||
continue;
|
||||
|
||||
default:
|
||||
r = mep_final_link_relocate (howto, input_bfd, input_section,
|
||||
contents, rel, relocation);
|
||||
break;
|
||||
}
|
||||
if (r_type == R_RELC)
|
||||
r = bfd_elf_perform_complex_relocation (input_bfd, input_section,
|
||||
contents, rel, relocation);
|
||||
else
|
||||
r = mep_final_link_relocate (howto, input_bfd, input_section,
|
||||
contents, rel, relocation);
|
||||
|
||||
if (r != bfd_reloc_ok)
|
||||
{
|
||||
|
@ -7646,15 +7646,16 @@ decode_complex_addend (unsigned long *start, /* in bits */
|
||||
* trunc_p = (encoded >> 29) & 1;
|
||||
}
|
||||
|
||||
void
|
||||
bfd_reloc_status_type
|
||||
bfd_elf_perform_complex_relocation (bfd *input_bfd,
|
||||
asection *input_section,
|
||||
asection *input_section ATTRIBUTE_UNUSED,
|
||||
bfd_byte *contents,
|
||||
Elf_Internal_Rela *rel,
|
||||
bfd_vma relocation)
|
||||
{
|
||||
bfd_vma shift, x, mask;
|
||||
unsigned long start, oplen, len, wordsz, chunksz, lsb0_p, signed_p, trunc_p;
|
||||
bfd_reloc_status_type r;
|
||||
|
||||
/* Perform this reloc, since it is complex.
|
||||
(this is not to say that it necessarily refers to a complex
|
||||
@ -7684,20 +7685,14 @@ bfd_elf_perform_complex_relocation (bfd *input_bfd,
|
||||
oplen, x, mask, relocation);
|
||||
#endif
|
||||
|
||||
r = bfd_reloc_ok;
|
||||
if (! trunc_p)
|
||||
{
|
||||
/* Now do an overflow check. */
|
||||
if (bfd_check_overflow ((signed_p
|
||||
? complain_overflow_signed
|
||||
: complain_overflow_unsigned),
|
||||
len, 0, (8 * wordsz),
|
||||
relocation) == bfd_reloc_overflow)
|
||||
(*_bfd_error_handler)
|
||||
("%s (%s + 0x%lx): relocation overflow: 0x%lx %sdoes not fit "
|
||||
"within 0x%lx",
|
||||
input_bfd->filename, input_section->name, rel->r_offset,
|
||||
relocation, (signed_p ? "(signed) " : ""), mask);
|
||||
}
|
||||
/* Now do an overflow check. */
|
||||
r = bfd_check_overflow ((signed_p
|
||||
? complain_overflow_signed
|
||||
: complain_overflow_unsigned),
|
||||
len, 0, (8 * wordsz),
|
||||
relocation);
|
||||
|
||||
/* Do the deed. */
|
||||
x = (x & ~(mask << shift)) | ((relocation & mask) << shift);
|
||||
@ -7711,6 +7706,7 @@ bfd_elf_perform_complex_relocation (bfd *input_bfd,
|
||||
((relocation & mask) << shift), x);
|
||||
#endif
|
||||
put_value (wordsz, chunksz, input_bfd, x, contents + rel->r_offset);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* When performing a relocatable link, the input relocations are
|
||||
|
Loading…
Reference in New Issue
Block a user