{ bfd_set_error (bfd_error_no_memory); return 0; }
return 0;
process_embedded_commands (output_bfd, info,  abfd)     bfd *output_bfd;     struct bfd_link_info *info;     bfd *abfd;{  asection *sec = bfd_get_section_by_name (abfd, ".drectve");  char *s;  char *e;  char *copy;  if (!sec)     return 1;    copy = malloc ((size_t) sec->_raw_size);  if (!copy)     {      bfd_set_error (bfd_error_no_memory);      return 0;    }  if (! bfd_get_section_contents(abfd, sec, copy, 0, sec->_raw_size))     {      free (copy);      return 0;    }  e = copy + sec->_raw_size;  for (s = copy;  s < e ; )     {      if (s[0]!= '-') {	s++;	continue;      }      if (strncmp (s,"-attr", 5) == 0)	{	  char *name;	  char *attribs;	  asection *asec;	  int loop = 1;	  int had_write = 0;	  int had_read = 0;	  int had_exec= 0;	  int had_shared= 0;	  s += 5;	  s = get_name(s, &name);	  s = get_name(s, &attribs);	  while (loop) {	    switch (*attribs++) 	      {	      case 'W':		had_write = 1;		break;	      case 'R':		had_read = 1;		break;	      case 'S':		had_shared = 1;		break;	      case 'X':		had_exec = 1;		break;	      default:		loop = 0;	      }	  }	  asec = bfd_get_section_by_name (abfd, name);	  if (asec) {	    if (had_exec)	      asec->flags |= SEC_CODE;	    if (!had_write)	      asec->flags |= SEC_READONLY;	  }	}      else if (strncmp (s,"-heap", 5) == 0)	{	  s = dores_com (s+5, output_bfd, 1);	}      else if (strncmp (s,"-stack", 6) == 0)	{	  s = dores_com (s+6, output_bfd, 0);	}      else 	s++;    }  free (copy);  return 1;}