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  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,
 
      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)
     {
 
       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
 
          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)
              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;