coff-alpha.c (alpha_adjust_reloc_in): Issue an informative error message if an

unknown reloc is encountered.
  (alpha_relocate_section): Likewise.
ecoff.c (_bfd_ecoff_write_object_contents): Cope with a reloc with a missing
  howto field.
This commit is contained in:
Nick Clifton 2005-07-06 10:35:41 +00:00
parent 5d5e6db937
commit 0adc9281f0
3 changed files with 43 additions and 2 deletions

View File

@ -1,3 +1,12 @@
2005-07-06 Nick Clifton <nickc@redhat.com>
* coff-alpha.c (alpha_adjust_reloc_in): Issue an informative error
message if an unknown reloc is encountered.
(alpha_relocate_section): Likewise.
* ecoff.c (_bfd_ecoff_write_object_contents): Cope with a reloc
with a missing howto field.
2005-07-06 Alan Modra <amodra@bigpond.net.au>
* po/SRC-POTFILES.in: Add cpu-ms1.c, elf32-ms1.c, elf-vxworks.c,

View File

@ -632,7 +632,15 @@ alpha_adjust_reloc_in (abfd, intern, rptr)
arelent *rptr;
{
if (intern->r_type > ALPHA_R_GPVALUE)
abort ();
{
(*_bfd_error_handler)
(_("%B: unknown/unsupported relocation type %d"),
abfd, intern->r_type);
bfd_set_error (bfd_error_bad_value);
rptr->addend = 0;
rptr->howto = NULL;
return;
}
switch (intern->r_type)
{
@ -1521,8 +1529,26 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section,
switch (r_type)
{
case ALPHA_R_GPRELHIGH:
(*_bfd_error_handler)
(_("%B: unsupported relocation: ALPHA_R_GPRELHIGH"),
input_bfd);
bfd_set_error (bfd_error_bad_value);
continue;
case ALPHA_R_GPRELLOW:
(*_bfd_error_handler)
(_("%B: unsupported relocation: ALPHA_R_GPRELLOW"),
input_bfd);
bfd_set_error (bfd_error_bad_value);
continue;
default:
abort ();
(*_bfd_error_handler)
(_("%B: unknown relocation type %d"),
input_bfd, (int) r_type);
bfd_set_error (bfd_error_bad_value);
continue;
case ALPHA_R_IGNORE:
/* This reloc appears after a GPDISP reloc. On earlier

View File

@ -2633,6 +2633,7 @@ _bfd_ecoff_write_object_contents (bfd *abfd)
reloc_ptr_ptr = current->orelocation;
reloc_end = reloc_ptr_ptr + current->reloc_count;
out_ptr = (char *) reloc_buff;
for (;
reloc_ptr_ptr < reloc_end;
reloc_ptr_ptr++, out_ptr += external_reloc_size)
@ -2646,6 +2647,11 @@ _bfd_ecoff_write_object_contents (bfd *abfd)
reloc = *reloc_ptr_ptr;
sym = *reloc->sym_ptr_ptr;
/* If the howto field has not been initialised then skip this reloc.
This assumes that an error message has been issued elsewhere. */
if (reloc->howto == NULL)
continue;
in.r_vaddr = (reloc->address
+ bfd_get_section_vma (abfd, current));
in.r_type = reloc->howto->type;