fnname = (char *) malloc (strlen (h->root.root.string) + 2);
fnname = (char *) bfd_malloc (strlen (h->root.root.string) + 2);
bfd_xcoff_export_symbol (output_bfd, info, harg, syscall)     bfd *output_bfd;     struct bfd_link_info *info;     struct bfd_link_hash_entry *harg;     boolean syscall;{  struct xcoff_link_hash_entry *h = (struct xcoff_link_hash_entry *) harg;  if (! XCOFF_XVECP (output_bfd->xvec))    return true;  h->flags |= XCOFF_EXPORT;  /* FIXME: I'm not at all sure what syscall is supposed to mean, so     I'm just going to ignore it until somebody explains it.  */  /* See if this is a function descriptor.  It may be one even though     it is not so marked.  */  if ((h->flags & XCOFF_DESCRIPTOR) == 0      && h->root.root.string[0] != '.')    {      char *fnname;      struct xcoff_link_hash_entry *hfn;      fnname = (char *) malloc (strlen (h->root.root.string) + 2);      if (fnname == NULL)	{	  bfd_set_error (bfd_error_no_memory);	  return false;	}      fnname[0] = '.';      strcpy (fnname + 1, h->root.root.string);      hfn = xcoff_link_hash_lookup (xcoff_hash_table (info),				    fnname, false, false, true);      free (fnname);      if (hfn != NULL	  && hfn->smclas == XMC_PR	  && (hfn->root.type == bfd_link_hash_defined	      || hfn->root.type == bfd_link_hash_defweak))	{	  h->flags |= XCOFF_DESCRIPTOR;	  h->descriptor = hfn;	  hfn->descriptor = h;	}    }  /* Make sure we don't garbage collect this symbol.  */  if (! xcoff_mark_symbol (info, h))    return false;  /* If this is a function descriptor, make sure we don't garbage     collect the associated function code.  We normally don't have to     worry about this, because the descriptor will be attached to a     section with relocs, but if we are creating the descriptor     ourselves those relocs will not be visible to the mark code.  */  if ((h->flags & XCOFF_DESCRIPTOR) != 0)    {      if (! xcoff_mark_symbol (info, h->descriptor))	return false;    }  return true;}