{ bfd_set_error (bfd_error_no_memory); return false; }
return false;
oasys_slurp_symbol_table (abfd)     bfd *CONST abfd;{  oasys_record_union_type record;  oasys_data_type *data = OASYS_DATA (abfd);  boolean loop = true;  asymbol *dest_defined;  asymbol *dest;  char *string_ptr;  if (data->symbols != (asymbol *) NULL)    {      return true;    }  /* Buy enough memory for all the symbols and all the names */  data->symbols =    (asymbol *) bfd_alloc (abfd, sizeof (asymbol) * abfd->symcount);#ifdef UNDERSCORE_HACK  /* buy 1 more char for each symbol to keep the underscore in*/  data->strings = bfd_alloc (abfd, data->symbol_string_length +			     abfd->symcount);#else  data->strings = bfd_alloc (abfd, data->symbol_string_length);#endif  if (!data->symbols || !data->strings)    {      bfd_set_error (bfd_error_no_memory);      return false;    }  dest_defined = data->symbols + abfd->symcount - 1;  string_ptr = data->strings;  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)    return false;  while (loop)    {      if (! oasys_read_record (abfd, &record))	return false;      switch (record.header.type)	{	case oasys_record_is_header_enum:	  break;	case oasys_record_is_local_enum:	case oasys_record_is_symbol_enum:	  {	    int flag = record.header.type == (int) oasys_record_is_local_enum ?	    (BSF_LOCAL) : (BSF_GLOBAL | BSF_EXPORT);	    size_t length = oasys_string_length (&record);	    switch (record.symbol.relb & RELOCATION_TYPE_BITS)	      {	      case RELOCATION_TYPE_ABS:		dest = dest_defined--;		dest->section = bfd_abs_section_ptr;		dest->flags = 0;		break;	      case RELOCATION_TYPE_REL:		dest = dest_defined--;		dest->section =		  OASYS_DATA (abfd)->sections[record.symbol.relb &					      RELOCATION_SECT_BITS];		if (record.header.type == (int) oasys_record_is_local_enum)		  {		    dest->flags = BSF_LOCAL;		    if (dest->section == (asection *) (~0))		      {			/* It seems that sometimes internal symbols are tied up, but		       still get output, even though there is no		       section */			dest->section = 0;		      }		  }		else		  {		    dest->flags = flag;		  }		break;	      case RELOCATION_TYPE_UND:		dest = data->symbols + bfd_h_get_16 (abfd, record.symbol.refno);		dest->section = bfd_und_section_ptr;		break;	      case RELOCATION_TYPE_COM:		dest = dest_defined--;		dest->name = string_ptr;		dest->the_bfd = abfd;		dest->section = bfd_com_section_ptr;		break;	      default:		dest = dest_defined--;		BFD_ASSERT (0);		break;	      }	    dest->name = string_ptr;	    dest->the_bfd = abfd;	    dest->udata.p = (PTR) NULL;	    dest->value = bfd_h_get_32 (abfd, record.symbol.value);#ifdef UNDERSCORE_HACK	    if (record.symbol.name[0] != '_')	      {		string_ptr[0] = '_';		string_ptr++;	      }#endif	    memcpy (string_ptr, record.symbol.name, length);	    string_ptr[length] = 0;	    string_ptr += length + 1;	  }	  break;	default:	  loop = false;	}    }  return true;}