{ bfd_set_error (bfd_error_no_memory); return 0; }
return 0;
aix386_core_file_p (abfd)     bfd *abfd;{  int i,n;  unsigned char longbuf[4];	/* Raw bytes of various header fields */  int core_size = sizeof (struct corehdr);  struct corehdr *core;  struct mergem {    struct trad_core_struct coredata;    struct corehdr internal_core;  } *mergem;  if (bfd_read ((PTR)longbuf, 1, sizeof (longbuf), abfd) != sizeof (longbuf))    {      if (bfd_get_error () != bfd_error_system_call)	bfd_set_error (bfd_error_wrong_format);      return 0;    }  if (strncmp(longbuf,COR_MAGIC,4)) return 0;  if (bfd_seek (abfd, 0L, false) < 0) return 0;  mergem = (struct mergem *)bfd_zalloc (abfd, sizeof (struct mergem));  if (mergem == NULL)    {      bfd_set_error (bfd_error_no_memory);      return 0;    }  core = &mergem->internal_core;  if ((bfd_read ((PTR) core, 1, core_size, abfd)) != core_size)    {      if (bfd_get_error () != bfd_error_system_call)	bfd_set_error (bfd_error_wrong_format);      bfd_release (abfd, (char *)mergem);      return 0;    }  set_tdata (abfd, &mergem->coredata);  core_hdr (abfd) = core;  /* create the sections.  This is raunchy, but bfd_close wants to reclaim     them */  core_regsec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));  if (core_regsec (abfd) == NULL)    {    loser:      bfd_set_error (bfd_error_no_memory);      bfd_release (abfd, (char *)mergem);      return 0;    }  core_reg2sec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));  if (core_reg2sec (abfd) == NULL)    {    loser1:     bfd_release (abfd, core_regsec (abfd));      goto loser;    }  for (i=0, n=0 ; (i < MAX_CORE_SEGS) && (core->cd_segs[i].cs_type) ; i++)    {      if (core->cd_segs[i].cs_offset == 0)	continue;      core_section (abfd,n) =	(asection *) bfd_zalloc (abfd, sizeof (asection));      if (core_section (abfd,n) == NULL)	{	  int j;	  if (n > 0)	    {	      for (j=0; j < n; j++)		bfd_release (abfd, core_section(abfd, j));	    }	  bfd_release (abfd, (char *)mergem);	  goto loser1;	}      switch (core->cd_segs[i].cs_type)	{	case COR_TYPE_DATA:	  core_section (abfd, n)->name = ".data";	  core_section (abfd, n)->flags = (SEC_ALLOC + SEC_LOAD +					   SEC_HAS_CONTENTS);	  break;	case COR_TYPE_STACK:	  core_section (abfd, n)->name = ".stack";	  core_section (abfd, n)->flags = (SEC_ALLOC + SEC_LOAD +					   SEC_HAS_CONTENTS);	  break;	case COR_TYPE_LIBDATA:	  core_section (abfd, n)->name = ".libdata";	  core_section (abfd, n)->flags = (SEC_ALLOC + SEC_HAS_CONTENTS);	  break;	case COR_TYPE_WRITE:	  core_section (abfd, n)->name = ".writeable";	  core_section (abfd, n)->flags = (SEC_ALLOC + SEC_HAS_CONTENTS);	  break;	case COR_TYPE_MSC:	  core_section (abfd, n)->name = ".misc";	  core_section (abfd, n)->flags = (SEC_ALLOC + SEC_HAS_CONTENTS);	  break;	default:	  core_section (abfd, n)->name = ".unknown";	  core_section (abfd, n)->flags = (SEC_ALLOC + SEC_HAS_CONTENTS);	  break;	}      core_section (abfd, n)->_raw_size = core->cd_segs[i].cs_len;      core_section (abfd, n)->vma       = core->cd_segs[i].cs_address;      core_section (abfd, n)->filepos   = core->cd_segs[i].cs_offset;      core_section (abfd, n)->alignment_power = 2;      core_section (abfd, n)->next      = NULL;      if (n > 0)	core_section (abfd, (n-1))->next = core_section (abfd, n);      abfd->section_count = ++n;    }  core_regsec (abfd)->name = ".reg";  core_reg2sec (abfd)->name = ".reg2";  core_regsec (abfd)->flags = SEC_HAS_CONTENTS;  core_reg2sec (abfd)->flags = SEC_HAS_CONTENTS;  core_regsec (abfd)->_raw_size = sizeof(core->cd_regs);  core_reg2sec (abfd)->_raw_size = sizeof(core->cd_fpregs);  core_regsec (abfd)->vma = -1;  core_reg2sec (abfd)->vma = -1;  /* We'll access the regs afresh in the core file, like any section: */  core_regsec (abfd)->filepos = (file_ptr)offsetof(struct corehdr,cd_regs[0]);  core_reg2sec (abfd)->filepos = (file_ptr)offsetof(struct corehdr,						    cd_fpregs);  /* add the 2 reg fake sections to abfd */  abfd->section_count += 2;  abfd->sections = core_regsec (abfd);  core_regsec (abfd)->next = core_reg2sec (abfd);  core_reg2sec (abfd)->next = core_section (abfd, 0);  return abfd->xvec;}