name = strdup (name); if (name == NULL) as_fatal ("virtual memory exhausted");
name = xstrdup (name);
s_mri_sect (type)     char *type;{#ifdef TC_M68K  char *name;  char c;  segT seg;  SKIP_WHITESPACE ();    name = input_line_pointer;  if (! isdigit ((unsigned char) *name))    c = get_symbol_end ();  else    {      do	{	  ++input_line_pointer;	}      while (isdigit ((unsigned char) *input_line_pointer));      c = *input_line_pointer;      *input_line_pointer = '\0';    }  name = strdup (name);  if (name == NULL)    as_fatal ("virtual memory exhausted");  *input_line_pointer = c;  seg = subseg_new (name, 0);  if (*input_line_pointer == ',')    {      int align;      ++input_line_pointer;      align = get_absolute_expression ();      record_alignment (seg, align);    }  *type = '\0';  if (*input_line_pointer == ',')    {      c = *++input_line_pointer;      c = toupper ((unsigned char) c);      if (c == 'C' || c == 'D' || c == 'M' || c == 'R')	*type = c;      else	as_bad ("unrecognized section type");      ++input_line_pointer;#ifdef BFD_ASSEMBLER      {	flagword flags;	flags = SEC_NO_FLAGS;	if (*type == 'C')	  flags = SEC_CODE;	else if (*type == 'D')	  flags = SEC_DATA;	else if (*type == 'R')	  flags = SEC_ROM;	if (flags != SEC_NO_FLAGS)	  {	    if (! bfd_set_section_flags (stdoutput, seg, flags))	      as_warn ("error setting flags for \"%s\": %s",		       bfd_section_name (stdoutput, seg),		       bfd_errmsg (bfd_get_error ()));	  }      }#endif    }  /* Ignore the HP type.  */  if (*input_line_pointer == ',')    input_line_pointer += 2;  demand_empty_rest_of_line ();#else /* ! TC_M68K */#ifdef TC_I960  char *name;  char c;  segT seg;  SKIP_WHITESPACE ();  name = input_line_pointer;  c = get_symbol_end ();  name = strdup (name);  if (name == NULL)    as_fatal ("virtual memory exhausted");  *input_line_pointer = c;  seg = subseg_new (name, 0);  if (*input_line_pointer != ',')    *type = 'C';  else    {      char *sectype;      ++input_line_pointer;      SKIP_WHITESPACE ();      sectype = input_line_pointer;      c = get_symbol_end ();      if (*sectype == '\0')	*type = 'C';      else if (strcasecmp (sectype, "text") == 0)	*type = 'C';      else if (strcasecmp (sectype, "data") == 0)	*type = 'D';      else if (strcasecmp (sectype, "romdata") == 0)	*type = 'R';      else	as_warn ("unrecognized section type `%s'", sectype);      *input_line_pointer = c;    }  if (*input_line_pointer == ',')    {      char *seccmd;      ++input_line_pointer;      SKIP_WHITESPACE ();      seccmd = input_line_pointer;      c = get_symbol_end ();      if (strcasecmp (seccmd, "absolute") == 0)	{	  as_bad ("absolute sections are not supported");	  *input_line_pointer = c;	  ignore_rest_of_line ();	  return;	}      else if (strcasecmp (seccmd, "align") == 0)	{	  int align;	  *input_line_pointer = c;	  align = get_absolute_expression ();	  record_alignment (seg, align);	}      else	{	  as_warn ("unrecognized section command `%s'", seccmd);	  *input_line_pointer = c;	}    }  demand_empty_rest_of_line ();	  #else /* ! TC_I960 */  /* The MRI assembler seems to use different forms of .sect for     different targets.  */  abort ();#endif /* ! TC_I960 */#endif /* ! TC_M68K */}