Index: bfd/coff-alpha.c =================================================================== RCS file: /cvs/src/src/bfd/coff-alpha.c,v retrieving revision 1.30 diff -c -3 -p -r1.30 coff-alpha.c *** bfd/coff-alpha.c 4 May 2005 15:53:01 -0000 1.30 --- bfd/coff-alpha.c 6 Jul 2005 10:23:07 -0000 *************** alpha_adjust_reloc_in (abfd, intern, rpt *** 632,638 **** arelent *rptr; { if (intern->r_type > ALPHA_R_GPVALUE) ! abort (); switch (intern->r_type) { --- 632,646 ---- arelent *rptr; { if (intern->r_type > ALPHA_R_GPVALUE) ! { ! (*_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) { *************** alpha_relocate_section (output_bfd, info *** 1521,1528 **** switch (r_type) { default: ! abort (); case ALPHA_R_IGNORE: /* This reloc appears after a GPDISP reloc. On earlier --- 1529,1554 ---- 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: ! (*_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 Index: bfd/ecoff.c =================================================================== RCS file: /cvs/src/src/bfd/ecoff.c,v retrieving revision 1.47 diff -c -3 -p -r1.47 ecoff.c *** bfd/ecoff.c 5 Jul 2005 09:45:54 -0000 1.47 --- bfd/ecoff.c 6 Jul 2005 10:23:08 -0000 *************** _bfd_ecoff_write_object_contents (bfd *a *** 2633,2638 **** --- 2633,2639 ---- 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) *************** _bfd_ecoff_write_object_contents (bfd *a *** 2646,2651 **** --- 2647,2657 ---- 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;