ieee_error (info, (const bfd_byte *) NULL, "stack overflow");
ieee_error (info, (const bfd_byte *) NULL, _("stack overflow"));
parse_ieee_bb (info, pp)     struct ieee_info *info;     const bfd_byte **pp;{  const bfd_byte *block_start;  bfd_byte b;  bfd_vma size;  const char *name;  unsigned long namlen;  char *namcopy;  unsigned int fnindx;  boolean skip;  block_start = *pp;  b = **pp;  ++*pp;  if (! ieee_read_number (info, pp, &size)      || ! ieee_read_id (info, pp, &name, &namlen))    return false;  fnindx = (unsigned int) -1;  skip = false;  switch (b)    {    case 1:      /* BB1: Type definitions local to a module.  */      namcopy = savestring (name, namlen);      if (namcopy == NULL)	return false;      if (! debug_set_filename (info->dhandle, namcopy))	return false;      info->saw_filename = true;      /* Discard any variables or types we may have seen before.  */      if (info->vars.vars != NULL)	free (info->vars.vars);      info->vars.vars = NULL;      info->vars.alloc = 0;      if (info->types.types != NULL)	free (info->types.types);      info->types.types = NULL;      info->types.alloc = 0;      /* Initialize the types to the global types.  */      if (info->global_types != NULL)	{	  info->types.alloc = info->global_types->alloc;	  info->types.types = ((struct ieee_type *)			       xmalloc (info->types.alloc					* sizeof (*info->types.types)));	  memcpy (info->types.types, info->global_types->types,		  info->types.alloc * sizeof (*info->types.types));	}      break;    case 2:      /* BB2: Global type definitions.  The name is supposed to be	 empty, but we don't check. */      if (! debug_set_filename (info->dhandle, "*global*"))	return false;      info->saw_filename = true;      break;    case 3:      /* BB3: High level module block begin.  We don't have to do	 anything here.  The name is supposed to be the same as for	 the BB1, but we don't check.  */      break;    case 4:      /* BB4: Global function.  */      {	bfd_vma stackspace, typindx, offset;	debug_type return_type;	if (! ieee_read_number (info, pp, &stackspace)	    || ! ieee_read_number (info, pp, &typindx)	    || ! ieee_read_expression (info, pp, &offset))	  return false;	/* We have no way to record the stack space.  FIXME.  */	if (typindx < 256)	  {	    return_type = ieee_builtin_type (info, block_start, typindx);	    if (return_type == DEBUG_TYPE_NULL)	      return false;	  }	else	  {	    typindx -= 256;	    if (! ieee_alloc_type (info, typindx, true))	      return false;	    fnindx = typindx;	    return_type = info->types.types[typindx].type;	    if (debug_get_type_kind (info->dhandle, return_type)		== DEBUG_KIND_FUNCTION)	      return_type = debug_get_return_type (info->dhandle,						   return_type);	  }	namcopy = savestring (name, namlen);	if (namcopy == NULL)	  return false;	if (! debug_record_function (info->dhandle, namcopy, return_type,				     true, offset))	  return false;      }      break;    case 5:      /* BB5: File name for source line numbers.  */      {	unsigned int i;	/* We ignore the date and time.  FIXME.  */	for (i = 0; i < 6; i++)	  {	    bfd_vma ignore;	    boolean present;	    if (! ieee_read_optional_number (info, pp, &ignore, &present))	      return false;	    if (! present)	      break;	  }	namcopy = savestring (name, namlen);	if (namcopy == NULL)	  return false;	if (! debug_start_source (info->dhandle, namcopy))	  return false;      }      break;    case 6:      /* BB6: Local function or block.  */      {	bfd_vma stackspace, typindx, offset;	if (! ieee_read_number (info, pp, &stackspace)	    || ! ieee_read_number (info, pp, &typindx)	    || ! ieee_read_expression (info, pp, &offset))	  return false;	/* We have no way to record the stack space.  FIXME.  */	if (namlen == 0)	  {	    if (! debug_start_block (info->dhandle, offset))	      return false;	    /* Change b to indicate that this is a block	       rather than a function.  */	    b = 0x86;	  }	else	  {	    /* The MRI C++ compiler will output a fake function named	       __XRYCPP to hold C++ debugging information.  We skip	       that function.  This is not crucial, but it makes	       converting from IEEE to other debug formats work	       better.  */	    if (strncmp (name, "__XRYCPP", namlen) == 0)	      skip = true;	    else	      {		debug_type return_type;		if (typindx < 256)		  {		    return_type = ieee_builtin_type (info, block_start,						     typindx);		    if (return_type == NULL)		      return false;		  }		else		  {		    typindx -= 256;		    if (! ieee_alloc_type (info, typindx, true))		      return false;		    fnindx = typindx;		    return_type = info->types.types[typindx].type;		    if (debug_get_type_kind (info->dhandle, return_type)			== DEBUG_KIND_FUNCTION)		      return_type = debug_get_return_type (info->dhandle,							   return_type);		  }		namcopy = savestring (name, namlen);		if (namcopy == NULL)		  return false;		if (! debug_record_function (info->dhandle, namcopy,					     return_type, false, offset))		  return false;	      }	  }      }      break;    case 10:      /* BB10: Assembler module scope.  In the normal case, we	 completely ignore all this information.  FIXME.  */      {	const char *inam, *vstr;	unsigned long inamlen, vstrlen;	bfd_vma tool_type;	boolean present;	unsigned int i;	if (! info->saw_filename)	  {	    namcopy = savestring (name, namlen);	    if (namcopy == NULL)	      return false;	    if (! debug_set_filename (info->dhandle, namcopy))	      return false;	    info->saw_filename = true;	  }	if (! ieee_read_id (info, pp, &inam, &inamlen)	    || ! ieee_read_number (info, pp, &tool_type)	    || ! ieee_read_optional_id (info, pp, &vstr, &vstrlen, &present))	  return false;	for (i = 0; i < 6; i++)	  {	    bfd_vma ignore;	    if (! ieee_read_optional_number (info, pp, &ignore, &present))	      return false;	    if (! present)	      break;	  }      }      break;    case 11:      /* BB11: Module section.  We completely ignore all this	 information.  FIXME.  */      {	bfd_vma sectype, secindx, offset, map;	boolean present;	if (! ieee_read_number (info, pp, &sectype)	    || ! ieee_read_number (info, pp, &secindx)	    || ! ieee_read_expression (info, pp, &offset)	    || ! ieee_read_optional_number (info, pp, &map, &present))	  return false;      }      break;    default:      ieee_error (info, block_start, "unknown BB type");      return false;    }  /* Push this block on the block stack.  */  if (info->blockstack.bsp >= info->blockstack.stack + BLOCKSTACK_SIZE)    {      ieee_error (info, (const bfd_byte *) NULL, "stack overflow");      return false;    }  info->blockstack.bsp->kind = b;  if (b == 5)    info->blockstack.bsp->filename = namcopy;  info->blockstack.bsp->fnindx = fnindx;  info->blockstack.bsp->skip = skip;  ++info->blockstack.bsp;  return true;}