{ bfd_set_error (bfd_error_no_memory); return false; }
return false;
bfd_mips_ecoff_create_embedded_relocs (abfd, info, datasec, relsec, errmsg)     bfd *abfd;     struct bfd_link_info *info;     asection *datasec;     asection *relsec;     char **errmsg;{  struct ecoff_link_hash_entry **sym_hashes;  struct ecoff_section_tdata *section_tdata;  struct external_reloc *ext_rel;  struct external_reloc *ext_rel_end;  bfd_byte *p;  BFD_ASSERT (! info->relocateable);  *errmsg = NULL;  if (datasec->reloc_count == 0)    return true;  sym_hashes = ecoff_data (abfd)->sym_hashes;  if (! mips_read_relocs (abfd, datasec))    return false;  relsec->contents = (bfd_byte *) bfd_alloc (abfd, datasec->reloc_count * 4);  if (relsec->contents == NULL)    {      bfd_set_error (bfd_error_no_memory);      return false;    }  p = relsec->contents;  section_tdata = ecoff_section_data (abfd, datasec);  ext_rel = (struct external_reloc *) section_tdata->external_relocs;  ext_rel_end = ext_rel + datasec->reloc_count;  for (; ext_rel < ext_rel_end; ext_rel++, p += 4)    {      struct internal_reloc int_rel;      boolean text_relative;      mips_ecoff_swap_reloc_in (abfd, (PTR) ext_rel, &int_rel);      /* We are going to write a four byte word into the runtime reloc	 section.  The word will be the address in the data section	 which must be relocated.  This must be on a word boundary,	 which means the lower two bits must be zero.  We use the	 least significant bit to indicate how the value in the data	 section must be relocated.  A 0 means that the value is	 relative to the text section, while a 1 indicates that the	 value is relative to the data section.  Given that we are	 assuming the code was compiled using -membedded-pic, there	 should not be any other possibilities.  */      /* We can only relocate REFWORD relocs at run time.  */      if (int_rel.r_type != MIPS_R_REFWORD)	{	  *errmsg = "unsupported reloc type";	  bfd_set_error (bfd_error_bad_value);	  return false;	}      if (int_rel.r_extern)	{	  struct ecoff_link_hash_entry *h;	  h = sym_hashes[int_rel.r_symndx];	  /* If h is NULL, that means that there is a reloc against an	     external symbol which we thought was just a debugging	     symbol.  This should not happen.  */	  if (h == (struct ecoff_link_hash_entry *) NULL)	    abort ();	  if ((h->root.type == bfd_link_hash_defined	       || h->root.type == bfd_link_hash_defweak)	      && (h->root.u.def.section->flags & SEC_CODE) != 0)	    text_relative = true;	  else	    text_relative = false;	}      else	{	  switch (int_rel.r_symndx)	    {	    case RELOC_SECTION_TEXT:	      text_relative = true;	      break;	    case RELOC_SECTION_SDATA:	    case RELOC_SECTION_SBSS:	    case RELOC_SECTION_LIT8:	      text_relative = false;	      break;	    default:	      /* No other sections should appear in -membedded-pic                 code.  */	      *errmsg = "reloc against unsupported section";	      bfd_set_error (bfd_error_bad_value);	      return false;	    }	}      if ((int_rel.r_offset & 3) != 0)	{	  *errmsg = "reloc not properly aligned";	  bfd_set_error (bfd_error_bad_value);	  return false;	}      bfd_put_32 (abfd,		  (int_rel.r_vaddr - datasec->vma + datasec->output_offset		   + (text_relative ? 0 : 1)),		  p);    }  return true;}