1 /* stabs.c -- Parse stabs debugging information
2    Copyright (C) 1995-2020 Free Software Foundation, Inc.
3    Written by Ian Lance Taylor <ian@cygnus.com>.
4 
5    This file is part of GNU Binutils.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
20    02110-1301, USA.  */
21 
22 /* This file contains code which parses stabs debugging information.
23    The organization of this code is based on the gdb stabs reading
24    code.  The job it does is somewhat different, because it is not
25    trying to identify the correct address for anything.  */
26 
27 #include "sysdep.h"
28 #include "bfd.h"
29 #include "libiberty.h"
30 #include "safe-ctype.h"
31 #include "demangle.h"
32 #include "debug.h"
33 #include "budbg.h"
34 #include "filenames.h"
35 #include "aout/aout64.h"
36 #include "aout/stab_gnu.h"
37 
38 /* The number of predefined XCOFF types.  */
39 
40 #define XCOFF_TYPE_COUNT 34
41 
42 /* This structure is used as a handle so that the stab parsing doesn't
43    need to use any static variables.  */
44 
45 struct stab_handle
46 {
47   /* The BFD.  */
48   bfd *abfd;
49   /* TRUE if this is stabs in sections.  */
50   bfd_boolean sections;
51   /* The symbol table.  */
52   asymbol **syms;
53   /* The number of symbols.  */
54   long symcount;
55   /* The accumulated file name string.  */
56   char *so_string;
57   /* The value of the last N_SO symbol.  */
58   bfd_vma so_value;
59   /* The value of the start of the file, so that we can handle file
60      relative N_LBRAC and N_RBRAC symbols.  */
61   bfd_vma file_start_offset;
62   /* The offset of the start of the function, so that we can handle
63      function relative N_LBRAC and N_RBRAC symbols.  */
64   bfd_vma function_start_offset;
65   /* The version number of gcc which compiled the current compilation
66      unit, 0 if not compiled by gcc.  */
67   int gcc_compiled;
68   /* Whether an N_OPT symbol was seen that was not generated by gcc,
69      so that we can detect the SunPRO compiler.  */
70   bfd_boolean n_opt_found;
71   /* The main file name.  */
72   char *main_filename;
73   /* A stack of unfinished N_BINCL files.  */
74   struct bincl_file *bincl_stack;
75   /* A list of finished N_BINCL files.  */
76   struct bincl_file *bincl_list;
77   /* Whether we are inside a function or not.  */
78   bfd_boolean within_function;
79   /* The address of the end of the function, used if we have seen an
80      N_FUN symbol while in a function.  This is -1 if we have not seen
81      an N_FUN (the normal case).  */
82   bfd_vma function_end;
83   /* The depth of block nesting.  */
84   int block_depth;
85   /* List of pending variable definitions.  */
86   struct stab_pending_var *pending;
87   /* Number of files for which we have types.  */
88   unsigned int files;
89   /* Lists of types per file.  */
90   struct stab_types **file_types;
91   /* Predefined XCOFF types.  */
92   debug_type xcoff_types[XCOFF_TYPE_COUNT];
93   /* Undefined tags.  */
94   struct stab_tag *tags;
95   /* Set by parse_stab_type if it sees a structure defined as a cross
96      reference to itself.  Reset by parse_stab_type otherwise.  */
97   bfd_boolean self_crossref;
98 };
99 
100 /* A list of these structures is used to hold pending variable
101    definitions seen before the N_LBRAC of a block.  */
102 
103 struct stab_pending_var
104 {
105   /* Next pending variable definition.  */
106   struct stab_pending_var *next;
107   /* Name.  */
108   const char *name;
109   /* Type.  */
110   debug_type type;
111   /* Kind.  */
112   enum debug_var_kind kind;
113   /* Value.  */
114   bfd_vma val;
115 };
116 
117 /* A list of these structures is used to hold the types for a single
118    file.  */
119 
120 struct stab_types
121 {
122   /* Next set of slots for this file.  */
123   struct stab_types *next;
124   /* Types indexed by type number.  */
125 #define STAB_TYPES_SLOTS (16)
126   debug_type types[STAB_TYPES_SLOTS];
127 };
128 
129 /* We keep a list of undefined tags that we encounter, so that we can
130    fill them in if the tag is later defined.  */
131 
132 struct stab_tag
133 {
134   /* Next undefined tag.  */
135   struct stab_tag *next;
136   /* Tag name.  */
137   const char *name;
138   /* Type kind.  */
139   enum debug_type_kind kind;
140   /* Slot to hold real type when we discover it.  If we don't, we fill
141      in an undefined tag type.  */
142   debug_type slot;
143   /* Indirect type we have created to point at slot.  */
144   debug_type type;
145 };
146 
147 static char *savestring (const char *, int);
148 
149 static void bad_stab (const char *);
150 static void warn_stab (const char *, const char *);
151 static bfd_boolean parse_stab_string
152   (void *, struct stab_handle *, int, int, bfd_vma,
153    const char *, const char *);
154 static debug_type parse_stab_type
155   (void *, struct stab_handle *, const char *, const char **,
156    debug_type **, const char *);
157 static bfd_boolean parse_stab_type_number
158   (const char **, int *, const char *);
159 static debug_type parse_stab_range_type
160   (void *, struct stab_handle *, const char *, const char **,
161    const int *, const char *);
162 static debug_type parse_stab_sun_builtin_type
163   (void *, const char **, const char *);
164 static debug_type parse_stab_sun_floating_type
165   (void *, const char **, const char *);
166 static debug_type parse_stab_enum_type
167   (void *, const char **, const char *);
168 static debug_type parse_stab_struct_type
169   (void *, struct stab_handle *, const char *, const char **,
170    bfd_boolean, const int *, const char *);
171 static bfd_boolean parse_stab_baseclasses
172   (void *, struct stab_handle *, const char **, debug_baseclass **,
173    const char *);
174 static bfd_boolean parse_stab_struct_fields
175   (void *, struct stab_handle *, const char **, debug_field **,
176    bfd_boolean *, const char *);
177 static bfd_boolean parse_stab_cpp_abbrev
178   (void *, struct stab_handle *, const char **, debug_field *, const char *);
179 static bfd_boolean parse_stab_one_struct_field
180   (void *, struct stab_handle *, const char **, const char *,
181    debug_field *, bfd_boolean *, const char *);
182 static bfd_boolean parse_stab_members
183   (void *, struct stab_handle *, const char *, const char **, const int *,
184    debug_method **, const char *);
185 static debug_type parse_stab_argtypes
186   (void *, struct stab_handle *, debug_type, const char *, const char *,
187    debug_type, const char *, bfd_boolean, bfd_boolean, const char **);
188 static bfd_boolean parse_stab_tilde_field
189   (void *, struct stab_handle *, const char **, const int *, debug_type *,
190    bfd_boolean *, const char *);
191 static debug_type parse_stab_array_type
192   (void *, struct stab_handle *, const char **, bfd_boolean, const char *);
193 static void push_bincl (struct stab_handle *, const char *, bfd_vma);
194 static const char *pop_bincl (struct stab_handle *);
195 static bfd_boolean find_excl (struct stab_handle *, const char *, bfd_vma);
196 static bfd_boolean stab_record_variable
197   (void *, struct stab_handle *, const char *, debug_type,
198    enum debug_var_kind, bfd_vma);
199 static bfd_boolean stab_emit_pending_vars (void *, struct stab_handle *);
200 static debug_type *stab_find_slot (struct stab_handle *, const int *);
201 static debug_type stab_find_type (void *, struct stab_handle *, const int *);
202 static bfd_boolean stab_record_type
203   (void *, struct stab_handle *, const int *, debug_type);
204 static debug_type stab_xcoff_builtin_type
205   (void *, struct stab_handle *, int);
206 static debug_type stab_find_tagged_type
207   (void *, struct stab_handle *, const char *, int, enum debug_type_kind);
208 static debug_type *stab_demangle_argtypes
209   (void *, struct stab_handle *, const char *, bfd_boolean *, unsigned int);
210 static debug_type *stab_demangle_v3_argtypes
211   (void *, struct stab_handle *, const char *, bfd_boolean *);
212 static debug_type *stab_demangle_v3_arglist
213   (void *, struct stab_handle *, struct demangle_component *, bfd_boolean *);
214 static debug_type stab_demangle_v3_arg
215   (void *, struct stab_handle *, struct demangle_component *, debug_type,
216    bfd_boolean *);
217 
218 static int demangle_flags = DMGL_ANSI;
219 
220 /* Save a string in memory.  */
221 
222 static char *
223 savestring (const char *start, int len)
224 {
225   char *ret;
226 
227   ret = (char *) xmalloc (len + 1);
228   memcpy (ret, start, len);
229   ret[len] = '\0';
230   return ret;
231 }
232 
233 /* Read a number from a string.  */
234 
235 static bfd_vma
236 parse_number (const char **pp, bfd_boolean *poverflow, const char *p_end)
237 {
238   unsigned long ul;
239   const char *orig;
240 
241   if (poverflow != NULL)
242     *poverflow = FALSE;
243 
244   orig = *pp;
245   if (orig >= p_end)
246     return (bfd_vma) 0;
247 
248   /* Stop early if we are passed an empty string.  */
249   if (*orig == 0)
250     return (bfd_vma) 0;
251 
252   errno = 0;
253   ul = strtoul (*pp, (char **) pp, 0);
254   if (ul + 1 != 0 || errno == 0)
255     {
256       /* If bfd_vma is larger than unsigned long, and the number is
257          meant to be negative, we have to make sure that we sign
258          extend properly.  */
259       if (*orig == '-')
260 	return (bfd_vma) (bfd_signed_vma) (long) ul;
261       return (bfd_vma) ul;
262     }
263 
264   /* Note that even though strtoul overflowed, it should have set *pp
265      to the end of the number, which is where we want it.  */
266   if (sizeof (bfd_vma) > sizeof (unsigned long))
267     {
268       const char *p;
269       bfd_boolean neg;
270       int base;
271       bfd_vma over, lastdig;
272       bfd_boolean overflow;
273       bfd_vma v;
274 
275       /* Our own version of strtoul, for a bfd_vma.  */
276       p = orig;
277 
278       neg = FALSE;
279       if (*p == '+')
280 	++p;
281       else if (*p == '-')
282 	{
283 	  neg = TRUE;
284 	  ++p;
285 	}
286 
287       base = 10;
288       if (*p == '0')
289 	{
290 	  if (p[1] == 'x' || p[1] == 'X')
291 	    {
292 	      base = 16;
293 	      p += 2;
294 	    }
295 	  else
296 	    {
297 	      base = 8;
298 	      ++p;
299 	    }
300 	}
301 
302       over = ((bfd_vma) (bfd_signed_vma) -1) / (bfd_vma) base;
303       lastdig = ((bfd_vma) (bfd_signed_vma) -1) % (bfd_vma) base;
304 
305       overflow = FALSE;
306       v = 0;
307       while (1)
308 	{
309 	  int d;
310 
311 	  d = *p++;
312 	  if (ISDIGIT (d))
313 	    d -= '0';
314 	  else if (ISUPPER (d))
315 	    d -= 'A';
316 	  else if (ISLOWER (d))
317 	    d -= 'a';
318 	  else
319 	    break;
320 
321 	  if (d >= base)
322 	    break;
323 
324 	  if (v > over || (v == over && (bfd_vma) d > lastdig))
325 	    {
326 	      overflow = TRUE;
327 	      break;
328 	    }
329 	}
330 
331       if (! overflow)
332 	{
333 	  if (neg)
334 	    v = - v;
335 	  return v;
336 	}
337     }
338 
339   /* If we get here, the number is too large to represent in a
340      bfd_vma.  */
341   if (poverflow != NULL)
342     *poverflow = TRUE;
343   else
344     warn_stab (orig, _("numeric overflow"));
345 
346   return 0;
347 }
348 
349 /* Give an error for a bad stab string.  */
350 
351 static void
352 bad_stab (const char *p)
353 {
354   fprintf (stderr, _("Bad stab: %s\n"), p);
355 }
356 
357 /* Warn about something in a stab string.  */
358 
359 static void
360 warn_stab (const char *p, const char *err)
361 {
362   fprintf (stderr, _("Warning: %s: %s\n"), err, p);
363 }
364 
365 /* Create a handle to parse stabs symbols with.  */
366 
367 void *
368 start_stab (void *dhandle ATTRIBUTE_UNUSED, bfd *abfd, bfd_boolean sections,
369 	    asymbol **syms, long symcount)
370 {
371   struct stab_handle *ret;
372 
373   ret = (struct stab_handle *) xmalloc (sizeof *ret);
374   memset (ret, 0, sizeof *ret);
375   ret->abfd = abfd;
376   ret->sections = sections;
377   ret->syms = syms;
378   ret->symcount = symcount;
379   ret->files = 1;
380   ret->file_types = (struct stab_types **) xmalloc (sizeof *ret->file_types);
381   ret->file_types[0] = NULL;
382   ret->function_end = (bfd_vma) -1;
383   return (void *) ret;
384 }
385 
386 /* When we have processed all the stabs information, we need to go
387    through and fill in all the undefined tags.  */
388 
389 bfd_boolean
390 finish_stab (void *dhandle, void *handle)
391 {
392   struct stab_handle *info = (struct stab_handle *) handle;
393   struct stab_tag *st;
394 
395   if (info->within_function)
396     {
397       if (! stab_emit_pending_vars (dhandle, info)
398 	  || ! debug_end_function (dhandle, info->function_end))
399 	return FALSE;
400       info->within_function = FALSE;
401       info->function_end = (bfd_vma) -1;
402     }
403 
404   for (st = info->tags; st != NULL; st = st->next)
405     {
406       enum debug_type_kind kind;
407 
408       kind = st->kind;
409       if (kind == DEBUG_KIND_ILLEGAL)
410 	kind = DEBUG_KIND_STRUCT;
411       st->slot = debug_make_undefined_tagged_type (dhandle, st->name, kind);
412       if (st->slot == DEBUG_TYPE_NULL)
413 	return FALSE;
414     }
415 
416   return TRUE;
417 }
418 
419 /* Handle a single stabs symbol.  */
420 
421 bfd_boolean
422 parse_stab (void *dhandle, void *handle, int type, int desc, bfd_vma value,
423 	    const char *string)
424 {
425   const char * string_end;
426   struct stab_handle *info = (struct stab_handle *) handle;
427 
428   /* gcc will emit two N_SO strings per compilation unit, one for the
429      directory name and one for the file name.  We just collect N_SO
430      strings as we see them, and start the new compilation unit when
431      we see a non N_SO symbol.  */
432   if (info->so_string != NULL
433       && (type != N_SO || *string == '\0' || value != info->so_value))
434     {
435       if (! debug_set_filename (dhandle, info->so_string))
436 	return FALSE;
437       info->main_filename = info->so_string;
438 
439       info->gcc_compiled = 0;
440       info->n_opt_found = FALSE;
441 
442       /* Generally, for stabs in the symbol table, the N_LBRAC and
443 	 N_RBRAC symbols are relative to the N_SO symbol value.  */
444       if (! info->sections)
445 	info->file_start_offset = info->so_value;
446 
447       /* We need to reset the mapping from type numbers to types.  We
448 	 can't free the old mapping, because of the use of
449 	 debug_make_indirect_type.  */
450       info->files = 1;
451       info->file_types = ((struct stab_types **)
452 			  xmalloc (sizeof *info->file_types));
453       info->file_types[0] = NULL;
454       info->so_string = NULL;
455 
456       /* Now process whatever type we just got.  */
457     }
458 
459   string_end = string + strlen (string);
460 
461   switch (type)
462     {
463     case N_FN:
464     case N_FN_SEQ:
465       break;
466 
467     case N_LBRAC:
468       /* Ignore extra outermost context from SunPRO cc and acc.  */
469       if (info->n_opt_found && desc == 1)
470 	break;
471 
472       if (! info->within_function)
473 	{
474 	  fprintf (stderr, _("N_LBRAC not within function\n"));
475 	  return FALSE;
476 	}
477 
478       /* Start an inner lexical block.  */
479       if (! debug_start_block (dhandle,
480 			       (value
481 				+ info->file_start_offset
482 				+ info->function_start_offset)))
483 	return FALSE;
484 
485       /* Emit any pending variable definitions.  */
486       if (! stab_emit_pending_vars (dhandle, info))
487 	return FALSE;
488 
489       ++info->block_depth;
490       break;
491 
492     case N_RBRAC:
493       /* Ignore extra outermost context from SunPRO cc and acc.  */
494       if (info->n_opt_found && desc == 1)
495 	break;
496 
497       /* We shouldn't have any pending variable definitions here, but,
498          if we do, we probably need to emit them before closing the
499          block.  */
500       if (! stab_emit_pending_vars (dhandle, info))
501 	return FALSE;
502 
503       /* End an inner lexical block.  */
504       if (! debug_end_block (dhandle,
505 			     (value
506 			      + info->file_start_offset
507 			      + info->function_start_offset)))
508 	return FALSE;
509 
510       --info->block_depth;
511       if (info->block_depth < 0)
512 	{
513 	  fprintf (stderr, _("Too many N_RBRACs\n"));
514 	  return FALSE;
515 	}
516       break;
517 
518     case N_SO:
519       /* This always ends a function.  */
520       if (info->within_function)
521 	{
522 	  bfd_vma endval;
523 
524 	  endval = value;
525 	  if (*string != '\0'
526 	      && info->function_end != (bfd_vma) -1
527 	      && info->function_end < endval)
528 	    endval = info->function_end;
529 	  if (! stab_emit_pending_vars (dhandle, info)
530 	      || ! debug_end_function (dhandle, endval))
531 	    return FALSE;
532 	  info->within_function = FALSE;
533 	  info->function_end = (bfd_vma) -1;
534 	}
535 
536       /* An empty string is emitted by gcc at the end of a compilation
537          unit.  */
538       if (*string == '\0')
539 	return TRUE;
540 
541       /* Just accumulate strings until we see a non N_SO symbol.  If
542          the string starts with a directory separator or some other
543 	 form of absolute path specification, we discard the previously
544          accumulated strings.  */
545       if (info->so_string == NULL)
546 	info->so_string = xstrdup (string);
547       else
548 	{
549 	  char *f;
550 
551 	  f = info->so_string;
552 
553 	  if (IS_ABSOLUTE_PATH (string))
554 	    info->so_string = xstrdup (string);
555 	  else
556 	    info->so_string = concat (info->so_string, string,
557 				      (const char *) NULL);
558 	  free (f);
559 	}
560 
561       info->so_value = value;
562 
563       break;
564 
565     case N_SOL:
566       /* Start an include file.  */
567       if (! debug_start_source (dhandle, string))
568 	return FALSE;
569       break;
570 
571     case N_BINCL:
572       /* Start an include file which may be replaced.  */
573       push_bincl (info, string, value);
574       if (! debug_start_source (dhandle, string))
575 	return FALSE;
576       break;
577 
578     case N_EINCL:
579       /* End an N_BINCL include.  */
580       if (! debug_start_source (dhandle, pop_bincl (info)))
581 	return FALSE;
582       break;
583 
584     case N_EXCL:
585       /* This is a duplicate of a header file named by N_BINCL which
586          was eliminated by the linker.  */
587       if (! find_excl (info, string, value))
588 	return FALSE;
589       break;
590 
591     case N_SLINE:
592       if (! debug_record_line (dhandle, desc,
593 			       value + (info->within_function
594 					? info->function_start_offset : 0)))
595 	return FALSE;
596       break;
597 
598     case N_BCOMM:
599       if (! debug_start_common_block (dhandle, string))
600 	return FALSE;
601       break;
602 
603     case N_ECOMM:
604       if (! debug_end_common_block (dhandle, string))
605 	return FALSE;
606       break;
607 
608     case N_FUN:
609       if (*string == '\0')
610 	{
611 	  if (info->within_function)
612 	    {
613 	      /* This always marks the end of a function; we don't
614                  need to worry about info->function_end.  */
615 	      if (info->sections)
616 		value += info->function_start_offset;
617 	      if (! stab_emit_pending_vars (dhandle, info)
618 		  || ! debug_end_function (dhandle, value))
619 		return FALSE;
620 	      info->within_function = FALSE;
621 	      info->function_end = (bfd_vma) -1;
622 	    }
623 	  break;
624 	}
625 
626       /* A const static symbol in the .text section will have an N_FUN
627          entry.  We need to use these to mark the end of the function,
628          in case we are looking at gcc output before it was changed to
629          always emit an empty N_FUN.  We can't call debug_end_function
630          here, because it might be a local static symbol.  */
631       if (info->within_function
632 	  && (info->function_end == (bfd_vma) -1
633 	      || value < info->function_end))
634 	info->function_end = value;
635 
636       /* Fall through.  */
637       /* FIXME: gdb checks the string for N_STSYM, N_LCSYM or N_ROSYM
638          symbols, and if it does not start with :S, gdb relocates the
639          value to the start of the section.  gcc always seems to use
640          :S, so we don't worry about this.  */
641       /* Fall through.  */
642     default:
643       {
644 	const char *colon;
645 
646 	colon = strchr (string, ':');
647 	if (colon != NULL
648 	    && (colon[1] == 'f' || colon[1] == 'F'))
649 	  {
650 	    if (info->within_function)
651 	      {
652 		bfd_vma endval;
653 
654 		endval = value;
655 		if (info->function_end != (bfd_vma) -1
656 		    && info->function_end < endval)
657 		  endval = info->function_end;
658 		if (! stab_emit_pending_vars (dhandle, info)
659 		    || ! debug_end_function (dhandle, endval))
660 		  return FALSE;
661 		info->function_end = (bfd_vma) -1;
662 	      }
663 	    /* For stabs in sections, line numbers and block addresses
664                are offsets from the start of the function.  */
665 	    if (info->sections)
666 	      info->function_start_offset = value;
667 	    info->within_function = TRUE;
668 	  }
669 
670 	if (! parse_stab_string (dhandle, info, type, desc, value, string, string_end))
671 	  return FALSE;
672       }
673       break;
674 
675     case N_OPT:
676       if (string != NULL && strcmp (string, "gcc2_compiled.") == 0)
677 	info->gcc_compiled = 2;
678       else if (string != NULL && strcmp (string, "gcc_compiled.") == 0)
679 	info->gcc_compiled = 1;
680       else
681 	info->n_opt_found = TRUE;
682       break;
683 
684     case N_OBJ:
685     case N_ENDM:
686     case N_MAIN:
687     case N_WARNING:
688       break;
689     }
690 
691   return TRUE;
692 }
693 
694 /* Parse the stabs string.  */
695 
696 static bfd_boolean
697 parse_stab_string (void *dhandle, struct stab_handle *info, int stabtype,
698 		   int desc ATTRIBUTE_UNUSED, bfd_vma value,
699 		   const char *string, const char * string_end)
700 {
701   const char *p;
702   char *name;
703   int type;
704   debug_type dtype;
705   bfd_boolean synonym;
706   bfd_boolean self_crossref;
707   debug_type *slot;
708 
709   p = strchr (string, ':');
710   if (p == NULL)
711     return TRUE;
712 
713   while (p[1] == ':')
714     {
715       p += 2;
716       p = strchr (p, ':');
717       if (p == NULL)
718 	{
719 	  bad_stab (string);
720 	  return FALSE;
721 	}
722     }
723 
724   /* FIXME: Sometimes the special C++ names start with '.'.  */
725   name = NULL;
726   if (string[0] == '$')
727     {
728       switch (string[1])
729 	{
730 	case 't':
731 	  name = "this";
732 	  break;
733 	case 'v':
734 	  /* Was: name = "vptr"; */
735 	  break;
736 	case 'e':
737 	  name = "eh_throw";
738 	  break;
739 	case '_':
740 	  /* This was an anonymous type that was never fixed up.  */
741 	  break;
742 	case 'X':
743 	  /* SunPRO (3.0 at least) static variable encoding.  */
744 	  break;
745 	default:
746 	  warn_stab (string, _("unknown C++ encoded name"));
747 	  break;
748 	}
749     }
750 
751   if (name == NULL)
752     {
753       if (p == string || (string[0] == ' ' && p == string + 1))
754 	name = NULL;
755       else
756 	name = savestring (string, p - string);
757     }
758 
759   ++p;
760   if (ISDIGIT (*p) || *p == '(' || *p == '-')
761     type = 'l';
762   else if (*p == 0)
763     {
764       bad_stab (string);
765       return FALSE;
766     }
767   else
768     type = *p++;
769 
770   switch (type)
771     {
772     case 'c':
773       /* c is a special case, not followed by a type-number.
774 	 SYMBOL:c=iVALUE for an integer constant symbol.
775 	 SYMBOL:c=rVALUE for a floating constant symbol.
776 	 SYMBOL:c=eTYPE,INTVALUE for an enum constant symbol.
777 	 e.g. "b:c=e6,0" for "const b = blob1"
778 	 (where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;").  */
779       if (*p != '=')
780 	{
781 	  bad_stab (string);
782 	  return FALSE;
783 	}
784       ++p;
785       switch (*p++)
786 	{
787 	case 'r':
788 	  /* Floating point constant.  */
789 	  if (! debug_record_float_const (dhandle, name, atof (p)))
790 	    return FALSE;
791 	  break;
792 	case 'i':
793 	  /* Integer constant.  */
794 	  /* Defining integer constants this way is kind of silly,
795 	     since 'e' constants allows the compiler to give not only
796 	     the value, but the type as well.  C has at least int,
797 	     long, unsigned int, and long long as constant types;
798 	     other languages probably should have at least unsigned as
799 	     well as signed constants.  */
800 	  if (! debug_record_int_const (dhandle, name, atoi (p)))
801 	    return FALSE;
802 	  break;
803 	case 'e':
804 	  /* SYMBOL:c=eTYPE,INTVALUE for a constant symbol whose value
805 	     can be represented as integral.
806 	     e.g. "b:c=e6,0" for "const b = blob1"
807 	     (where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;").  */
808 	  dtype = parse_stab_type (dhandle, info, (const char *) NULL,
809 				   &p, (debug_type **) NULL, string_end);
810 	  if (dtype == DEBUG_TYPE_NULL)
811 	    return FALSE;
812 	  if (*p != ',')
813 	    {
814 	      bad_stab (string);
815 	      return FALSE;
816 	    }
817 	  if (! debug_record_typed_const (dhandle, name, dtype, atoi (p)))
818 	    return FALSE;
819 	  break;
820 	default:
821 	  bad_stab (string);
822 	  return FALSE;
823 	}
824 
825       break;
826 
827     case 'C':
828       /* The name of a caught exception.  */
829       dtype = parse_stab_type (dhandle, info, (const char *) NULL,
830 			       &p, (debug_type **) NULL, string_end);
831       if (dtype == DEBUG_TYPE_NULL)
832 	return FALSE;
833       if (! debug_record_label (dhandle, name, dtype, value))
834 	return FALSE;
835       break;
836 
837     case 'f':
838     case 'F':
839       /* A function definition.  */
840       dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
841 			       (debug_type **) NULL, string_end);
842       if (dtype == DEBUG_TYPE_NULL)
843 	return FALSE;
844       if (! debug_record_function (dhandle, name, dtype, type == 'F', value))
845 	return FALSE;
846 
847       /* Sun acc puts declared types of arguments here.  We don't care
848 	 about their actual types (FIXME -- we should remember the whole
849 	 function prototype), but the list may define some new types
850 	 that we have to remember, so we must scan it now.  */
851       while (*p == ';')
852 	{
853 	  ++p;
854 	  if (parse_stab_type (dhandle, info, (const char *) NULL, &p,
855 			       (debug_type **) NULL, string_end)
856 	      == DEBUG_TYPE_NULL)
857 	    return FALSE;
858 	}
859 
860       break;
861 
862     case 'G':
863       {
864 	asymbol **ps;
865 
866 	/* A global symbol.  The value must be extracted from the
867 	   symbol table.  */
868 	dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
869 				 (debug_type **) NULL, string_end);
870 	if (dtype == DEBUG_TYPE_NULL)
871 	  return FALSE;
872 	if (name != NULL)
873 	  {
874 	    char leading;
875 	    long c;
876 
877 	    leading = bfd_get_symbol_leading_char (info->abfd);
878 	    for (c = info->symcount, ps = info->syms; c > 0; --c, ++ps)
879 	      {
880 		const char *n;
881 
882 		n = bfd_asymbol_name (*ps);
883 		if (leading != '\0' && *n == leading)
884 		  ++n;
885 		if (*n == *name && strcmp (n, name) == 0)
886 		  break;
887 	      }
888 
889 	    if (c > 0)
890 	      value = bfd_asymbol_value (*ps);
891 	  }
892 
893 	if (! stab_record_variable (dhandle, info, name, dtype, DEBUG_GLOBAL,
894 				    value))
895 	  return FALSE;
896       }
897       break;
898 
899       /* This case is faked by a conditional above, when there is no
900 	 code letter in the dbx data.  Dbx data never actually
901 	 contains 'l'.  */
902     case 'l':
903     case 's':
904       dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
905 			       (debug_type **) NULL, string_end);
906       if (dtype == DEBUG_TYPE_NULL)
907 	return FALSE;
908       if (! stab_record_variable (dhandle, info, name, dtype, DEBUG_LOCAL,
909 				  value))
910 	return FALSE;
911       break;
912 
913     case 'p':
914       /* A function parameter.  */
915       if (*p != 'F')
916 	dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
917 				 (debug_type **) NULL, string_end);
918       else
919 	{
920 	/* pF is a two-letter code that means a function parameter in
921 	   Fortran.  The type-number specifies the type of the return
922 	   value.  Translate it into a pointer-to-function type.  */
923 	  ++p;
924 	  dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
925 				   (debug_type **) NULL, string_end);
926 	  if (dtype != DEBUG_TYPE_NULL)
927 	    {
928 	      debug_type ftype;
929 
930 	      ftype = debug_make_function_type (dhandle, dtype,
931 						(debug_type *) NULL, FALSE);
932 	      dtype = debug_make_pointer_type (dhandle, ftype);
933 	    }
934 	}
935       if (dtype == DEBUG_TYPE_NULL)
936 	return FALSE;
937       if (! debug_record_parameter (dhandle, name, dtype, DEBUG_PARM_STACK,
938 				    value))
939 	return FALSE;
940 
941       /* FIXME: At this point gdb considers rearranging the parameter
942 	 address on a big endian machine if it is smaller than an int.
943 	 We have no way to do that, since we don't really know much
944 	 about the target.  */
945       break;
946 
947     case 'P':
948       if (stabtype == N_FUN)
949 	{
950 	  /* Prototype of a function referenced by this file.  */
951 	  while (*p == ';')
952 	    {
953 	      ++p;
954 	      if (parse_stab_type (dhandle, info, (const char *) NULL, &p,
955 				   (debug_type **) NULL, string_end)
956 		  == DEBUG_TYPE_NULL)
957 		return FALSE;
958 	    }
959 	  break;
960 	}
961       /* Fall through.  */
962     case 'R':
963       /* Parameter which is in a register.  */
964       dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
965 			       (debug_type **) NULL, string_end);
966       if (dtype == DEBUG_TYPE_NULL)
967 	return FALSE;
968       if (! debug_record_parameter (dhandle, name, dtype, DEBUG_PARM_REG,
969 				    value))
970 	return FALSE;
971       break;
972 
973     case 'r':
974       /* Register variable (either global or local).  */
975       dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
976 			       (debug_type **) NULL, string_end);
977       if (dtype == DEBUG_TYPE_NULL)
978 	return FALSE;
979       if (! stab_record_variable (dhandle, info, name, dtype, DEBUG_REGISTER,
980 				  value))
981 	return FALSE;
982 
983       /* FIXME: At this point gdb checks to combine pairs of 'p' and
984 	 'r' stabs into a single 'P' stab.  */
985       break;
986 
987     case 'S':
988       /* Static symbol at top level of file.  */
989       dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
990 			       (debug_type **) NULL, string_end);
991       if (dtype == DEBUG_TYPE_NULL)
992 	return FALSE;
993       if (! stab_record_variable (dhandle, info, name, dtype, DEBUG_STATIC,
994 				  value))
995 	return FALSE;
996       break;
997 
998     case 't':
999       /* A typedef.  */
1000       dtype = parse_stab_type (dhandle, info, name, &p, &slot, string_end);
1001       if (dtype == DEBUG_TYPE_NULL)
1002 	return FALSE;
1003       if (name == NULL)
1004 	{
1005 	  /* A nameless type.  Nothing to do.  */
1006 	  return TRUE;
1007 	}
1008 
1009       dtype = debug_name_type (dhandle, name, dtype);
1010       if (dtype == DEBUG_TYPE_NULL)
1011 	return FALSE;
1012 
1013       if (slot != NULL)
1014 	*slot = dtype;
1015 
1016       break;
1017 
1018     case 'T':
1019       /* Struct, union, or enum tag.  For GNU C++, this can be followed
1020 	 by 't' which means we are typedef'ing it as well.  */
1021       if (*p != 't')
1022 	{
1023 	  synonym = FALSE;
1024 	  /* FIXME: gdb sets synonym to TRUE if the current language
1025              is C++.  */
1026 	}
1027       else
1028 	{
1029 	  synonym = TRUE;
1030 	  ++p;
1031 	}
1032 
1033       dtype = parse_stab_type (dhandle, info, name, &p, &slot, string_end);
1034       if (dtype == DEBUG_TYPE_NULL)
1035 	return FALSE;
1036       if (name == NULL)
1037 	return TRUE;
1038 
1039       /* INFO->SELF_CROSSREF is set by parse_stab_type if this type is
1040          a cross reference to itself.  These are generated by some
1041          versions of g++.  */
1042       self_crossref = info->self_crossref;
1043 
1044       dtype = debug_tag_type (dhandle, name, dtype);
1045       if (dtype == DEBUG_TYPE_NULL)
1046 	return FALSE;
1047       if (slot != NULL)
1048 	*slot = dtype;
1049 
1050       /* See if we have a cross reference to this tag which we can now
1051          fill in.  Avoid filling in a cross reference to ourselves,
1052          because that would lead to circular debugging information.  */
1053       if (! self_crossref)
1054 	{
1055 	  register struct stab_tag **pst;
1056 
1057 	  for (pst = &info->tags; *pst != NULL; pst = &(*pst)->next)
1058 	    {
1059 	      if ((*pst)->name[0] == name[0]
1060 		  && strcmp ((*pst)->name, name) == 0)
1061 		{
1062 		  (*pst)->slot = dtype;
1063 		  *pst = (*pst)->next;
1064 		  break;
1065 		}
1066 	    }
1067 	}
1068 
1069       if (synonym)
1070 	{
1071 	  dtype = debug_name_type (dhandle, name, dtype);
1072 	  if (dtype == DEBUG_TYPE_NULL)
1073 	    return FALSE;
1074 
1075 	  if (slot != NULL)
1076 	    *slot = dtype;
1077 	}
1078 
1079       break;
1080 
1081     case 'V':
1082       /* Static symbol of local scope */
1083       dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
1084 			       (debug_type **) NULL, string_end);
1085       if (dtype == DEBUG_TYPE_NULL)
1086 	return FALSE;
1087       /* FIXME: gdb checks os9k_stabs here.  */
1088       if (! stab_record_variable (dhandle, info, name, dtype,
1089 				  DEBUG_LOCAL_STATIC, value))
1090 	return FALSE;
1091       break;
1092 
1093     case 'v':
1094       /* Reference parameter.  */
1095       dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
1096 			       (debug_type **) NULL, string_end);
1097       if (dtype == DEBUG_TYPE_NULL)
1098 	return FALSE;
1099       if (! debug_record_parameter (dhandle, name, dtype, DEBUG_PARM_REFERENCE,
1100 				    value))
1101 	return FALSE;
1102       break;
1103 
1104     case 'a':
1105       /* Reference parameter which is in a register.  */
1106       dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
1107 			       (debug_type **) NULL, string_end);
1108       if (dtype == DEBUG_TYPE_NULL)
1109 	return FALSE;
1110       if (! debug_record_parameter (dhandle, name, dtype, DEBUG_PARM_REF_REG,
1111 				    value))
1112 	return FALSE;
1113       break;
1114 
1115     case 'X':
1116       /* This is used by Sun FORTRAN for "function result value".
1117 	 Sun claims ("dbx and dbxtool interfaces", 2nd ed)
1118 	 that Pascal uses it too, but when I tried it Pascal used
1119 	 "x:3" (local symbol) instead.  */
1120       dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
1121 			       (debug_type **) NULL, string_end);
1122       if (dtype == DEBUG_TYPE_NULL)
1123 	return FALSE;
1124       if (! stab_record_variable (dhandle, info, name, dtype, DEBUG_LOCAL,
1125 				  value))
1126 	return FALSE;
1127       break;
1128 
1129     case 'Y':
1130       /* SUNPro C++ Namespace =Yn0.  */
1131       /* Skip the namespace mapping, as it is not used now.  */
1132       if (*(++p) == 'n' && *(++p) == '0')
1133 	{
1134 	  /* =Yn0name; */
1135 	  while (*p != ';')
1136 	    ++p;
1137 	  ++p;
1138 	  return TRUE;
1139 	}
1140       /* TODO SUNPro C++ support:
1141          Support default arguments after F,P parameters
1142          Ya = Anonymous unions
1143          YM,YD = Pointers to class members
1144          YT,YI = Templates
1145          YR = Run-time type information (RTTI)  */
1146 
1147       /* Fall through.  */
1148 
1149     default:
1150       bad_stab (string);
1151       return FALSE;
1152     }
1153 
1154   /* FIXME: gdb converts structure values to structure pointers in a
1155      couple of cases, depending upon the target.  */
1156 
1157   return TRUE;
1158 }
1159 
1160 /* Parse a stabs type.  The typename argument is non-NULL if this is a
1161    typedef or a tag definition.  The pp argument points to the stab
1162    string, and is updated.  The slotp argument points to a place to
1163    store the slot used if the type is being defined.  */
1164 
1165 static debug_type
1166 parse_stab_type (void *                dhandle,
1167 		 struct stab_handle *  info,
1168 		 const char *          type_name,
1169 		 const char **         pp,
1170 		 debug_type **         slotp,
1171 		 const char *          p_end)
1172 {
1173   const char *orig;
1174   int typenums[2];
1175   int size;
1176   bfd_boolean stringp;
1177   int descriptor;
1178   debug_type dtype;
1179 
1180   if (slotp != NULL)
1181     *slotp = NULL;
1182 
1183   orig = *pp;
1184   if (orig >= p_end)
1185     return DEBUG_TYPE_NULL;
1186 
1187   size = -1;
1188   stringp = FALSE;
1189 
1190   info->self_crossref = FALSE;
1191 
1192   /* Read type number if present.  The type number may be omitted.
1193      for instance in a two-dimensional array declared with type
1194      "ar1;1;10;ar1;1;10;4".  */
1195   if (! ISDIGIT (**pp) && **pp != '(' && **pp != '-')
1196     {
1197       /* 'typenums=' not present, type is anonymous.  Read and return
1198 	 the definition, but don't put it in the type vector.  */
1199       typenums[0] = typenums[1] = -1;
1200     }
1201   else
1202     {
1203       if (! parse_stab_type_number (pp, typenums, p_end))
1204 	return DEBUG_TYPE_NULL;
1205 
1206       if (**pp != '=')
1207 	/* Type is not being defined here.  Either it already
1208 	   exists, or this is a forward reference to it.  */
1209 	return stab_find_type (dhandle, info, typenums);
1210 
1211       /* Only set the slot if the type is being defined.  This means
1212          that the mapping from type numbers to types will only record
1213          the name of the typedef which defines a type.  If we don't do
1214          this, then something like
1215 	     typedef int foo;
1216 	     int i;
1217 	 will record that i is of type foo.  Unfortunately, stabs
1218 	 information is ambiguous about variable types.  For this code,
1219 	     typedef int foo;
1220 	     int i;
1221 	     foo j;
1222 	 the stabs information records both i and j as having the same
1223 	 type.  This could be fixed by patching the compiler.  */
1224       if (slotp != NULL && typenums[0] >= 0 && typenums[1] >= 0)
1225 	*slotp = stab_find_slot (info, typenums);
1226 
1227       /* Type is being defined here.  */
1228       /* Skip the '='.  */
1229       ++*pp;
1230 
1231       while (**pp == '@')
1232 	{
1233 	  const char *p = *pp + 1;
1234 	  const char *attr;
1235 
1236 	  if (ISDIGIT (*p) || *p == '(' || *p == '-')
1237 	    /* Member type.  */
1238 	    break;
1239 
1240 	  /* Type attributes.  */
1241 	  attr = p;
1242 
1243 	  for (; *p != ';'; ++p)
1244 	    {
1245 	      if (*p == '\0')
1246 		{
1247 		  bad_stab (orig);
1248 		  return DEBUG_TYPE_NULL;
1249 		}
1250 	    }
1251 	  *pp = p + 1;
1252 
1253 	  switch (*attr)
1254 	    {
1255 	    case 's':
1256 	      size = atoi (attr + 1);
1257 	      size /= 8;  /* Size is in bits.  We store it in bytes.  */
1258 	      if (size <= 0)
1259 		size = -1;
1260 	      break;
1261 
1262 	    case 'S':
1263 	      stringp = TRUE;
1264 	      break;
1265 
1266 	    case 0:
1267 	      bad_stab (orig);
1268 	      return DEBUG_TYPE_NULL;
1269 
1270 	    default:
1271 	      /* Ignore unrecognized type attributes, so future
1272 		 compilers can invent new ones.  */
1273 	      break;
1274 	    }
1275 	}
1276     }
1277 
1278   descriptor = **pp;
1279   ++*pp;
1280 
1281   switch (descriptor)
1282     {
1283     case 'x':
1284       {
1285 	enum debug_type_kind code;
1286 	const char *q1, *q2, *p;
1287 
1288 	/* A cross reference to another type.  */
1289 	switch (**pp)
1290 	  {
1291 	  case 's':
1292 	    code = DEBUG_KIND_STRUCT;
1293 	    break;
1294 	  case 'u':
1295 	    code = DEBUG_KIND_UNION;
1296 	    break;
1297 	  case 'e':
1298 	    code = DEBUG_KIND_ENUM;
1299 	    break;
1300 	  case 0:
1301 	      bad_stab (orig);
1302 	      return DEBUG_TYPE_NULL;
1303 
1304 	  default:
1305 	    /* Complain and keep going, so compilers can invent new
1306 	       cross-reference types.  */
1307 	    warn_stab (orig, _("unrecognized cross reference type"));
1308 	    code = DEBUG_KIND_STRUCT;
1309 	    break;
1310 	  }
1311 	++*pp;
1312 
1313 	q1 = strchr (*pp, '<');
1314 	p = strchr (*pp, ':');
1315 	if (p == NULL)
1316 	  {
1317 	    bad_stab (orig);
1318 	    return DEBUG_TYPE_NULL;
1319 	  }
1320 	if (q1 != NULL && p > q1 && p[1] == ':')
1321 	  {
1322 	    int nest = 0;
1323 
1324 	    for (q2 = q1; *q2 != '\0'; ++q2)
1325 	      {
1326 		if (*q2 == '<')
1327 		  ++nest;
1328 		else if (*q2 == '>')
1329 		  --nest;
1330 		else if (*q2 == ':' && nest == 0)
1331 		  break;
1332 	      }
1333 	    p = q2;
1334 	    if (*p != ':')
1335 	      {
1336 		bad_stab (orig);
1337 		return DEBUG_TYPE_NULL;
1338 	      }
1339 	  }
1340 
1341 	/* Some versions of g++ can emit stabs like
1342 	       fleep:T20=xsfleep:
1343 	   which define structures in terms of themselves.  We need to
1344 	   tell the caller to avoid building a circular structure.  */
1345 	if (type_name != NULL
1346 	    && strncmp (type_name, *pp, p - *pp) == 0
1347 	    && type_name[p - *pp] == '\0')
1348 	  info->self_crossref = TRUE;
1349 
1350 	dtype = stab_find_tagged_type (dhandle, info, *pp, p - *pp, code);
1351 
1352 	*pp = p + 1;
1353       }
1354       break;
1355 
1356     case '-':
1357     case '0':
1358     case '1':
1359     case '2':
1360     case '3':
1361     case '4':
1362     case '5':
1363     case '6':
1364     case '7':
1365     case '8':
1366     case '9':
1367     case '(':
1368       {
1369 	const char *hold;
1370 	int xtypenums[2];
1371 
1372 	/* This type is defined as another type.  */
1373 	(*pp)--;
1374 	hold = *pp;
1375 
1376 	/* Peek ahead at the number to detect void.  */
1377 	if (! parse_stab_type_number (pp, xtypenums, p_end))
1378 	  return DEBUG_TYPE_NULL;
1379 
1380 	if (typenums[0] == xtypenums[0] && typenums[1] == xtypenums[1])
1381 	  {
1382 	    /* This type is being defined as itself, which means that
1383                it is void.  */
1384 	    dtype = debug_make_void_type (dhandle);
1385 	  }
1386 	else
1387 	  {
1388 	    *pp = hold;
1389 
1390 	    /* Go back to the number and have parse_stab_type get it.
1391 	       This means that we can deal with something like
1392 	       t(1,2)=(3,4)=... which the Lucid compiler uses.  */
1393 	    dtype = parse_stab_type (dhandle, info, (const char *) NULL,
1394 				     pp, (debug_type **) NULL, p_end);
1395 	    if (dtype == DEBUG_TYPE_NULL)
1396 	      return DEBUG_TYPE_NULL;
1397 	  }
1398 
1399 	if (typenums[0] != -1)
1400 	  {
1401 	    if (! stab_record_type (dhandle, info, typenums, dtype))
1402 	      return DEBUG_TYPE_NULL;
1403 	  }
1404 
1405 	break;
1406       }
1407 
1408     case '*':
1409       dtype = debug_make_pointer_type (dhandle,
1410 				       parse_stab_type (dhandle, info,
1411 							(const char *) NULL,
1412 							pp,
1413 							(debug_type **) NULL,
1414 							p_end));
1415       break;
1416 
1417     case '&':
1418       /* Reference to another type.  */
1419       dtype = (debug_make_reference_type
1420 	       (dhandle,
1421 		parse_stab_type (dhandle, info, (const char *) NULL, pp,
1422 				 (debug_type **) NULL, p_end)));
1423       break;
1424 
1425     case 'f':
1426       /* Function returning another type.  */
1427       /* FIXME: gdb checks os9k_stabs here.  */
1428       dtype = (debug_make_function_type
1429 	       (dhandle,
1430 		parse_stab_type (dhandle, info, (const char *) NULL, pp,
1431 				 (debug_type **) NULL, p_end),
1432 		(debug_type *) NULL, FALSE));
1433       break;
1434 
1435     case 'k':
1436       /* Const qualifier on some type (Sun).  */
1437       /* FIXME: gdb accepts 'c' here if os9k_stabs.  */
1438       dtype = debug_make_const_type (dhandle,
1439 				     parse_stab_type (dhandle, info,
1440 						      (const char *) NULL,
1441 						      pp,
1442 						      (debug_type **) NULL,
1443 						      p_end));
1444       break;
1445 
1446     case 'B':
1447       /* Volatile qual on some type (Sun).  */
1448       /* FIXME: gdb accepts 'i' here if os9k_stabs.  */
1449       dtype = (debug_make_volatile_type
1450 	       (dhandle,
1451 		parse_stab_type (dhandle, info, (const char *) NULL, pp,
1452 				 (debug_type **) NULL, p_end)));
1453       break;
1454 
1455     case '@':
1456       /* Offset (class & variable) type.  This is used for a pointer
1457          relative to an object.  */
1458       {
1459 	debug_type domain;
1460 	debug_type memtype;
1461 
1462 	/* Member type.  */
1463 
1464 	domain = parse_stab_type (dhandle, info, (const char *) NULL, pp,
1465 				  (debug_type **) NULL, p_end);
1466 	if (domain == DEBUG_TYPE_NULL)
1467 	  return DEBUG_TYPE_NULL;
1468 
1469 	if (**pp != ',')
1470 	  {
1471 	    bad_stab (orig);
1472 	    return DEBUG_TYPE_NULL;
1473 	  }
1474 	++*pp;
1475 
1476 	memtype = parse_stab_type (dhandle, info, (const char *) NULL, pp,
1477 				   (debug_type **) NULL, p_end);
1478 	if (memtype == DEBUG_TYPE_NULL)
1479 	  return DEBUG_TYPE_NULL;
1480 
1481 	dtype = debug_make_offset_type (dhandle, domain, memtype);
1482       }
1483       break;
1484 
1485     case '#':
1486       /* Method (class & fn) type.  */
1487       if (**pp == '#')
1488 	{
1489 	  debug_type return_type;
1490 
1491 	  ++*pp;
1492 	  return_type = parse_stab_type (dhandle, info, (const char *) NULL,
1493 					 pp, (debug_type **) NULL, p_end);
1494 	  if (return_type == DEBUG_TYPE_NULL)
1495 	    return DEBUG_TYPE_NULL;
1496 	  if (**pp != ';')
1497 	    {
1498 	      bad_stab (orig);
1499 	      return DEBUG_TYPE_NULL;
1500 	    }
1501 	  ++*pp;
1502 	  dtype = debug_make_method_type (dhandle, return_type,
1503 					  DEBUG_TYPE_NULL,
1504 					  (debug_type *) NULL, FALSE);
1505 	}
1506       else
1507 	{
1508 	  debug_type domain;
1509 	  debug_type return_type;
1510 	  debug_type *args;
1511 	  unsigned int n;
1512 	  unsigned int alloc;
1513 	  bfd_boolean varargs;
1514 
1515 	  domain = parse_stab_type (dhandle, info, (const char *) NULL,
1516 				    pp, (debug_type **) NULL, p_end);
1517 	  if (domain == DEBUG_TYPE_NULL)
1518 	    return DEBUG_TYPE_NULL;
1519 
1520 	  if (**pp != ',')
1521 	    {
1522 	      bad_stab (orig);
1523 	      return DEBUG_TYPE_NULL;
1524 	    }
1525 	  ++*pp;
1526 
1527 	  return_type = parse_stab_type (dhandle, info, (const char *) NULL,
1528 					 pp, (debug_type **) NULL, p_end);
1529 	  if (return_type == DEBUG_TYPE_NULL)
1530 	    return DEBUG_TYPE_NULL;
1531 
1532 	  alloc = 10;
1533 	  args = (debug_type *) xmalloc (alloc * sizeof *args);
1534 	  n = 0;
1535 	  while (**pp != ';')
1536 	    {
1537 	      if (**pp != ',')
1538 		{
1539 		  bad_stab (orig);
1540 		  return DEBUG_TYPE_NULL;
1541 		}
1542 	      ++*pp;
1543 
1544 	      if (n + 1 >= alloc)
1545 		{
1546 		  alloc += 10;
1547 		  args = ((debug_type *)
1548 			  xrealloc (args, alloc * sizeof *args));
1549 		}
1550 
1551 	      args[n] = parse_stab_type (dhandle, info, (const char *) NULL,
1552 					 pp, (debug_type **) NULL, p_end);
1553 	      if (args[n] == DEBUG_TYPE_NULL)
1554 		return DEBUG_TYPE_NULL;
1555 	      ++n;
1556 	    }
1557 	  ++*pp;
1558 
1559 	  /* If the last type is not void, then this function takes a
1560 	     variable number of arguments.  Otherwise, we must strip
1561 	     the void type.  */
1562 	  if (n == 0
1563 	      || debug_get_type_kind (dhandle, args[n - 1]) != DEBUG_KIND_VOID)
1564 	    varargs = TRUE;
1565 	  else
1566 	    {
1567 	      --n;
1568 	      varargs = FALSE;
1569 	    }
1570 
1571 	  args[n] = DEBUG_TYPE_NULL;
1572 
1573 	  dtype = debug_make_method_type (dhandle, return_type, domain, args,
1574 					  varargs);
1575 	}
1576       break;
1577 
1578     case 'r':
1579       /* Range type.  */
1580       dtype = parse_stab_range_type (dhandle, info, type_name, pp, typenums, p_end);
1581       break;
1582 
1583     case 'b':
1584       /* FIXME: gdb checks os9k_stabs here.  */
1585       /* Sun ACC builtin int type.  */
1586       dtype = parse_stab_sun_builtin_type (dhandle, pp, p_end);
1587       break;
1588 
1589     case 'R':
1590       /* Sun ACC builtin float type.  */
1591       dtype = parse_stab_sun_floating_type (dhandle, pp, p_end);
1592       break;
1593 
1594     case 'e':
1595       /* Enumeration type.  */
1596       dtype = parse_stab_enum_type (dhandle, pp, p_end);
1597       break;
1598 
1599     case 's':
1600     case 'u':
1601       /* Struct or union type.  */
1602       dtype = parse_stab_struct_type (dhandle, info, type_name, pp,
1603 				      descriptor == 's', typenums, p_end);
1604       break;
1605 
1606     case 'a':
1607       /* Array type.  */
1608       if (**pp != 'r')
1609 	{
1610 	  bad_stab (orig);
1611 	  return DEBUG_TYPE_NULL;
1612 	}
1613       ++*pp;
1614 
1615       dtype = parse_stab_array_type (dhandle, info, pp, stringp, p_end);
1616       break;
1617 
1618     case 'S':
1619       dtype = debug_make_set_type (dhandle,
1620 				   parse_stab_type (dhandle, info,
1621 						    (const char *) NULL,
1622 						    pp,
1623 						    (debug_type **) NULL,
1624 						    p_end),
1625 				   stringp);
1626       break;
1627 
1628     default:
1629       bad_stab (orig);
1630       return DEBUG_TYPE_NULL;
1631     }
1632 
1633   if (dtype == DEBUG_TYPE_NULL)
1634     return DEBUG_TYPE_NULL;
1635 
1636   if (typenums[0] != -1)
1637     {
1638       if (! stab_record_type (dhandle, info, typenums, dtype))
1639 	return DEBUG_TYPE_NULL;
1640     }
1641 
1642   if (size != -1)
1643     {
1644       if (! debug_record_type_size (dhandle, dtype, (unsigned int) size))
1645 	return DEBUG_TYPE_NULL;
1646     }
1647 
1648   return dtype;
1649 }
1650 
1651 /* Read a number by which a type is referred to in dbx data, or
1652    perhaps read a pair (FILENUM, TYPENUM) in parentheses.  Just a
1653    single number N is equivalent to (0,N).  Return the two numbers by
1654    storing them in the vector TYPENUMS.  */
1655 
1656 static bfd_boolean
1657 parse_stab_type_number (const char **pp, int *typenums, const char *p_end)
1658 {
1659   const char *orig;
1660 
1661   orig = *pp;
1662 
1663   if (**pp != '(')
1664     {
1665       typenums[0] = 0;
1666       typenums[1] = (int) parse_number (pp, (bfd_boolean *) NULL, p_end);
1667       return TRUE;
1668     }
1669 
1670   ++*pp;
1671   typenums[0] = (int) parse_number (pp, (bfd_boolean *) NULL, p_end);
1672   if (**pp != ',')
1673     {
1674       bad_stab (orig);
1675       return FALSE;
1676     }
1677 
1678   ++*pp;
1679   typenums[1] = (int) parse_number (pp, (bfd_boolean *) NULL, p_end);
1680   if (**pp != ')')
1681     {
1682       bad_stab (orig);
1683       return FALSE;
1684     }
1685 
1686   ++*pp;
1687   return TRUE;
1688 }
1689 
1690 /* Parse a range type.  */
1691 
1692 static debug_type
1693 parse_stab_range_type (void *                dhandle,
1694 		       struct stab_handle *  info,
1695 		       const char *          type_name,
1696 		       const char **         pp,
1697 		       const int *           typenums,
1698 		       const char *          p_end)
1699 {
1700   const char *orig;
1701   int rangenums[2];
1702   bfd_boolean self_subrange;
1703   debug_type index_type;
1704   const char *s2, *s3;
1705   bfd_signed_vma n2, n3;
1706   bfd_boolean ov2, ov3;
1707 
1708   orig = *pp;
1709   if (orig >= p_end)
1710     return DEBUG_TYPE_NULL;
1711 
1712   index_type = DEBUG_TYPE_NULL;
1713 
1714   /* First comes a type we are a subrange of.
1715      In C it is usually 0, 1 or the type being defined.  */
1716   if (! parse_stab_type_number (pp, rangenums, p_end))
1717     return DEBUG_TYPE_NULL;
1718 
1719   self_subrange = (rangenums[0] == typenums[0]
1720 		   && rangenums[1] == typenums[1]);
1721 
1722   if (**pp == '=')
1723     {
1724       *pp = orig;
1725       index_type = parse_stab_type (dhandle, info, (const char *) NULL,
1726 				    pp, (debug_type **) NULL, p_end);
1727       if (index_type == DEBUG_TYPE_NULL)
1728 	return DEBUG_TYPE_NULL;
1729     }
1730 
1731   if (**pp == ';')
1732     ++*pp;
1733 
1734   /* The remaining two operands are usually lower and upper bounds of
1735      the range.  But in some special cases they mean something else.  */
1736   s2 = *pp;
1737   n2 = parse_number (pp, &ov2, p_end);
1738   if (**pp != ';')
1739     {
1740       bad_stab (orig);
1741       return DEBUG_TYPE_NULL;
1742     }
1743   ++*pp;
1744 
1745   s3 = *pp;
1746   n3 = parse_number (pp, &ov3, p_end);
1747   if (**pp != ';')
1748     {
1749       bad_stab (orig);
1750       return DEBUG_TYPE_NULL;
1751     }
1752   ++*pp;
1753 
1754   if (ov2 || ov3)
1755     {
1756       /* gcc will emit range stabs for long long types.  Handle this
1757          as a special case.  FIXME: This needs to be more general.  */
1758 #define LLLOW   "01000000000000000000000;"
1759 #define LLHIGH   "0777777777777777777777;"
1760 #define ULLHIGH "01777777777777777777777;"
1761       if (index_type == DEBUG_TYPE_NULL)
1762 	{
1763 	  if (CONST_STRNEQ (s2, LLLOW)
1764 	      && CONST_STRNEQ (s3, LLHIGH))
1765 	    return debug_make_int_type (dhandle, 8, FALSE);
1766 	  if (! ov2
1767 	      && n2 == 0
1768 	      && CONST_STRNEQ (s3, ULLHIGH))
1769 	    return debug_make_int_type (dhandle, 8, TRUE);
1770 	}
1771 
1772       warn_stab (orig, _("numeric overflow"));
1773     }
1774 
1775   if (index_type == DEBUG_TYPE_NULL)
1776     {
1777       /* A type defined as a subrange of itself, with both bounds 0,
1778          is void.  */
1779       if (self_subrange && n2 == 0 && n3 == 0)
1780 	return debug_make_void_type (dhandle);
1781 
1782       /* A type defined as a subrange of itself, with n2 positive and
1783 	 n3 zero, is a complex type, and n2 is the number of bytes.  */
1784       if (self_subrange && n3 == 0 && n2 > 0)
1785 	return debug_make_complex_type (dhandle, n2);
1786 
1787       /* If n3 is zero and n2 is positive, this is a floating point
1788          type, and n2 is the number of bytes.  */
1789       if (n3 == 0 && n2 > 0)
1790 	return debug_make_float_type (dhandle, n2);
1791 
1792       /* If the upper bound is -1, this is an unsigned int.  */
1793       if (n2 == 0 && n3 == -1)
1794 	{
1795 	  /* When gcc is used with -gstabs, but not -gstabs+, it will emit
1796 	         long long int:t6=r1;0;-1;
1797 		 long long unsigned int:t7=r1;0;-1;
1798 	     We hack here to handle this reasonably.  */
1799 	  if (type_name != NULL)
1800 	    {
1801 	      if (strcmp (type_name, "long long int") == 0)
1802 		return debug_make_int_type (dhandle, 8, FALSE);
1803 	      else if (strcmp (type_name, "long long unsigned int") == 0)
1804 		return debug_make_int_type (dhandle, 8, TRUE);
1805 	    }
1806 	  /* FIXME: The size here really depends upon the target.  */
1807 	  return debug_make_int_type (dhandle, 4, TRUE);
1808 	}
1809 
1810       /* A range of 0 to 127 is char.  */
1811       if (self_subrange && n2 == 0 && n3 == 127)
1812 	return debug_make_int_type (dhandle, 1, FALSE);
1813 
1814       /* FIXME: gdb checks for the language CHILL here.  */
1815 
1816       if (n2 == 0)
1817 	{
1818 	  if (n3 < 0)
1819 	    return debug_make_int_type (dhandle, - n3, TRUE);
1820 	  else if (n3 == 0xff)
1821 	    return debug_make_int_type (dhandle, 1, TRUE);
1822 	  else if (n3 == 0xffff)
1823 	    return debug_make_int_type (dhandle, 2, TRUE);
1824 	  else if (n3 == (bfd_signed_vma) 0xffffffff)
1825 	    return debug_make_int_type (dhandle, 4, TRUE);
1826 #ifdef BFD64
1827 	  else if (n3 == (bfd_signed_vma) 0xffffffffffffffffLL)
1828 	    return debug_make_int_type (dhandle, 8, TRUE);
1829 #endif
1830 	}
1831       else if (n3 == 0
1832 	       && n2 < 0
1833 	       && (self_subrange || n2 == -8))
1834 	return debug_make_int_type (dhandle, - n2, TRUE);
1835       else if (n2 == - n3 - 1 || n2 == n3 + 1)
1836 	{
1837 	  if (n3 == 0x7f)
1838 	    return debug_make_int_type (dhandle, 1, FALSE);
1839 	  else if (n3 == 0x7fff)
1840 	    return debug_make_int_type (dhandle, 2, FALSE);
1841 	  else if (n3 == 0x7fffffff)
1842 	    return debug_make_int_type (dhandle, 4, FALSE);
1843 #ifdef BFD64
1844 	  else if (n3 == ((((bfd_vma) 0x7fffffff) << 32) | 0xffffffff))
1845 	    return debug_make_int_type (dhandle, 8, FALSE);
1846 #endif
1847 	}
1848     }
1849 
1850   /* At this point I don't have the faintest idea how to deal with a
1851      self_subrange type; I'm going to assume that this is used as an
1852      idiom, and that all of them are special cases.  So . . .  */
1853   if (self_subrange)
1854     {
1855       bad_stab (orig);
1856       return DEBUG_TYPE_NULL;
1857     }
1858 
1859   index_type = stab_find_type (dhandle, info, rangenums);
1860   if (index_type == DEBUG_TYPE_NULL)
1861     {
1862       /* Does this actually ever happen?  Is that why we are worrying
1863          about dealing with it rather than just calling error_type?  */
1864       warn_stab (orig, _("missing index type"));
1865       index_type = debug_make_int_type (dhandle, 4, FALSE);
1866     }
1867 
1868   return debug_make_range_type (dhandle, index_type, n2, n3);
1869 }
1870 
1871 /* Sun's ACC uses a somewhat saner method for specifying the builtin
1872    typedefs in every file (for int, long, etc):
1873 
1874 	type = b <signed> <width>; <offset>; <nbits>
1875 	signed = u or s.  Possible c in addition to u or s (for char?).
1876 	offset = offset from high order bit to start bit of type.
1877 	width is # bytes in object of this type, nbits is # bits in type.
1878 
1879    The width/offset stuff appears to be for small objects stored in
1880    larger ones (e.g. `shorts' in `int' registers).  We ignore it for now,
1881    FIXME.  */
1882 
1883 static debug_type
1884 parse_stab_sun_builtin_type (void *dhandle, const char **pp, const char * p_end)
1885 {
1886   const char *orig;
1887   bfd_boolean unsignedp;
1888   bfd_vma bits;
1889 
1890   orig = *pp;
1891   if (orig >= p_end)
1892     return DEBUG_TYPE_NULL;
1893 
1894   switch (**pp)
1895     {
1896     case 's':
1897       unsignedp = FALSE;
1898       break;
1899     case 'u':
1900       unsignedp = TRUE;
1901       break;
1902     default:
1903       bad_stab (orig);
1904       return DEBUG_TYPE_NULL;
1905     }
1906   ++*pp;
1907 
1908   /* OpenSolaris source code indicates that one of "cbv" characters
1909      can come next and specify the intrinsic 'iformat' encoding.
1910      'c' is character encoding, 'b' is boolean encoding, and 'v' is
1911      varargs encoding.  This field can be safely ignored because
1912      the type of the field is determined from the bitwidth extracted
1913      below.  */
1914   if (**pp == 'c' || **pp == 'b' || **pp == 'v')
1915     ++*pp;
1916 
1917   /* The first number appears to be the number of bytes occupied
1918      by this type, except that unsigned short is 4 instead of 2.
1919      Since this information is redundant with the third number,
1920      we will ignore it.  */
1921   (void) parse_number (pp, (bfd_boolean *) NULL, p_end);
1922   if (**pp != ';')
1923     {
1924       bad_stab (orig);
1925       return DEBUG_TYPE_NULL;
1926     }
1927   ++*pp;
1928 
1929   /* The second number is always 0, so ignore it too.  */
1930   (void) parse_number (pp, (bfd_boolean *) NULL, p_end);
1931   if (**pp != ';')
1932     {
1933       bad_stab (orig);
1934       return DEBUG_TYPE_NULL;
1935     }
1936   ++*pp;
1937 
1938   /* The third number is the number of bits for this type.  */
1939   bits = parse_number (pp, (bfd_boolean *) NULL, p_end);
1940 
1941   /* The type *should* end with a semicolon.  If it are embedded
1942      in a larger type the semicolon may be the only way to know where
1943      the type ends.  If this type is at the end of the stabstring we
1944      can deal with the omitted semicolon (but we don't have to like
1945      it).  Don't bother to complain(), Sun's compiler omits the semicolon
1946      for "void".  */
1947   if (**pp == ';')
1948     ++*pp;
1949 
1950   if (bits == 0)
1951     return debug_make_void_type (dhandle);
1952 
1953   return debug_make_int_type (dhandle, bits / 8, unsignedp);
1954 }
1955 
1956 /* Parse a builtin floating type generated by the Sun compiler.  */
1957 
1958 static debug_type
1959 parse_stab_sun_floating_type (void *dhandle, const char **pp, const char *p_end)
1960 {
1961   const char *orig;
1962   bfd_vma details;
1963   bfd_vma bytes;
1964 
1965   orig = *pp;
1966   if (orig >= p_end)
1967     return DEBUG_TYPE_NULL;
1968 
1969   /* The first number has more details about the type, for example
1970      FN_COMPLEX.  */
1971   details = parse_number (pp, (bfd_boolean *) NULL, p_end);
1972   if (**pp != ';')
1973     {
1974       bad_stab (orig);
1975       return DEBUG_TYPE_NULL;
1976     }
1977 
1978   /* The second number is the number of bytes occupied by this type */
1979   bytes = parse_number (pp, (bfd_boolean *) NULL, p_end);
1980   if (**pp != ';')
1981     {
1982       bad_stab (orig);
1983       return DEBUG_TYPE_NULL;
1984     }
1985 
1986   if (details == NF_COMPLEX
1987       || details == NF_COMPLEX16
1988       || details == NF_COMPLEX32)
1989     return debug_make_complex_type (dhandle, bytes);
1990 
1991   return debug_make_float_type (dhandle, bytes);
1992 }
1993 
1994 /* Handle an enum type.  */
1995 
1996 static debug_type
1997 parse_stab_enum_type (void *dhandle, const char **pp, const char * p_end)
1998 {
1999   const char *orig;
2000   const char **names;
2001   bfd_signed_vma *values;
2002   unsigned int n;
2003   unsigned int alloc;
2004 
2005   orig = *pp;
2006   if (orig >= p_end)
2007     return DEBUG_TYPE_NULL;
2008 
2009   /* FIXME: gdb checks os9k_stabs here.  */
2010 
2011   /* The aix4 compiler emits an extra field before the enum members;
2012      my guess is it's a type of some sort.  Just ignore it.  */
2013   if (**pp == '-')
2014     {
2015       while (**pp != ':' && **pp != 0)
2016 	++*pp;
2017 
2018       if (**pp == 0)
2019 	{
2020 	  bad_stab (orig);
2021 	  return DEBUG_TYPE_NULL;
2022 	}
2023       ++*pp;
2024     }
2025 
2026   /* Read the value-names and their values.
2027      The input syntax is NAME:VALUE,NAME:VALUE, and so on.
2028      A semicolon or comma instead of a NAME means the end.  */
2029   alloc = 10;
2030   names = (const char **) xmalloc (alloc * sizeof *names);
2031   values = (bfd_signed_vma *) xmalloc (alloc * sizeof *values);
2032   n = 0;
2033   while (**pp != '\0' && **pp != ';' && **pp != ',')
2034     {
2035       const char *p;
2036       char *name;
2037       bfd_signed_vma val;
2038 
2039       p = *pp;
2040       while (*p != ':' && *p != 0)
2041 	++p;
2042 
2043       if (*p == 0)
2044 	{
2045 	  bad_stab (orig);
2046 	  free (names);
2047 	  free (values);
2048 	  return DEBUG_TYPE_NULL;
2049 	}
2050 
2051       name = savestring (*pp, p - *pp);
2052 
2053       *pp = p + 1;
2054       val = (bfd_signed_vma) parse_number (pp, (bfd_boolean *) NULL, p_end);
2055       if (**pp != ',')
2056 	{
2057 	  bad_stab (orig);
2058 	  free (name);
2059 	  free (names);
2060 	  free (values);
2061 	  return DEBUG_TYPE_NULL;
2062 	}
2063       ++*pp;
2064 
2065       if (n + 1 >= alloc)
2066 	{
2067 	  alloc += 10;
2068 	  names = ((const char **)
2069 		   xrealloc (names, alloc * sizeof *names));
2070 	  values = ((bfd_signed_vma *)
2071 		    xrealloc (values, alloc * sizeof *values));
2072 	}
2073 
2074       names[n] = name;
2075       values[n] = val;
2076       ++n;
2077     }
2078 
2079   names[n] = NULL;
2080   values[n] = 0;
2081 
2082   if (**pp == ';')
2083     ++*pp;
2084 
2085   return debug_make_enum_type (dhandle, names, values);
2086 }
2087 
2088 /* Read the description of a structure (or union type) and return an object
2089    describing the type.
2090 
2091    PP points to a character pointer that points to the next unconsumed token
2092    in the stabs string.  For example, given stabs "A:T4=s4a:1,0,32;;",
2093    *PP will point to "4a:1,0,32;;".  */
2094 
2095 static debug_type
2096 parse_stab_struct_type (void *                dhandle,
2097 			struct stab_handle *  info,
2098 			const char *          tagname,
2099 			const char **         pp,
2100 			bfd_boolean           structp,
2101 			const int *           typenums,
2102 			const char *          p_end)
2103 {
2104   bfd_vma size;
2105   debug_baseclass *baseclasses;
2106   debug_field *fields = NULL;
2107   bfd_boolean statics;
2108   debug_method *methods;
2109   debug_type vptrbase;
2110   bfd_boolean ownvptr;
2111 
2112   /* Get the size.  */
2113   size = parse_number (pp, (bfd_boolean *) NULL, p_end);
2114 
2115   /* Get the other information.  */
2116   if (! parse_stab_baseclasses (dhandle, info, pp, &baseclasses, p_end)
2117       || ! parse_stab_struct_fields (dhandle, info, pp, &fields, &statics, p_end)
2118       || ! parse_stab_members (dhandle, info, tagname, pp, typenums, &methods, p_end)
2119       || ! parse_stab_tilde_field (dhandle, info, pp, typenums, &vptrbase,
2120 				   &ownvptr, p_end))
2121     {
2122       if (fields != NULL)
2123 	free (fields);
2124       return DEBUG_TYPE_NULL;
2125     }
2126 
2127   if (! statics
2128       && baseclasses == NULL
2129       && methods == NULL
2130       && vptrbase == DEBUG_TYPE_NULL
2131       && ! ownvptr)
2132     return debug_make_struct_type (dhandle, structp, size, fields);
2133 
2134   return debug_make_object_type (dhandle, structp, size, fields, baseclasses,
2135 				 methods, vptrbase, ownvptr);
2136 }
2137 
2138 /* The stabs for C++ derived classes contain baseclass information which
2139    is marked by a '!' character after the total size.  This function is
2140    called when we encounter the baseclass marker, and slurps up all the
2141    baseclass information.
2142 
2143    Immediately following the '!' marker is the number of base classes that
2144    the class is derived from, followed by information for each base class.
2145    For each base class, there are two visibility specifiers, a bit offset
2146    to the base class information within the derived class, a reference to
2147    the type for the base class, and a terminating semicolon.
2148 
2149    A typical example, with two base classes, would be "!2,020,19;0264,21;".
2150 						       ^^ ^ ^ ^  ^ ^  ^
2151 	Baseclass information marker __________________|| | | |  | |  |
2152 	Number of baseclasses __________________________| | | |  | |  |
2153 	Visibility specifiers (2) ________________________| | |  | |  |
2154 	Offset in bits from start of class _________________| |  | |  |
2155 	Type number for base class ___________________________|  | |  |
2156 	Visibility specifiers (2) _______________________________| |  |
2157 	Offset in bits from start of class ________________________|  |
2158 	Type number of base class ____________________________________|
2159 
2160   Return TRUE for success, FALSE for failure.  */
2161 
2162 static bfd_boolean
2163 parse_stab_baseclasses (void *                dhandle,
2164 			struct stab_handle *  info,
2165 			const char **         pp,
2166 			debug_baseclass **    retp,
2167 			const char *          p_end)
2168 {
2169   const char *orig;
2170   unsigned int c, i;
2171   debug_baseclass *classes;
2172 
2173   *retp = NULL;
2174 
2175   orig = *pp;
2176   if (orig >= p_end)
2177     return FALSE;
2178 
2179   if (**pp != '!')
2180     {
2181       /* No base classes.  */
2182       return TRUE;
2183     }
2184   ++*pp;
2185 
2186   c = (unsigned int) parse_number (pp, (bfd_boolean *) NULL, p_end);
2187 
2188   if (**pp != ',')
2189     {
2190       bad_stab (orig);
2191       return FALSE;
2192     }
2193   ++*pp;
2194 
2195   classes = (debug_baseclass *) xmalloc ((c + 1) * sizeof (**retp));
2196 
2197   for (i = 0; i < c; i++)
2198     {
2199       bfd_boolean is_virtual;
2200       enum debug_visibility visibility;
2201       bfd_vma bitpos;
2202       debug_type type;
2203 
2204       switch (**pp)
2205 	{
2206 	case '0':
2207 	  is_virtual = FALSE;
2208 	  break;
2209 	case '1':
2210 	  is_virtual = TRUE;
2211 	  break;
2212 	case 0:
2213 	  bad_stab (orig);
2214 	  return FALSE;
2215 	default:
2216 	  warn_stab (orig, _("unknown virtual character for baseclass"));
2217 	  is_virtual = FALSE;
2218 	  break;
2219 	}
2220       ++*pp;
2221 
2222       switch (**pp)
2223 	{
2224 	case '0':
2225 	  visibility = DEBUG_VISIBILITY_PRIVATE;
2226 	  break;
2227 	case '1':
2228 	  visibility = DEBUG_VISIBILITY_PROTECTED;
2229 	  break;
2230 	case '2':
2231 	  visibility = DEBUG_VISIBILITY_PUBLIC;
2232 	  break;
2233 	case 0:
2234 	  bad_stab (orig);
2235 	  return FALSE;
2236 	default:
2237 	  warn_stab (orig, _("unknown visibility character for baseclass"));
2238 	  visibility = DEBUG_VISIBILITY_PUBLIC;
2239 	  break;
2240 	}
2241       ++*pp;
2242 
2243       /* The remaining value is the bit offset of the portion of the
2244 	 object corresponding to this baseclass.  Always zero in the
2245 	 absence of multiple inheritance.  */
2246       bitpos = parse_number (pp, (bfd_boolean *) NULL, p_end);
2247       if (**pp != ',')
2248 	{
2249 	  bad_stab (orig);
2250 	  return FALSE;
2251 	}
2252       ++*pp;
2253 
2254       type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2255 			      (debug_type **) NULL, p_end);
2256       if (type == DEBUG_TYPE_NULL)
2257 	return FALSE;
2258 
2259       classes[i] = debug_make_baseclass (dhandle, type, bitpos, is_virtual,
2260 					 visibility);
2261       if (classes[i] == DEBUG_BASECLASS_NULL)
2262 	return FALSE;
2263 
2264       if (**pp != ';')
2265 	return FALSE;
2266       ++*pp;
2267     }
2268 
2269   classes[i] = DEBUG_BASECLASS_NULL;
2270 
2271   *retp = classes;
2272 
2273   return TRUE;
2274 }
2275 
2276 /* Read struct or class data fields.  They have the form:
2277 
2278 	NAME : [VISIBILITY] TYPENUM , BITPOS , BITSIZE ;
2279 
2280    At the end, we see a semicolon instead of a field.
2281 
2282    In C++, this may wind up being NAME:?TYPENUM:PHYSNAME; for
2283    a static field.
2284 
2285    The optional VISIBILITY is one of:
2286 
2287 	'/0'	(VISIBILITY_PRIVATE)
2288 	'/1'	(VISIBILITY_PROTECTED)
2289 	'/2'	(VISIBILITY_PUBLIC)
2290 	'/9'	(VISIBILITY_IGNORE)
2291 
2292    or nothing, for C style fields with public visibility.
2293 
2294    Returns 1 for success, 0 for failure.  */
2295 
2296 static bfd_boolean
2297 parse_stab_struct_fields (void *                dhandle,
2298 			  struct stab_handle *  info,
2299 			  const char **         pp,
2300 			  debug_field **        retp,
2301 			  bfd_boolean *         staticsp,
2302 			  const char *          p_end)
2303 {
2304   const char *orig;
2305   const char *p;
2306   debug_field *fields;
2307   unsigned int c;
2308   unsigned int alloc;
2309 
2310   *retp = NULL;
2311   *staticsp = FALSE;
2312 
2313   orig = *pp;
2314   if (orig >= p_end)
2315     return FALSE;
2316 
2317   c = 0;
2318   alloc = 10;
2319   fields = (debug_field *) xmalloc (alloc * sizeof *fields);
2320   while (**pp != ';')
2321     {
2322       /* FIXME: gdb checks os9k_stabs here.  */
2323 
2324       p = *pp;
2325 
2326       /* Add 1 to c to leave room for NULL pointer at end.  */
2327       if (c + 1 >= alloc)
2328 	{
2329 	  alloc += 10;
2330 	  fields = ((debug_field *)
2331 		    xrealloc (fields, alloc * sizeof *fields));
2332 	}
2333 
2334       /* If it starts with CPLUS_MARKER it is a special abbreviation,
2335 	 unless the CPLUS_MARKER is followed by an underscore, in
2336 	 which case it is just the name of an anonymous type, which we
2337 	 should handle like any other type name.  We accept either '$'
2338 	 or '.', because a field name can never contain one of these
2339 	 characters except as a CPLUS_MARKER.  */
2340 
2341       if ((*p == '$' || *p == '.') && p[1] != '_')
2342 	{
2343 	  ++*pp;
2344 	  if (! parse_stab_cpp_abbrev (dhandle, info, pp, fields + c, p_end))
2345 	    {
2346 	      free (fields);
2347 	      return FALSE;
2348 	    }
2349 	  ++c;
2350 	  continue;
2351 	}
2352 
2353       /* Look for the ':' that separates the field name from the field
2354 	 values.  Data members are delimited by a single ':', while member
2355 	 functions are delimited by a pair of ':'s.  When we hit the member
2356 	 functions (if any), terminate scan loop and return.  */
2357 
2358       p = strchr (p, ':');
2359       if (p == NULL)
2360 	{
2361 	  bad_stab (orig);
2362 	  free (fields);
2363 	  return FALSE;
2364 	}
2365 
2366       if (p[1] == ':')
2367 	break;
2368 
2369       if (! parse_stab_one_struct_field (dhandle, info, pp, p, fields + c,
2370 					 staticsp, p_end))
2371 	return FALSE;
2372 
2373       ++c;
2374     }
2375 
2376   fields[c] = DEBUG_FIELD_NULL;
2377 
2378   *retp = fields;
2379 
2380   return TRUE;
2381 }
2382 
2383 /* Special GNU C++ name.  */
2384 
2385 static bfd_boolean
2386 parse_stab_cpp_abbrev (void *                dhandle,
2387 		       struct stab_handle *  info,
2388 		       const char **         pp,
2389 		       debug_field *         retp,
2390 		       const char *          p_end)
2391 {
2392   const char *orig;
2393   int cpp_abbrev;
2394   debug_type context;
2395   const char *name;
2396   const char *type_name;
2397   debug_type type;
2398   bfd_vma bitpos;
2399 
2400   *retp = DEBUG_FIELD_NULL;
2401 
2402   orig = *pp;
2403   if (orig >= p_end)
2404     return FALSE;
2405 
2406   if (**pp != 'v')
2407     {
2408       bad_stab (*pp);
2409       return FALSE;
2410     }
2411   ++*pp;
2412 
2413   cpp_abbrev = **pp;
2414   if (cpp_abbrev == 0)
2415     {
2416       bad_stab (orig);
2417       return FALSE;
2418     }
2419   ++*pp;
2420 
2421   /* At this point, *pp points to something like "22:23=*22...", where
2422      the type number before the ':' is the "context" and everything
2423      after is a regular type definition.  Lookup the type, find it's
2424      name, and construct the field name.  */
2425 
2426   context = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2427 			     (debug_type **) NULL, p_end);
2428   if (context == DEBUG_TYPE_NULL)
2429     return FALSE;
2430 
2431   switch (cpp_abbrev)
2432     {
2433     case 'f':
2434       /* $vf -- a virtual function table pointer.  */
2435       name = "_vptr$";
2436       break;
2437     case 'b':
2438       /* $vb -- a virtual bsomethingorother */
2439       type_name = debug_get_type_name (dhandle, context);
2440       if (type_name == NULL)
2441 	{
2442 	  warn_stab (orig, _("unnamed $vb type"));
2443 	  type_name = "FOO";
2444 	}
2445       name = concat ("_vb$", type_name, (const char *) NULL);
2446       break;
2447     default:
2448       warn_stab (orig, _("unrecognized C++ abbreviation"));
2449       name = "INVALID_CPLUSPLUS_ABBREV";
2450       break;
2451     }
2452 
2453   if (**pp != ':')
2454     {
2455       bad_stab (orig);
2456       return FALSE;
2457     }
2458   ++*pp;
2459 
2460   type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2461 			  (debug_type **) NULL, p_end);
2462   if (**pp != ',')
2463     {
2464       bad_stab (orig);
2465       return FALSE;
2466     }
2467   ++*pp;
2468 
2469   bitpos = parse_number (pp, (bfd_boolean *) NULL, p_end);
2470   if (**pp != ';')
2471     {
2472       bad_stab (orig);
2473       return FALSE;
2474     }
2475   ++*pp;
2476 
2477   *retp = debug_make_field (dhandle, name, type, bitpos, 0,
2478 			    DEBUG_VISIBILITY_PRIVATE);
2479   if (*retp == DEBUG_FIELD_NULL)
2480     return FALSE;
2481 
2482   return TRUE;
2483 }
2484 
2485 /* Parse a single field in a struct or union.  */
2486 
2487 static bfd_boolean
2488 parse_stab_one_struct_field (void *                dhandle,
2489 			     struct stab_handle *  info,
2490 			     const char **         pp,
2491 			     const char *          p,
2492 			     debug_field *         retp,
2493 			     bfd_boolean *         staticsp,
2494 			     const char *          p_end)
2495 {
2496   const char *orig;
2497   char *name;
2498   enum debug_visibility visibility;
2499   debug_type type;
2500   bfd_vma bitpos;
2501   bfd_vma bitsize;
2502 
2503   orig = *pp;
2504   if (orig >= p_end)
2505     return FALSE;
2506 
2507   /* FIXME: gdb checks ARM_DEMANGLING here.  */
2508 
2509   name = savestring (*pp, p - *pp);
2510 
2511   *pp = p + 1;
2512 
2513   if (**pp != '/')
2514     visibility = DEBUG_VISIBILITY_PUBLIC;
2515   else
2516     {
2517       ++*pp;
2518       switch (**pp)
2519 	{
2520 	case '0':
2521 	  visibility = DEBUG_VISIBILITY_PRIVATE;
2522 	  break;
2523 	case '1':
2524 	  visibility = DEBUG_VISIBILITY_PROTECTED;
2525 	  break;
2526 	case '2':
2527 	  visibility = DEBUG_VISIBILITY_PUBLIC;
2528 	  break;
2529 	case 0:
2530 	  bad_stab (orig);
2531 	  return FALSE;
2532 	default:
2533 	  warn_stab (orig, _("unknown visibility character for field"));
2534 	  visibility = DEBUG_VISIBILITY_PUBLIC;
2535 	  break;
2536 	}
2537       ++*pp;
2538     }
2539 
2540   type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2541 			  (debug_type **) NULL, p_end);
2542   if (type == DEBUG_TYPE_NULL)
2543     {
2544       free (name);
2545       return FALSE;
2546     }
2547 
2548   if (**pp == ':')
2549     {
2550       char *varname;
2551 
2552       /* This is a static class member.  */
2553       ++*pp;
2554       p = strchr (*pp, ';');
2555       if (p == NULL)
2556 	{
2557 	  bad_stab (orig);
2558 	  free (name);
2559 	  return FALSE;
2560 	}
2561 
2562       varname = savestring (*pp, p - *pp);
2563 
2564       *pp = p + 1;
2565 
2566       *retp = debug_make_static_member (dhandle, name, type, varname,
2567 					visibility);
2568       *staticsp = TRUE;
2569 
2570       return TRUE;
2571     }
2572 
2573   if (**pp != ',')
2574     {
2575       bad_stab (orig);
2576       free (name);
2577       return FALSE;
2578     }
2579   ++*pp;
2580 
2581   bitpos = parse_number (pp, (bfd_boolean *) NULL, p_end);
2582   if (**pp != ',')
2583     {
2584       bad_stab (orig);
2585       free (name);
2586       return FALSE;
2587     }
2588   ++*pp;
2589 
2590   bitsize = parse_number (pp, (bfd_boolean *) NULL, p_end);
2591   if (**pp != ';')
2592     {
2593       bad_stab (orig);
2594       free (name);
2595       return FALSE;
2596     }
2597   ++*pp;
2598 
2599   if (bitpos == 0 && bitsize == 0)
2600     {
2601       /* This can happen in two cases: (1) at least for gcc 2.4.5 or
2602 	 so, it is a field which has been optimized out.  The correct
2603 	 stab for this case is to use VISIBILITY_IGNORE, but that is a
2604 	 recent invention.  (2) It is a 0-size array.  For example
2605 	 union { int num; char str[0]; } foo.  Printing "<no value>"
2606 	 for str in "p foo" is OK, since foo.str (and thus foo.str[3])
2607 	 will continue to work, and a 0-size array as a whole doesn't
2608 	 have any contents to print.
2609 
2610 	 I suspect this probably could also happen with gcc -gstabs
2611 	 (not -gstabs+) for static fields, and perhaps other C++
2612 	 extensions.  Hopefully few people use -gstabs with gdb, since
2613 	 it is intended for dbx compatibility.  */
2614       visibility = DEBUG_VISIBILITY_IGNORE;
2615     }
2616 
2617   /* FIXME: gdb does some stuff here to mark fields as unpacked.  */
2618 
2619   *retp = debug_make_field (dhandle, name, type, bitpos, bitsize, visibility);
2620 
2621   return TRUE;
2622 }
2623 
2624 /* Read member function stabs info for C++ classes.  The form of each member
2625    function data is:
2626 
2627 	NAME :: TYPENUM[=type definition] ARGS : PHYSNAME ;
2628 
2629    An example with two member functions is:
2630 
2631 	afunc1::20=##15;:i;2A.;afunc2::20:i;2A.;
2632 
2633    For the case of overloaded operators, the format is op$::*.funcs, where
2634    $ is the CPLUS_MARKER (usually '$'), `*' holds the place for an operator
2635    name (such as `+=') and `.' marks the end of the operator name.  */
2636 
2637 static bfd_boolean
2638 parse_stab_members (void *                dhandle,
2639 		    struct stab_handle *  info,
2640 		    const char *          tagname,
2641 		    const char **         pp,
2642 		    const int *           typenums,
2643 		    debug_method **       retp,
2644 		    const char *          p_end)
2645 {
2646   const char *orig;
2647   debug_method *methods;
2648   unsigned int c;
2649   unsigned int alloc;
2650   char *name = NULL;
2651   debug_method_variant *variants = NULL;
2652   char *argtypes = NULL;
2653 
2654   *retp = NULL;
2655 
2656   orig = *pp;
2657   if (orig >= p_end)
2658     return FALSE;
2659 
2660   alloc = 0;
2661   methods = NULL;
2662   c = 0;
2663 
2664   while (**pp != ';')
2665     {
2666       const char *p;
2667       unsigned int cvars;
2668       unsigned int allocvars;
2669       debug_type look_ahead_type;
2670 
2671       p = strchr (*pp, ':');
2672       if (p == NULL || p[1] != ':')
2673 	break;
2674 
2675       /* FIXME: Some systems use something other than '$' here.  */
2676       if ((*pp)[0] != 'o' || (*pp)[1] != 'p' || (*pp)[2] != '$')
2677 	{
2678 	  name = savestring (*pp, p - *pp);
2679 	  *pp = p + 2;
2680 	}
2681       else
2682 	{
2683 	  /* This is a completely weird case.  In order to stuff in the
2684 	     names that might contain colons (the usual name delimiter),
2685 	     Mike Tiemann defined a different name format which is
2686 	     signalled if the identifier is "op$".  In that case, the
2687 	     format is "op$::XXXX." where XXXX is the name.  This is
2688 	     used for names like "+" or "=".  YUUUUUUUK!  FIXME!  */
2689 	  *pp = p + 2;
2690 	  for (p = *pp; *p != '.' && *p != '\0'; p++)
2691 	    ;
2692 	  if (*p != '.')
2693 	    {
2694 	      bad_stab (orig);
2695 	      goto fail;
2696 	    }
2697 	  name = savestring (*pp, p - *pp);
2698 	  *pp = p + 1;
2699 	}
2700 
2701       allocvars = 10;
2702       variants = ((debug_method_variant *)
2703 		  xmalloc (allocvars * sizeof *variants));
2704       cvars = 0;
2705 
2706       look_ahead_type = DEBUG_TYPE_NULL;
2707 
2708       do
2709 	{
2710 	  debug_type type;
2711 	  bfd_boolean stub;
2712 	  enum debug_visibility visibility;
2713 	  bfd_boolean constp, volatilep, staticp;
2714 	  bfd_vma voffset;
2715 	  debug_type context;
2716 	  const char *physname;
2717 	  bfd_boolean varargs;
2718 
2719 	  if (look_ahead_type != DEBUG_TYPE_NULL)
2720 	    {
2721 	      /* g++ version 1 kludge */
2722 	      type = look_ahead_type;
2723 	      look_ahead_type = DEBUG_TYPE_NULL;
2724 	    }
2725 	  else
2726 	    {
2727 	      type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2728 				      (debug_type **) NULL, p_end);
2729 	      if (type == DEBUG_TYPE_NULL)
2730 		goto fail;
2731 
2732 	      if (**pp != ':')
2733 		{
2734 		  bad_stab (orig);
2735 		  goto fail;
2736 		}
2737 	    }
2738 
2739 	  ++*pp;
2740 	  p = strchr (*pp, ';');
2741 	  if (p == NULL)
2742 	    {
2743 	      bad_stab (orig);
2744 	      goto fail;
2745 	    }
2746 
2747 	  stub = FALSE;
2748 	  if (debug_get_type_kind (dhandle, type) == DEBUG_KIND_METHOD
2749 	      && debug_get_parameter_types (dhandle, type, &varargs) == NULL)
2750 	    stub = TRUE;
2751 
2752 	  argtypes = savestring (*pp, p - *pp);
2753 	  *pp = p + 1;
2754 
2755 	  switch (**pp)
2756 	    {
2757 	    case '0':
2758 	      visibility = DEBUG_VISIBILITY_PRIVATE;
2759 	      break;
2760 	    case '1':
2761 	      visibility = DEBUG_VISIBILITY_PROTECTED;
2762 	      break;
2763 	    case 0:
2764 	      bad_stab (orig);
2765 	      goto fail;
2766 	    default:
2767 	      visibility = DEBUG_VISIBILITY_PUBLIC;
2768 	      break;
2769 	    }
2770 	  ++*pp;
2771 
2772 	  constp = FALSE;
2773 	  volatilep = FALSE;
2774 	  switch (**pp)
2775 	    {
2776 	    case 'A':
2777 	      /* Normal function.  */
2778 	      ++*pp;
2779 	      break;
2780 	    case 'B':
2781 	      /* const member function.  */
2782 	      constp = TRUE;
2783 	      ++*pp;
2784 	      break;
2785 	    case 'C':
2786 	      /* volatile member function.  */
2787 	      volatilep = TRUE;
2788 	      ++*pp;
2789 	      break;
2790 	    case 'D':
2791 	      /* const volatile member function.  */
2792 	      constp = TRUE;
2793 	      volatilep = TRUE;
2794 	      ++*pp;
2795 	      break;
2796 	    case '*':
2797 	    case '?':
2798 	    case '.':
2799 	      /* File compiled with g++ version 1; no information.  */
2800 	      break;
2801 	    default:
2802 	      warn_stab (orig, _("const/volatile indicator missing"));
2803 	      break;
2804 	    }
2805 
2806 	  staticp = FALSE;
2807 	  switch (**pp)
2808 	    {
2809 	    case '*':
2810 	      /* virtual member function, followed by index.  The sign
2811 		 bit is supposedly set to distinguish
2812 		 pointers-to-methods from virtual function indices.  */
2813 	      ++*pp;
2814 	      voffset = parse_number (pp, (bfd_boolean *) NULL, p_end);
2815 	      if (**pp != ';')
2816 		{
2817 		  bad_stab (orig);
2818 		  goto fail;
2819 		}
2820 	      ++*pp;
2821 	      voffset &= 0x7fffffff;
2822 
2823 	      if (**pp == ';' || **pp == '\0')
2824 		{
2825 		  /* Must be g++ version 1.  */
2826 		  context = DEBUG_TYPE_NULL;
2827 		}
2828 	      else
2829 		{
2830 		  /* Figure out from whence this virtual function
2831 		     came.  It may belong to virtual function table of
2832 		     one of its baseclasses.  */
2833 		  look_ahead_type = parse_stab_type (dhandle, info,
2834 						     (const char *) NULL,
2835 						     pp,
2836 						     (debug_type **) NULL,
2837 						     p_end);
2838 		  if (**pp == ':')
2839 		    {
2840 		      /* g++ version 1 overloaded methods.  */
2841 		      context = DEBUG_TYPE_NULL;
2842 		    }
2843 		  else
2844 		    {
2845 		      context = look_ahead_type;
2846 		      look_ahead_type = DEBUG_TYPE_NULL;
2847 		      if (**pp != ';')
2848 			{
2849 			  bad_stab (orig);
2850 			  goto fail;
2851 			}
2852 		      ++*pp;
2853 		    }
2854 		}
2855 	      break;
2856 
2857 	    case '?':
2858 	      /* static member function.  */
2859 	      ++*pp;
2860 	      staticp = TRUE;
2861 	      voffset = 0;
2862 	      context = DEBUG_TYPE_NULL;
2863 	      if (strncmp (argtypes, name, strlen (name)) != 0)
2864 		stub = TRUE;
2865 	      break;
2866 
2867 	    default:
2868 	      warn_stab (orig, "member function type missing");
2869 	      voffset = 0;
2870 	      context = DEBUG_TYPE_NULL;
2871 	      break;
2872 
2873 	    case '.':
2874 	      ++*pp;
2875 	      voffset = 0;
2876 	      context = DEBUG_TYPE_NULL;
2877 	      break;
2878 	    }
2879 
2880 	  /* If the type is not a stub, then the argtypes string is
2881              the physical name of the function.  Otherwise the
2882              argtypes string is the mangled form of the argument
2883              types, and the full type and the physical name must be
2884              extracted from them.  */
2885 	  physname = argtypes;
2886 	  if (stub)
2887 	    {
2888 	      debug_type class_type, return_type;
2889 
2890 	      class_type = stab_find_type (dhandle, info, typenums);
2891 	      if (class_type == DEBUG_TYPE_NULL)
2892 		goto fail;
2893 	      return_type = debug_get_return_type (dhandle, type);
2894 	      if (return_type == DEBUG_TYPE_NULL)
2895 		{
2896 		  bad_stab (orig);
2897 		  goto fail;
2898 		}
2899 	      type = parse_stab_argtypes (dhandle, info, class_type, name,
2900 					  tagname, return_type, argtypes,
2901 					  constp, volatilep, &physname);
2902 	      if (type == DEBUG_TYPE_NULL)
2903 		goto fail;
2904 	    }
2905 
2906 	  if (cvars + 1 >= allocvars)
2907 	    {
2908 	      allocvars += 10;
2909 	      variants = ((debug_method_variant *)
2910 			  xrealloc (variants,
2911 				    allocvars * sizeof *variants));
2912 	    }
2913 
2914 	  if (! staticp)
2915 	    variants[cvars] = debug_make_method_variant (dhandle, physname,
2916 							 type, visibility,
2917 							 constp, volatilep,
2918 							 voffset, context);
2919 	  else
2920 	    variants[cvars] = debug_make_static_method_variant (dhandle,
2921 								physname,
2922 								type,
2923 								visibility,
2924 								constp,
2925 								volatilep);
2926 	  if (variants[cvars] == DEBUG_METHOD_VARIANT_NULL)
2927 	    goto fail;
2928 
2929 	  ++cvars;
2930 	}
2931       while (**pp != ';' && **pp != '\0');
2932 
2933       variants[cvars] = DEBUG_METHOD_VARIANT_NULL;
2934 
2935       if (**pp != '\0')
2936 	++*pp;
2937 
2938       if (c + 1 >= alloc)
2939 	{
2940 	  alloc += 10;
2941 	  methods = ((debug_method *)
2942 		     xrealloc (methods, alloc * sizeof *methods));
2943 	}
2944 
2945       methods[c] = debug_make_method (dhandle, name, variants);
2946 
2947       ++c;
2948     }
2949 
2950   if (methods != NULL)
2951     methods[c] = DEBUG_METHOD_NULL;
2952 
2953   *retp = methods;
2954 
2955   return TRUE;
2956 
2957  fail:
2958   if (name != NULL)
2959     free (name);
2960   if (variants != NULL)
2961     free (variants);
2962   if (argtypes != NULL)
2963     free (argtypes);
2964   return FALSE;
2965 }
2966 
2967 /* Parse a string representing argument types for a method.  Stabs
2968    tries to save space by packing argument types into a mangled
2969    string.  This string should give us enough information to extract
2970    both argument types and the physical name of the function, given
2971    the tag name.  */
2972 
2973 static debug_type
2974 parse_stab_argtypes (void *dhandle, struct stab_handle *info,
2975 		     debug_type class_type, const char *fieldname,
2976 		     const char *tagname, debug_type return_type,
2977 		     const char *argtypes, bfd_boolean constp,
2978 		     bfd_boolean volatilep, const char **pphysname)
2979 {
2980   bfd_boolean is_full_physname_constructor;
2981   bfd_boolean is_constructor;
2982   bfd_boolean is_destructor;
2983   bfd_boolean is_v3;
2984   debug_type *args;
2985   bfd_boolean varargs;
2986   unsigned int physname_len = 0;
2987 
2988   /* Constructors are sometimes handled specially.  */
2989   is_full_physname_constructor = ((argtypes[0] == '_'
2990 				   && argtypes[1] == '_'
2991 				   && (ISDIGIT (argtypes[2])
2992 				       || argtypes[2] == 'Q'
2993 				       || argtypes[2] == 't'))
2994 				  || CONST_STRNEQ (argtypes, "__ct"));
2995 
2996   is_constructor = (is_full_physname_constructor
2997 		    || (tagname != NULL
2998 			&& strcmp (fieldname, tagname) == 0));
2999   is_destructor = ((argtypes[0] == '_'
3000 		    && (argtypes[1] == '$' || argtypes[1] == '.')
3001 		    && argtypes[2] == '_')
3002 		   || CONST_STRNEQ (argtypes, "__dt"));
3003   is_v3 = argtypes[0] == '_' && argtypes[1] == 'Z';
3004 
3005   if (!(is_destructor || is_full_physname_constructor || is_v3))
3006     {
3007       unsigned int len;
3008       const char *const_prefix;
3009       const char *volatile_prefix;
3010       char buf[20];
3011       unsigned int mangled_name_len;
3012       char *physname;
3013 
3014       len = tagname == NULL ? 0 : strlen (tagname);
3015       const_prefix = constp ? "C" : "";
3016       volatile_prefix = volatilep ? "V" : "";
3017 
3018       if (len == 0)
3019 	sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
3020       else if (tagname != NULL && strchr (tagname, '<') != NULL)
3021 	{
3022 	  /* Template methods are fully mangled.  */
3023 	  sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
3024 	  tagname = NULL;
3025 	  len = 0;
3026 	}
3027       else
3028 	sprintf (buf, "__%s%s%d", const_prefix, volatile_prefix, len);
3029 
3030       mangled_name_len = ((is_constructor ? 0 : strlen (fieldname))
3031 			  + strlen (buf)
3032 			  + len
3033 			  + strlen (argtypes)
3034 			  + 1);
3035 
3036       if (fieldname[0] == 'o'
3037 	  && fieldname[1] == 'p'
3038 	  && (fieldname[2] == '$' || fieldname[2] == '.'))
3039 	{
3040 	  /* Opname selection is no longer supported by libiberty's demangler.  */
3041 	  return DEBUG_TYPE_NULL;
3042 	}
3043 
3044       physname = (char *) xmalloc (mangled_name_len);
3045       if (is_constructor)
3046 	physname[0] = '\0';
3047       else
3048 	strcpy (physname, fieldname);
3049 
3050       physname_len = strlen (physname);
3051       strcat (physname, buf);
3052       if (tagname != NULL)
3053 	strcat (physname, tagname);
3054       strcat (physname, argtypes);
3055 
3056       *pphysname = physname;
3057     }
3058 
3059   if (*argtypes == '\0' || is_destructor)
3060     {
3061       args = (debug_type *) xmalloc (sizeof *args);
3062       *args = NULL;
3063       return debug_make_method_type (dhandle, return_type, class_type, args,
3064 				     FALSE);
3065     }
3066 
3067   args = stab_demangle_argtypes (dhandle, info, *pphysname, &varargs, physname_len);
3068   if (args == NULL)
3069     return DEBUG_TYPE_NULL;
3070 
3071   return debug_make_method_type (dhandle, return_type, class_type, args,
3072 				 varargs);
3073 }
3074 
3075 /* The tail end of stabs for C++ classes that contain a virtual function
3076    pointer contains a tilde, a %, and a type number.
3077    The type number refers to the base class (possibly this class itself) which
3078    contains the vtable pointer for the current class.
3079 
3080    This function is called when we have parsed all the method declarations,
3081    so we can look for the vptr base class info.  */
3082 
3083 static bfd_boolean
3084 parse_stab_tilde_field (void *                dhandle,
3085 			struct stab_handle *  info,
3086 			const char **         pp,
3087 			const int *           typenums,
3088 			debug_type *          retvptrbase,
3089 			bfd_boolean *         retownvptr,
3090 			const char *          p_end)
3091 {
3092   const char *orig;
3093   const char *hold;
3094   int vtypenums[2];
3095 
3096   *retvptrbase = DEBUG_TYPE_NULL;
3097   *retownvptr = FALSE;
3098 
3099   orig = *pp;
3100   if (orig >= p_end)
3101     return FALSE;
3102 
3103   /* If we are positioned at a ';', then skip it.  */
3104   if (**pp == ';')
3105     ++*pp;
3106 
3107   if (**pp != '~')
3108     return TRUE;
3109   ++*pp;
3110 
3111   if (**pp == '=' || **pp == '+' || **pp == '-')
3112     {
3113       /* Obsolete flags that used to indicate the presence of
3114 	 constructors and/or destructors.  */
3115       ++*pp;
3116     }
3117 
3118   if (**pp != '%')
3119     return TRUE;
3120   ++*pp;
3121 
3122   hold = *pp;
3123 
3124   /* The next number is the type number of the base class (possibly
3125      our own class) which supplies the vtable for this class.  */
3126   if (! parse_stab_type_number (pp, vtypenums, p_end))
3127     return FALSE;
3128 
3129   if (vtypenums[0] == typenums[0]
3130       && vtypenums[1] == typenums[1])
3131     *retownvptr = TRUE;
3132   else
3133     {
3134       debug_type vtype;
3135       const char *p;
3136 
3137       *pp = hold;
3138 
3139       vtype = parse_stab_type (dhandle, info, (const char *) NULL, pp,
3140 			       (debug_type **) NULL, p_end);
3141       for (p = *pp; *p != ';' && *p != '\0'; p++)
3142 	;
3143       if (*p != ';')
3144 	{
3145 	  bad_stab (orig);
3146 	  return FALSE;
3147 	}
3148 
3149       *retvptrbase = vtype;
3150 
3151       *pp = p + 1;
3152     }
3153 
3154   return TRUE;
3155 }
3156 
3157 /* Read a definition of an array type.  */
3158 
3159 static debug_type
3160 parse_stab_array_type (void *                dhandle,
3161 		       struct stab_handle *  info,
3162 		       const char **         pp,
3163 		       bfd_boolean           stringp,
3164 		       const char *          p_end)
3165 {
3166   const char *orig;
3167   const char *p;
3168   int typenums[2];
3169   debug_type index_type;
3170   bfd_boolean adjustable;
3171   bfd_signed_vma lower, upper;
3172   debug_type element_type;
3173 
3174   /* Format of an array type:
3175      "ar<index type>;lower;upper;<array_contents_type>".
3176      OS9000: "arlower,upper;<array_contents_type>".
3177 
3178      Fortran adjustable arrays use Adigits or Tdigits for lower or upper;
3179      for these, produce a type like float[][].  */
3180 
3181   orig = *pp;
3182   if (orig >= p_end)
3183     return DEBUG_TYPE_NULL;
3184 
3185   /* FIXME: gdb checks os9k_stabs here.  */
3186 
3187   /* If the index type is type 0, we take it as int.  */
3188   p = *pp;
3189   if (! parse_stab_type_number (&p, typenums, p_end))
3190     return DEBUG_TYPE_NULL;
3191 
3192   if (typenums[0] == 0 && typenums[1] == 0 && **pp != '=')
3193     {
3194       index_type = debug_find_named_type (dhandle, "int");
3195       if (index_type == DEBUG_TYPE_NULL)
3196 	{
3197 	  index_type = debug_make_int_type (dhandle, 4, FALSE);
3198 	  if (index_type == DEBUG_TYPE_NULL)
3199 	    return DEBUG_TYPE_NULL;
3200 	}
3201       *pp = p;
3202     }
3203   else
3204     {
3205       index_type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
3206 				    (debug_type **) NULL, p_end);
3207     }
3208 
3209   if (**pp != ';')
3210     {
3211       bad_stab (orig);
3212       return DEBUG_TYPE_NULL;
3213     }
3214   ++*pp;
3215 
3216   adjustable = FALSE;
3217 
3218   if (! ISDIGIT (**pp) && **pp != '-' && **pp != 0)
3219     {
3220       ++*pp;
3221       adjustable = TRUE;
3222     }
3223 
3224   lower = (bfd_signed_vma) parse_number (pp, (bfd_boolean *) NULL, p_end);
3225   if (**pp != ';')
3226     {
3227       bad_stab (orig);
3228       return DEBUG_TYPE_NULL;
3229     }
3230   ++*pp;
3231 
3232   if (! ISDIGIT (**pp) && **pp != '-' && **pp != 0)
3233     {
3234       ++*pp;
3235       adjustable = TRUE;
3236     }
3237 
3238   upper = (bfd_signed_vma) parse_number (pp, (bfd_boolean *) NULL, p_end);
3239   if (**pp != ';')
3240     {
3241       bad_stab (orig);
3242       return DEBUG_TYPE_NULL;
3243     }
3244   ++*pp;
3245 
3246   element_type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
3247 				  (debug_type **) NULL, p_end);
3248   if (element_type == DEBUG_TYPE_NULL)
3249     return DEBUG_TYPE_NULL;
3250 
3251   if (adjustable)
3252     {
3253       lower = 0;
3254       upper = -1;
3255     }
3256 
3257   return debug_make_array_type (dhandle, element_type, index_type, lower,
3258 				upper, stringp);
3259 }
3260 
3261 /* This struct holds information about files we have seen using
3262    N_BINCL.  */
3263 
3264 struct bincl_file
3265 {
3266   /* The next N_BINCL file.  */
3267   struct bincl_file *next;
3268   /* The next N_BINCL on the stack.  */
3269   struct bincl_file *next_stack;
3270   /* The file name.  */
3271   const char *name;
3272   /* The hash value.  */
3273   bfd_vma hash;
3274   /* The file index.  */
3275   unsigned int file;
3276   /* The list of types defined in this file.  */
3277   struct stab_types *file_types;
3278 };
3279 
3280 /* Start a new N_BINCL file, pushing it onto the stack.  */
3281 
3282 static void
3283 push_bincl (struct stab_handle *info, const char *name, bfd_vma hash)
3284 {
3285   struct bincl_file *n;
3286 
3287   n = (struct bincl_file *) xmalloc (sizeof *n);
3288   n->next = info->bincl_list;
3289   n->next_stack = info->bincl_stack;
3290   n->name = name;
3291   n->hash = hash;
3292   n->file = info->files;
3293   n->file_types = NULL;
3294   info->bincl_list = n;
3295   info->bincl_stack = n;
3296 
3297   ++info->files;
3298   info->file_types = ((struct stab_types **)
3299 		      xrealloc (info->file_types,
3300 				(info->files
3301 				 * sizeof *info->file_types)));
3302   info->file_types[n->file] = NULL;
3303 }
3304 
3305 /* Finish an N_BINCL file, at an N_EINCL, popping the name off the
3306    stack.  */
3307 
3308 static const char *
3309 pop_bincl (struct stab_handle *info)
3310 {
3311   struct bincl_file *o;
3312 
3313   o = info->bincl_stack;
3314   if (o == NULL)
3315     return info->main_filename;
3316   info->bincl_stack = o->next_stack;
3317 
3318   if (o->file >= info->files)
3319     return info->main_filename;
3320 
3321   o->file_types = info->file_types[o->file];
3322 
3323   if (info->bincl_stack == NULL)
3324     return info->main_filename;
3325   return info->bincl_stack->name;
3326 }
3327 
3328 /* Handle an N_EXCL: get the types from the corresponding N_BINCL.  */
3329 
3330 static bfd_boolean
3331 find_excl (struct stab_handle *info, const char *name, bfd_vma hash)
3332 {
3333   struct bincl_file *l;
3334 
3335   ++info->files;
3336   info->file_types = ((struct stab_types **)
3337 		      xrealloc (info->file_types,
3338 				(info->files
3339 				 * sizeof *info->file_types)));
3340 
3341   for (l = info->bincl_list; l != NULL; l = l->next)
3342     if (l->hash == hash && strcmp (l->name, name) == 0)
3343       break;
3344   if (l == NULL)
3345     {
3346       warn_stab (name, _("Undefined N_EXCL"));
3347       info->file_types[info->files - 1] = NULL;
3348       return TRUE;
3349     }
3350 
3351   info->file_types[info->files - 1] = l->file_types;
3352 
3353   return TRUE;
3354 }
3355 
3356 /* Handle a variable definition.  gcc emits variable definitions for a
3357    block before the N_LBRAC, so we must hold onto them until we see
3358    it.  The SunPRO compiler emits variable definitions after the
3359    N_LBRAC, so we can call debug_record_variable immediately.  */
3360 
3361 static bfd_boolean
3362 stab_record_variable (void *dhandle, struct stab_handle *info,
3363 		      const char *name, debug_type type,
3364 		      enum debug_var_kind kind, bfd_vma val)
3365 {
3366   struct stab_pending_var *v;
3367 
3368   if ((kind == DEBUG_GLOBAL || kind == DEBUG_STATIC)
3369       || ! info->within_function
3370       || (info->gcc_compiled == 0 && info->n_opt_found))
3371     return debug_record_variable (dhandle, name, type, kind, val);
3372 
3373   v = (struct stab_pending_var *) xmalloc (sizeof *v);
3374   memset (v, 0, sizeof *v);
3375 
3376   v->next = info->pending;
3377   v->name = name;
3378   v->type = type;
3379   v->kind = kind;
3380   v->val = val;
3381   info->pending = v;
3382 
3383   return TRUE;
3384 }
3385 
3386 /* Emit pending variable definitions.  This is called after we see the
3387    N_LBRAC that starts the block.  */
3388 
3389 static bfd_boolean
3390 stab_emit_pending_vars (void *dhandle, struct stab_handle *info)
3391 {
3392   struct stab_pending_var *v;
3393 
3394   v = info->pending;
3395   while (v != NULL)
3396     {
3397       struct stab_pending_var *next;
3398 
3399       if (! debug_record_variable (dhandle, v->name, v->type, v->kind, v->val))
3400 	return FALSE;
3401 
3402       next = v->next;
3403       free (v);
3404       v = next;
3405     }
3406 
3407   info->pending = NULL;
3408 
3409   return TRUE;
3410 }
3411 
3412 /* Find the slot for a type in the database.  */
3413 
3414 static debug_type *
3415 stab_find_slot (struct stab_handle *info, const int *typenums)
3416 {
3417   int filenum;
3418   int tindex;
3419   struct stab_types **ps;
3420 
3421   filenum = typenums[0];
3422   tindex = typenums[1];
3423 
3424   if (filenum < 0 || (unsigned int) filenum >= info->files)
3425     {
3426       fprintf (stderr, _("Type file number %d out of range\n"), filenum);
3427       return NULL;
3428     }
3429   if (tindex < 0)
3430     {
3431       fprintf (stderr, _("Type index number %d out of range\n"), tindex);
3432       return NULL;
3433     }
3434 
3435   ps = info->file_types + filenum;
3436 
3437   while (tindex >= STAB_TYPES_SLOTS)
3438     {
3439       if (*ps == NULL)
3440 	{
3441 	  *ps = (struct stab_types *) xmalloc (sizeof **ps);
3442 	  memset (*ps, 0, sizeof **ps);
3443 	}
3444       ps = &(*ps)->next;
3445       tindex -= STAB_TYPES_SLOTS;
3446     }
3447   if (*ps == NULL)
3448     {
3449       *ps = (struct stab_types *) xmalloc (sizeof **ps);
3450       memset (*ps, 0, sizeof **ps);
3451     }
3452 
3453   return (*ps)->types + tindex;
3454 }
3455 
3456 /* Find a type given a type number.  If the type has not been
3457    allocated yet, create an indirect type.  */
3458 
3459 static debug_type
3460 stab_find_type (void *dhandle, struct stab_handle *info, const int *typenums)
3461 {
3462   debug_type *slot;
3463 
3464   if (typenums[0] == 0 && typenums[1] < 0)
3465     {
3466       /* A negative type number indicates an XCOFF builtin type.  */
3467       return stab_xcoff_builtin_type (dhandle, info, typenums[1]);
3468     }
3469 
3470   slot = stab_find_slot (info, typenums);
3471   if (slot == NULL)
3472     return DEBUG_TYPE_NULL;
3473 
3474   if (*slot == DEBUG_TYPE_NULL)
3475     return debug_make_indirect_type (dhandle, slot, (const char *) NULL);
3476 
3477   return *slot;
3478 }
3479 
3480 /* Record that a given type number refers to a given type.  */
3481 
3482 static bfd_boolean
3483 stab_record_type (void *dhandle ATTRIBUTE_UNUSED, struct stab_handle *info,
3484 		  const int *typenums, debug_type type)
3485 {
3486   debug_type *slot;
3487 
3488   slot = stab_find_slot (info, typenums);
3489   if (slot == NULL)
3490     return FALSE;
3491 
3492   /* gdb appears to ignore type redefinitions, so we do as well.  */
3493 
3494   *slot = type;
3495 
3496   return TRUE;
3497 }
3498 
3499 /* Return an XCOFF builtin type.  */
3500 
3501 static debug_type
3502 stab_xcoff_builtin_type (void *dhandle, struct stab_handle *info,
3503 			 int typenum)
3504 {
3505   debug_type rettype;
3506   const char *name;
3507 
3508   if (typenum >= 0 || typenum < -XCOFF_TYPE_COUNT)
3509     {
3510       fprintf (stderr, _("Unrecognized XCOFF type %d\n"), typenum);
3511       return DEBUG_TYPE_NULL;
3512     }
3513   if (info->xcoff_types[-typenum] != NULL)
3514     return info->xcoff_types[-typenum];
3515 
3516   switch (-typenum)
3517     {
3518     case 1:
3519       /* The size of this and all the other types are fixed, defined
3520 	 by the debugging format.  */
3521       name = "int";
3522       rettype = debug_make_int_type (dhandle, 4, FALSE);
3523       break;
3524     case 2:
3525       name = "char";
3526       rettype = debug_make_int_type (dhandle, 1, FALSE);
3527       break;
3528     case 3:
3529       name = "short";
3530       rettype = debug_make_int_type (dhandle, 2, FALSE);
3531       break;
3532     case 4:
3533       name = "long";
3534       rettype = debug_make_int_type (dhandle, 4, FALSE);
3535       break;
3536     case 5:
3537       name = "unsigned char";
3538       rettype = debug_make_int_type (dhandle, 1, TRUE);
3539       break;
3540     case 6:
3541       name = "signed char";
3542       rettype = debug_make_int_type (dhandle, 1, FALSE);
3543       break;
3544     case 7:
3545       name = "unsigned short";
3546       rettype = debug_make_int_type (dhandle, 2, TRUE);
3547       break;
3548     case 8:
3549       name = "unsigned int";
3550       rettype = debug_make_int_type (dhandle, 4, TRUE);
3551       break;
3552     case 9:
3553       name = "unsigned";
3554       rettype = debug_make_int_type (dhandle, 4, TRUE);
3555       break;
3556     case 10:
3557       name = "unsigned long";
3558       rettype = debug_make_int_type (dhandle, 4, TRUE);
3559       break;
3560     case 11:
3561       name = "void";
3562       rettype = debug_make_void_type (dhandle);
3563       break;
3564     case 12:
3565       /* IEEE single precision (32 bit).  */
3566       name = "float";
3567       rettype = debug_make_float_type (dhandle, 4);
3568       break;
3569     case 13:
3570       /* IEEE double precision (64 bit).  */
3571       name = "double";
3572       rettype = debug_make_float_type (dhandle, 8);
3573       break;
3574     case 14:
3575       /* This is an IEEE double on the RS/6000, and different machines
3576 	 with different sizes for "long double" should use different
3577 	 negative type numbers.  See stabs.texinfo.  */
3578       name = "long double";
3579       rettype = debug_make_float_type (dhandle, 8);
3580       break;
3581     case 15:
3582       name = "integer";
3583       rettype = debug_make_int_type (dhandle, 4, FALSE);
3584       break;
3585     case 16:
3586       name = "boolean";
3587       rettype = debug_make_bool_type (dhandle, 4);
3588       break;
3589     case 17:
3590       name = "short real";
3591       rettype = debug_make_float_type (dhandle, 4);
3592       break;
3593     case 18:
3594       name = "real";
3595       rettype = debug_make_float_type (dhandle, 8);
3596       break;
3597     case 19:
3598       /* FIXME */
3599       name = "stringptr";
3600       rettype = NULL;
3601       break;
3602     case 20:
3603       /* FIXME */
3604       name = "character";
3605       rettype = debug_make_int_type (dhandle, 1, TRUE);
3606       break;
3607     case 21:
3608       name = "logical*1";
3609       rettype = debug_make_bool_type (dhandle, 1);
3610       break;
3611     case 22:
3612       name = "logical*2";
3613       rettype = debug_make_bool_type (dhandle, 2);
3614       break;
3615     case 23:
3616       name = "logical*4";
3617       rettype = debug_make_bool_type (dhandle, 4);
3618       break;
3619     case 24:
3620       name = "logical";
3621       rettype = debug_make_bool_type (dhandle, 4);
3622       break;
3623     case 25:
3624       /* Complex type consisting of two IEEE single precision values.  */
3625       name = "complex";
3626       rettype = debug_make_complex_type (dhandle, 8);
3627       break;
3628     case 26:
3629       /* Complex type consisting of two IEEE double precision values.  */
3630       name = "double complex";
3631       rettype = debug_make_complex_type (dhandle, 16);
3632       break;
3633     case 27:
3634       name = "integer*1";
3635       rettype = debug_make_int_type (dhandle, 1, FALSE);
3636       break;
3637     case 28:
3638       name = "integer*2";
3639       rettype = debug_make_int_type (dhandle, 2, FALSE);
3640       break;
3641     case 29:
3642       name = "integer*4";
3643       rettype = debug_make_int_type (dhandle, 4, FALSE);
3644       break;
3645     case 30:
3646       /* FIXME */
3647       name = "wchar";
3648       rettype = debug_make_int_type (dhandle, 2, FALSE);
3649       break;
3650     case 31:
3651       name = "long long";
3652       rettype = debug_make_int_type (dhandle, 8, FALSE);
3653       break;
3654     case 32:
3655       name = "unsigned long long";
3656       rettype = debug_make_int_type (dhandle, 8, TRUE);
3657       break;
3658     case 33:
3659       name = "logical*8";
3660       rettype = debug_make_bool_type (dhandle, 8);
3661       break;
3662     case 34:
3663       name = "integer*8";
3664       rettype = debug_make_int_type (dhandle, 8, FALSE);
3665       break;
3666     default:
3667       abort ();
3668     }
3669 
3670   rettype = debug_name_type (dhandle, name, rettype);
3671 
3672   info->xcoff_types[-typenum] = rettype;
3673 
3674   return rettype;
3675 }
3676 
3677 /* Find or create a tagged type.  */
3678 
3679 static debug_type
3680 stab_find_tagged_type (void *dhandle, struct stab_handle *info,
3681 		       const char *p, int len, enum debug_type_kind kind)
3682 {
3683   char *name;
3684   debug_type dtype;
3685   struct stab_tag *st;
3686 
3687   name = savestring (p, len);
3688 
3689   /* We pass DEBUG_KIND_ILLEGAL because we want all tags in the same
3690      namespace.  This is right for C, and I don't know how to handle
3691      other languages.  FIXME.  */
3692   dtype = debug_find_tagged_type (dhandle, name, DEBUG_KIND_ILLEGAL);
3693   if (dtype != DEBUG_TYPE_NULL)
3694     {
3695       free (name);
3696       return dtype;
3697     }
3698 
3699   /* We need to allocate an entry on the undefined tag list.  */
3700   for (st = info->tags; st != NULL; st = st->next)
3701     {
3702       if (st->name[0] == name[0]
3703 	  && strcmp (st->name, name) == 0)
3704 	{
3705 	  if (st->kind == DEBUG_KIND_ILLEGAL)
3706 	    st->kind = kind;
3707 	  free (name);
3708 	  break;
3709 	}
3710     }
3711   if (st == NULL)
3712     {
3713       st = (struct stab_tag *) xmalloc (sizeof *st);
3714       memset (st, 0, sizeof *st);
3715 
3716       st->next = info->tags;
3717       st->name = name;
3718       st->kind = kind;
3719       st->slot = DEBUG_TYPE_NULL;
3720       st->type = debug_make_indirect_type (dhandle, &st->slot, name);
3721       info->tags = st;
3722     }
3723 
3724   return st->type;
3725 }
3726 
3727 /* In order to get the correct argument types for a stubbed method, we
3728    need to extract the argument types from a C++ mangled string.
3729    Since the argument types can refer back to the return type, this
3730    means that we must demangle the entire physical name.  In gdb this
3731    is done by calling cplus_demangle and running the results back
3732    through the C++ expression parser.  Since we have no expression
3733    parser, we must duplicate much of the work of cplus_demangle here.
3734 
3735    We assume that GNU style demangling is used, since this is only
3736    done for method stubs, and only g++ should output that form of
3737    debugging information.  */
3738 
3739 /* This structure is used to hold a pointer to type information which
3740    demangling a string.  */
3741 
3742 struct stab_demangle_typestring
3743 {
3744   /* The start of the type.  This is not null terminated.  */
3745   const char *typestring;
3746   /* The length of the type.  */
3747   unsigned int len;
3748 };
3749 
3750 /* This structure is used to hold information while demangling a
3751    string.  */
3752 
3753 struct stab_demangle_info
3754 {
3755   /* The debugging information handle.  */
3756   void *dhandle;
3757   /* The stab information handle.  */
3758   struct stab_handle *info;
3759   /* The array of arguments we are building.  */
3760   debug_type *args;
3761   /* Whether the method takes a variable number of arguments.  */
3762   bfd_boolean varargs;
3763   /* The array of types we have remembered.  */
3764   struct stab_demangle_typestring *typestrings;
3765   /* The number of typestrings.  */
3766   unsigned int typestring_count;
3767   /* The number of typestring slots we have allocated.  */
3768   unsigned int typestring_alloc;
3769 };
3770 
3771 static void stab_bad_demangle (const char *);
3772 static unsigned int stab_demangle_count (const char **);
3773 static bfd_boolean stab_demangle_get_count (const char **, unsigned int *);
3774 static bfd_boolean stab_demangle_prefix
3775   (struct stab_demangle_info *, const char **, unsigned int);
3776 static bfd_boolean stab_demangle_function_name
3777   (struct stab_demangle_info *, const char **, const char *);
3778 static bfd_boolean stab_demangle_signature
3779   (struct stab_demangle_info *, const char **);
3780 static bfd_boolean stab_demangle_qualified
3781   (struct stab_demangle_info *, const char **, debug_type *);
3782 static bfd_boolean stab_demangle_template
3783   (struct stab_demangle_info *, const char **, char **);
3784 static bfd_boolean stab_demangle_class
3785   (struct stab_demangle_info *, const char **, const char **);
3786 static bfd_boolean stab_demangle_args
3787   (struct stab_demangle_info *, const char **, debug_type **, bfd_boolean *);
3788 static bfd_boolean stab_demangle_arg
3789   (struct stab_demangle_info *, const char **, debug_type **,
3790    unsigned int *, unsigned int *);
3791 static bfd_boolean stab_demangle_type
3792   (struct stab_demangle_info *, const char **, debug_type *);
3793 static bfd_boolean stab_demangle_fund_type
3794   (struct stab_demangle_info *, const char **, debug_type *);
3795 static bfd_boolean stab_demangle_remember_type
3796   (struct stab_demangle_info *, const char *, int);
3797 
3798 /* Warn about a bad demangling.  */
3799 
3800 static void
3801 stab_bad_demangle (const char *s)
3802 {
3803   fprintf (stderr, _("bad mangled name `%s'\n"), s);
3804 }
3805 
3806 /* Get a count from a stab string.  */
3807 
3808 static unsigned int
3809 stab_demangle_count (const char **pp)
3810 {
3811   unsigned int count;
3812 
3813   count = 0;
3814   while (ISDIGIT (**pp))
3815     {
3816       count *= 10;
3817       count += **pp - '0';
3818       ++*pp;
3819     }
3820   return count;
3821 }
3822 
3823 /* Require a count in a string.  The count may be multiple digits, in
3824    which case it must end in an underscore.  */
3825 
3826 static bfd_boolean
3827 stab_demangle_get_count (const char **pp, unsigned int *pi)
3828 {
3829   if (! ISDIGIT (**pp))
3830     return FALSE;
3831 
3832   *pi = **pp - '0';
3833   ++*pp;
3834   if (ISDIGIT (**pp))
3835     {
3836       unsigned int count;
3837       const char *p;
3838 
3839       count = *pi;
3840       p = *pp;
3841       do
3842 	{
3843 	  count *= 10;
3844 	  count += *p - '0';
3845 	  ++p;
3846 	}
3847       while (ISDIGIT (*p));
3848       if (*p == '_')
3849 	{
3850 	  *pp = p + 1;
3851 	  *pi = count;
3852 	}
3853     }
3854 
3855   return TRUE;
3856 }
3857 
3858 /* This function demangles a physical name, returning a NULL
3859    terminated array of argument types.  */
3860 
3861 static debug_type *
3862 stab_demangle_argtypes (void *dhandle, struct stab_handle *info,
3863 			const char *physname, bfd_boolean *pvarargs,
3864 			unsigned int physname_len)
3865 {
3866   struct stab_demangle_info minfo;
3867 
3868   /* Check for the g++ V3 ABI.  */
3869   if (physname[0] == '_' && physname[1] == 'Z')
3870     return stab_demangle_v3_argtypes (dhandle, info, physname, pvarargs);
3871 
3872   minfo.dhandle = dhandle;
3873   minfo.info = info;
3874   minfo.args = NULL;
3875   minfo.varargs = FALSE;
3876   minfo.typestring_alloc = 10;
3877   minfo.typestrings = ((struct stab_demangle_typestring *)
3878 		       xmalloc (minfo.typestring_alloc
3879 				* sizeof *minfo.typestrings));
3880   minfo.typestring_count = 0;
3881 
3882   /* cplus_demangle checks for special GNU mangled forms, but we can't
3883      see any of them in mangled method argument types.  */
3884 
3885   if (! stab_demangle_prefix (&minfo, &physname, physname_len))
3886     goto error_return;
3887 
3888   if (*physname != '\0')
3889     {
3890       if (! stab_demangle_signature (&minfo, &physname))
3891 	goto error_return;
3892     }
3893 
3894   free (minfo.typestrings);
3895   minfo.typestrings = NULL;
3896 
3897   if (minfo.args == NULL)
3898     fprintf (stderr, _("no argument types in mangled string\n"));
3899 
3900   *pvarargs = minfo.varargs;
3901   return minfo.args;
3902 
3903  error_return:
3904   if (minfo.typestrings != NULL)
3905     free (minfo.typestrings);
3906   return NULL;
3907 }
3908 
3909 /* Demangle the prefix of the mangled name.  */
3910 
3911 static bfd_boolean
3912 stab_demangle_prefix (struct stab_demangle_info *minfo, const char **pp,
3913 		      unsigned int physname_len)
3914 {
3915   const char *scan;
3916   unsigned int i;
3917 
3918   /* cplus_demangle checks for global constructors and destructors,
3919      but we can't see them in mangled argument types.  */
3920 
3921   if (physname_len)
3922     scan = *pp + physname_len;
3923   else
3924     {
3925       /* Look for `__'.  */
3926       scan = *pp;
3927       do
3928 	scan = strchr (scan, '_');
3929       while (scan != NULL && *++scan != '_');
3930 
3931       if (scan == NULL)
3932 	{
3933 	  stab_bad_demangle (*pp);
3934 	  return FALSE;
3935 	}
3936 
3937       --scan;
3938 
3939       /* We found `__'; move ahead to the last contiguous `__' pair.  */
3940       i = strspn (scan, "_");
3941       if (i > 2)
3942 	scan += i - 2;
3943     }
3944 
3945   if (scan == *pp
3946       && (ISDIGIT (scan[2])
3947 	  || scan[2] == 'Q'
3948 	  || scan[2] == 't'))
3949     {
3950       /* This is a GNU style constructor name.  */
3951       *pp = scan + 2;
3952       return TRUE;
3953     }
3954   else if (scan == *pp
3955 	   && ! ISDIGIT (scan[2])
3956 	   && scan[2] != 't')
3957     {
3958       /* Look for the `__' that separates the prefix from the
3959          signature.  */
3960       while (*scan == '_')
3961 	++scan;
3962       scan = strstr (scan, "__");
3963       if (scan == NULL || scan[2] == '\0')
3964 	{
3965 	  stab_bad_demangle (*pp);
3966 	  return FALSE;
3967 	}
3968 
3969       return stab_demangle_function_name (minfo, pp, scan);
3970     }
3971   else if (scan[2] != '\0')
3972     {
3973       /* The name doesn't start with `__', but it does contain `__'.  */
3974       return stab_demangle_function_name (minfo, pp, scan);
3975     }
3976   else
3977     {
3978       stab_bad_demangle (*pp);
3979       return FALSE;
3980     }
3981   /*NOTREACHED*/
3982 }
3983 
3984 /* Demangle a function name prefix.  The scan argument points to the
3985    double underscore which separates the function name from the
3986    signature.  */
3987 
3988 static bfd_boolean
3989 stab_demangle_function_name (struct stab_demangle_info *minfo,
3990 			     const char **pp, const char *scan)
3991 {
3992   const char *name;
3993 
3994   /* The string from *pp to scan is the name of the function.  We
3995      don't care about the name, since we just looking for argument
3996      types.  However, for conversion operators, the name may include a
3997      type which we must remember in order to handle backreferences.  */
3998 
3999   name = *pp;
4000   *pp = scan + 2;
4001 
4002   if (*pp - name >= 5
4003 	   && CONST_STRNEQ (name, "type")
4004 	   && (name[4] == '$' || name[4] == '.'))
4005     {
4006       const char *tem;
4007 
4008       /* This is a type conversion operator.  */
4009       tem = name + 5;
4010       if (! stab_demangle_type (minfo, &tem, (debug_type *) NULL))
4011 	return FALSE;
4012     }
4013   else if (name[0] == '_'
4014 	   && name[1] == '_'
4015 	   && name[2] == 'o'
4016 	   && name[3] == 'p')
4017     {
4018       const char *tem;
4019 
4020       /* This is a type conversion operator.  */
4021       tem = name + 4;
4022       if (! stab_demangle_type (minfo, &tem, (debug_type *) NULL))
4023 	return FALSE;
4024     }
4025 
4026   return TRUE;
4027 }
4028 
4029 /* Demangle the signature.  This is where the argument types are
4030    found.  */
4031 
4032 static bfd_boolean
4033 stab_demangle_signature (struct stab_demangle_info *minfo, const char **pp)
4034 {
4035   const char *orig;
4036   bfd_boolean expect_func, func_done;
4037   const char *hold;
4038 
4039   orig = *pp;
4040 
4041   expect_func = FALSE;
4042   func_done = FALSE;
4043   hold = NULL;
4044 
4045   while (**pp != '\0')
4046     {
4047       switch (**pp)
4048 	{
4049 	case 'Q':
4050 	  hold = *pp;
4051 	  if (! stab_demangle_qualified (minfo, pp, (debug_type *) NULL)
4052 	      || ! stab_demangle_remember_type (minfo, hold, *pp - hold))
4053 	    return FALSE;
4054 	  expect_func = TRUE;
4055 	  hold = NULL;
4056 	  break;
4057 
4058 	case 'S':
4059 	  /* Static member function.  FIXME: Can this happen?  */
4060 	  if (hold == NULL)
4061 	    hold = *pp;
4062 	  ++*pp;
4063 	  break;
4064 
4065 	case 'C':
4066 	  /* Const member function.  */
4067 	  if (hold == NULL)
4068 	    hold = *pp;
4069 	  ++*pp;
4070 	  break;
4071 
4072 	case '0': case '1': case '2': case '3': case '4':
4073 	case '5': case '6': case '7': case '8': case '9':
4074 	  if (hold == NULL)
4075 	    hold = *pp;
4076 	  if (! stab_demangle_class (minfo, pp, (const char **) NULL)
4077 	      || ! stab_demangle_remember_type (minfo, hold, *pp - hold))
4078 	    return FALSE;
4079 	  expect_func = TRUE;
4080 	  hold = NULL;
4081 	  break;
4082 
4083 	case 'F':
4084 	  /* Function.  I don't know if this actually happens with g++
4085              output.  */
4086 	  hold = NULL;
4087 	  func_done = TRUE;
4088 	  ++*pp;
4089 	  if (! stab_demangle_args (minfo, pp, &minfo->args, &minfo->varargs))
4090 	    return FALSE;
4091 	  break;
4092 
4093 	case 't':
4094 	  /* Template.  */
4095 	  if (hold == NULL)
4096 	    hold = *pp;
4097 	  if (! stab_demangle_template (minfo, pp, (char **) NULL)
4098 	      || ! stab_demangle_remember_type (minfo, hold, *pp - hold))
4099 	    return FALSE;
4100 	  hold = NULL;
4101 	  expect_func = TRUE;
4102 	  break;
4103 
4104 	case '_':
4105 	  /* At the outermost level, we cannot have a return type
4106 	     specified, so if we run into another '_' at this point we
4107 	     are dealing with a mangled name that is either bogus, or
4108 	     has been mangled by some algorithm we don't know how to
4109 	     deal with.  So just reject the entire demangling.  */
4110 	  stab_bad_demangle (orig);
4111 	  return FALSE;
4112 
4113 	default:
4114 	  /* Assume we have stumbled onto the first outermost function
4115 	     argument token, and start processing args.  */
4116 	  func_done = TRUE;
4117 	  if (! stab_demangle_args (minfo, pp, &minfo->args, &minfo->varargs))
4118 	    return FALSE;
4119 	  break;
4120 	}
4121 
4122       if (expect_func)
4123 	{
4124 	  func_done = TRUE;
4125 	  if (! stab_demangle_args (minfo, pp, &minfo->args, &minfo->varargs))
4126 	    return FALSE;
4127 	}
4128     }
4129 
4130   if (! func_done)
4131     {
4132       /* With GNU style demangling, bar__3foo is 'foo::bar(void)', and
4133 	 bar__3fooi is 'foo::bar(int)'.  We get here when we find the
4134 	 first case, and need to ensure that the '(void)' gets added
4135 	 to the current declp.  */
4136       if (! stab_demangle_args (minfo, pp, &minfo->args, &minfo->varargs))
4137 	return FALSE;
4138     }
4139 
4140   return TRUE;
4141 }
4142 
4143 /* Demangle a qualified name, such as "Q25Outer5Inner" which is the
4144    mangled form of "Outer::Inner".  */
4145 
4146 static bfd_boolean
4147 stab_demangle_qualified (struct stab_demangle_info *minfo, const char **pp,
4148 			 debug_type *ptype)
4149 {
4150   const char *orig;
4151   const char *p;
4152   unsigned int qualifiers;
4153   debug_type context;
4154 
4155   orig = *pp;
4156 
4157   switch ((*pp)[1])
4158     {
4159     case '_':
4160       /* GNU mangled name with more than 9 classes.  The count is
4161 	 preceded by an underscore (to distinguish it from the <= 9
4162 	 case) and followed by an underscore.  */
4163       p = *pp + 2;
4164       if (! ISDIGIT (*p) || *p == '0')
4165 	{
4166 	  stab_bad_demangle (orig);
4167 	  return FALSE;
4168 	}
4169       qualifiers = atoi (p);
4170       while (ISDIGIT (*p))
4171 	++p;
4172       if (*p != '_')
4173 	{
4174 	  stab_bad_demangle (orig);
4175 	  return FALSE;
4176 	}
4177       *pp = p + 1;
4178       break;
4179 
4180     case '1': case '2': case '3': case '4': case '5':
4181     case '6': case '7': case '8': case '9':
4182       qualifiers = (*pp)[1] - '0';
4183       /* Skip an optional underscore after the count.  */
4184       if ((*pp)[2] == '_')
4185 	++*pp;
4186       *pp += 2;
4187       break;
4188 
4189     case '0':
4190     default:
4191       stab_bad_demangle (orig);
4192       return FALSE;
4193     }
4194 
4195   context = DEBUG_TYPE_NULL;
4196 
4197   /* Pick off the names.  */
4198   while (qualifiers-- > 0)
4199     {
4200       if (**pp == '_')
4201 	++*pp;
4202       if (**pp == 't')
4203 	{
4204 	  char *name;
4205 
4206 	  if (! stab_demangle_template (minfo, pp,
4207 					ptype != NULL ? &name : NULL))
4208 	    return FALSE;
4209 
4210 	  if (ptype != NULL)
4211 	    {
4212 	      context = stab_find_tagged_type (minfo->dhandle, minfo->info,
4213 					       name, strlen (name),
4214 					       DEBUG_KIND_CLASS);
4215 	      free (name);
4216 	      if (context == DEBUG_TYPE_NULL)
4217 		return FALSE;
4218 	    }
4219 	}
4220       else
4221 	{
4222 	  unsigned int len;
4223 
4224 	  len = stab_demangle_count (pp);
4225 	  if (strlen (*pp) < len)
4226 	    {
4227 	      stab_bad_demangle (orig);
4228 	      return FALSE;
4229 	    }
4230 
4231 	  if (ptype != NULL)
4232 	    {
4233 	      const debug_field *fields;
4234 
4235 	      fields = NULL;
4236 	      if (context != DEBUG_TYPE_NULL)
4237 		fields = debug_get_fields (minfo->dhandle, context);
4238 
4239 	      context = DEBUG_TYPE_NULL;
4240 
4241 	      if (fields != NULL)
4242 		{
4243 		  char *name;
4244 
4245 		  /* Try to find the type by looking through the
4246                      fields of context until we find a field with the
4247                      same type.  This ought to work for a class
4248                      defined within a class, but it won't work for,
4249                      e.g., an enum defined within a class.  stabs does
4250                      not give us enough information to figure out the
4251                      latter case.  */
4252 
4253 		  name = savestring (*pp, len);
4254 
4255 		  for (; *fields != DEBUG_FIELD_NULL; fields++)
4256 		    {
4257 		      debug_type ft;
4258 		      const char *dn;
4259 
4260 		      ft = debug_get_field_type (minfo->dhandle, *fields);
4261 		      if (ft == NULL)
4262 			{
4263 			  free (name);
4264 			  return FALSE;
4265 			}
4266 		      dn = debug_get_type_name (minfo->dhandle, ft);
4267 		      if (dn != NULL && strcmp (dn, name) == 0)
4268 			{
4269 			  context = ft;
4270 			  break;
4271 			}
4272 		    }
4273 
4274 		  free (name);
4275 		}
4276 
4277 	      if (context == DEBUG_TYPE_NULL)
4278 		{
4279 		  /* We have to fall back on finding the type by name.
4280                      If there are more types to come, then this must
4281                      be a class.  Otherwise, it could be anything.  */
4282 
4283 		  if (qualifiers == 0)
4284 		    {
4285 		      char *name;
4286 
4287 		      name = savestring (*pp, len);
4288 		      context = debug_find_named_type (minfo->dhandle,
4289 						       name);
4290 		      free (name);
4291 		    }
4292 
4293 		  if (context == DEBUG_TYPE_NULL)
4294 		    {
4295 		      context = stab_find_tagged_type (minfo->dhandle,
4296 						       minfo->info,
4297 						       *pp, len,
4298 						       (qualifiers == 0
4299 							? DEBUG_KIND_ILLEGAL
4300 							: DEBUG_KIND_CLASS));
4301 		      if (context == DEBUG_TYPE_NULL)
4302 			return FALSE;
4303 		    }
4304 		}
4305 	    }
4306 
4307 	  *pp += len;
4308 	}
4309     }
4310 
4311   if (ptype != NULL)
4312     *ptype = context;
4313 
4314   return TRUE;
4315 }
4316 
4317 /* Demangle a template.  If PNAME is not NULL, this sets *PNAME to a
4318    string representation of the template.  */
4319 
4320 static bfd_boolean
4321 stab_demangle_template (struct stab_demangle_info *minfo, const char **pp,
4322 			char **pname)
4323 {
4324   const char *orig;
4325   unsigned int r, i;
4326 
4327   orig = *pp;
4328 
4329   ++*pp;
4330 
4331   /* Skip the template name.  */
4332   r = stab_demangle_count (pp);
4333   if (r == 0 || strlen (*pp) < r)
4334     {
4335       stab_bad_demangle (orig);
4336       return FALSE;
4337     }
4338   *pp += r;
4339 
4340   /* Get the size of the parameter list.  */
4341   if (stab_demangle_get_count (pp, &r) == 0)
4342     {
4343       stab_bad_demangle (orig);
4344       return FALSE;
4345     }
4346 
4347   for (i = 0; i < r; i++)
4348     {
4349       if (**pp == 'Z')
4350 	{
4351 	  /* This is a type parameter.  */
4352 	  ++*pp;
4353 	  if (! stab_demangle_type (minfo, pp, (debug_type *) NULL))
4354 	    return FALSE;
4355 	}
4356       else
4357 	{
4358 	  const char *old_p;
4359 	  bfd_boolean pointerp, realp, integralp, charp, boolp;
4360 	  bfd_boolean done;
4361 
4362 	  old_p = *pp;
4363 	  pointerp = FALSE;
4364 	  realp = FALSE;
4365 	  integralp = FALSE;
4366 	  charp = FALSE;
4367 	  boolp = FALSE;
4368 	  done = FALSE;
4369 
4370 	  /* This is a value parameter.  */
4371 
4372 	  if (! stab_demangle_type (minfo, pp, (debug_type *) NULL))
4373 	    return FALSE;
4374 
4375 	  while (*old_p != '\0' && ! done)
4376 	    {
4377 	      switch (*old_p)
4378 		{
4379 		case 'P':
4380 		case 'p':
4381 		case 'R':
4382 		  pointerp = TRUE;
4383 		  done = TRUE;
4384 		  break;
4385 		case 'C':	/* Const.  */
4386 		case 'S':	/* Signed.  */
4387 		case 'U':	/* Unsigned.  */
4388 		case 'V':	/* Volatile.  */
4389 		case 'F':	/* Function.  */
4390 		case 'M':	/* Member function.  */
4391 		case 'O':	/* ??? */
4392 		  ++old_p;
4393 		  break;
4394 		case 'Q':	/* Qualified name.  */
4395 		  integralp = TRUE;
4396 		  done = TRUE;
4397 		  break;
4398 		case 'T':	/* Remembered type.  */
4399 		  abort ();
4400 		case 'v':	/* Void.  */
4401 		  abort ();
4402 		case 'x':	/* Long long.  */
4403 		case 'l':	/* Long.  */
4404 		case 'i':	/* Int.  */
4405 		case 's':	/* Short.  */
4406 		case 'w':	/* Wchar_t.  */
4407 		  integralp = TRUE;
4408 		  done = TRUE;
4409 		  break;
4410 		case 'b':	/* Bool.  */
4411 		  boolp = TRUE;
4412 		  done = TRUE;
4413 		  break;
4414 		case 'c':	/* Char.  */
4415 		  charp = TRUE;
4416 		  done = TRUE;
4417 		  break;
4418 		case 'r':	/* Long double.  */
4419 		case 'd':	/* Double.  */
4420 		case 'f':	/* Float.  */
4421 		  realp = TRUE;
4422 		  done = TRUE;
4423 		  break;
4424 		default:
4425 		  /* Assume it's a user defined integral type.  */
4426 		  integralp = TRUE;
4427 		  done = TRUE;
4428 		  break;
4429 		}
4430 	    }
4431 
4432 	  if (integralp)
4433 	    {
4434 	      if (**pp == 'm')
4435 		++*pp;
4436 	      while (ISDIGIT (**pp))
4437 		++*pp;
4438 	    }
4439 	  else if (charp)
4440 	    {
4441 	      unsigned int val;
4442 
4443 	      if (**pp == 'm')
4444 		++*pp;
4445 	      val = stab_demangle_count (pp);
4446 	      if (val == 0)
4447 		{
4448 		  stab_bad_demangle (orig);
4449 		  return FALSE;
4450 		}
4451 	    }
4452 	  else if (boolp)
4453 	    {
4454 	      unsigned int val;
4455 
4456 	      val = stab_demangle_count (pp);
4457 	      if (val != 0 && val != 1)
4458 		{
4459 		  stab_bad_demangle (orig);
4460 		  return FALSE;
4461 		}
4462 	    }
4463 	  else if (realp)
4464 	    {
4465 	      if (**pp == 'm')
4466 		++*pp;
4467 	      while (ISDIGIT (**pp))
4468 		++*pp;
4469 	      if (**pp == '.')
4470 		{
4471 		  ++*pp;
4472 		  while (ISDIGIT (**pp))
4473 		    ++*pp;
4474 		}
4475 	      if (**pp == 'e')
4476 		{
4477 		  ++*pp;
4478 		  while (ISDIGIT (**pp))
4479 		    ++*pp;
4480 		}
4481 	    }
4482 	  else if (pointerp)
4483 	    {
4484 	      unsigned int len;
4485 
4486 	      len = stab_demangle_count (pp);
4487 	      if (len == 0)
4488 		{
4489 		  stab_bad_demangle (orig);
4490 		  return FALSE;
4491 		}
4492 	      *pp += len;
4493 	    }
4494 	}
4495     }
4496 
4497   /* We can translate this to a string fairly easily by invoking the
4498      regular demangling routine.  */
4499   if (pname != NULL)
4500     {
4501       char *s1, *s2, *s3, *s4 = NULL;
4502       char *from, *to;
4503 
4504       s1 = savestring (orig, *pp - orig);
4505 
4506       s2 = concat ("NoSuchStrinG__", s1, (const char *) NULL);
4507 
4508       free (s1);
4509 
4510       s3 = cplus_demangle (s2, demangle_flags);
4511 
4512       free (s2);
4513 
4514       if (s3 != NULL)
4515 	s4 = strstr (s3, "::NoSuchStrinG");
4516       if (s3 == NULL || s4 == NULL)
4517 	{
4518 	  stab_bad_demangle (orig);
4519 	  if (s3 != NULL)
4520 	    free (s3);
4521 	  return FALSE;
4522 	}
4523 
4524       /* Eliminating all spaces, except those between > characters,
4525          makes it more likely that the demangled name will match the
4526          name which g++ used as the structure name.  */
4527       for (from = to = s3; from != s4; ++from)
4528 	if (*from != ' '
4529 	    || (from[1] == '>' && from > s3 && from[-1] == '>'))
4530 	  *to++ = *from;
4531 
4532       *pname = savestring (s3, to - s3);
4533 
4534       free (s3);
4535     }
4536 
4537   return TRUE;
4538 }
4539 
4540 /* Demangle a class name.  */
4541 
4542 static bfd_boolean
4543 stab_demangle_class (struct stab_demangle_info *minfo ATTRIBUTE_UNUSED,
4544 		     const char **pp, const char **pstart)
4545 {
4546   const char *orig;
4547   unsigned int n;
4548 
4549   orig = *pp;
4550 
4551   n = stab_demangle_count (pp);
4552   if (strlen (*pp) < n)
4553     {
4554       stab_bad_demangle (orig);
4555       return FALSE;
4556     }
4557 
4558   if (pstart != NULL)
4559     *pstart = *pp;
4560 
4561   *pp += n;
4562 
4563   return TRUE;
4564 }
4565 
4566 /* Demangle function arguments.  If the pargs argument is not NULL, it
4567    is set to a NULL terminated array holding the arguments.  */
4568 
4569 static bfd_boolean
4570 stab_demangle_args (struct stab_demangle_info *minfo, const char **pp,
4571 		    debug_type **pargs, bfd_boolean *pvarargs)
4572 {
4573   const char *orig;
4574   unsigned int alloc, count;
4575 
4576   orig = *pp;
4577 
4578   alloc = 10;
4579   if (pargs != NULL)
4580     {
4581       *pargs = (debug_type *) xmalloc (alloc * sizeof **pargs);
4582       *pvarargs = FALSE;
4583     }
4584   count = 0;
4585 
4586   while (**pp != '_' && **pp != '\0' && **pp != 'e')
4587     {
4588       if (**pp == 'N' || **pp == 'T')
4589 	{
4590 	  char temptype;
4591 	  unsigned int r, t;
4592 
4593 	  temptype = **pp;
4594 	  ++*pp;
4595 
4596 	  if (temptype == 'T')
4597 	    r = 1;
4598 	  else
4599 	    {
4600 	      if (! stab_demangle_get_count (pp, &r))
4601 		{
4602 		  stab_bad_demangle (orig);
4603 		  return FALSE;
4604 		}
4605 	    }
4606 
4607 	  if (! stab_demangle_get_count (pp, &t))
4608 	    {
4609 	      stab_bad_demangle (orig);
4610 	      return FALSE;
4611 	    }
4612 
4613 	  if (t >= minfo->typestring_count)
4614 	    {
4615 	      stab_bad_demangle (orig);
4616 	      return FALSE;
4617 	    }
4618 	  while (r-- > 0)
4619 	    {
4620 	      const char *tem;
4621 
4622 	      tem = minfo->typestrings[t].typestring;
4623 	      if (! stab_demangle_arg (minfo, &tem, pargs, &count, &alloc))
4624 		return FALSE;
4625 	    }
4626 	}
4627       else
4628 	{
4629 	  if (! stab_demangle_arg (minfo, pp, pargs, &count, &alloc))
4630 	    return FALSE;
4631 	}
4632     }
4633 
4634   if (pargs != NULL)
4635     (*pargs)[count] = DEBUG_TYPE_NULL;
4636 
4637   if (**pp == 'e')
4638     {
4639       if (pargs != NULL)
4640 	*pvarargs = TRUE;
4641       ++*pp;
4642     }
4643 
4644   return TRUE;
4645 }
4646 
4647 /* Demangle a single argument.  */
4648 
4649 static bfd_boolean
4650 stab_demangle_arg (struct stab_demangle_info *minfo, const char **pp,
4651 		   debug_type **pargs, unsigned int *pcount,
4652 		   unsigned int *palloc)
4653 {
4654   const char *start;
4655   debug_type type;
4656 
4657   start = *pp;
4658   if (! stab_demangle_type (minfo, pp,
4659 			    pargs == NULL ? (debug_type *) NULL : &type)
4660       || ! stab_demangle_remember_type (minfo, start, *pp - start))
4661     return FALSE;
4662 
4663   if (pargs != NULL)
4664     {
4665       if (type == DEBUG_TYPE_NULL)
4666 	return FALSE;
4667 
4668       if (*pcount + 1 >= *palloc)
4669 	{
4670 	  *palloc += 10;
4671 	  *pargs = ((debug_type *)
4672 		    xrealloc (*pargs, *palloc * sizeof **pargs));
4673 	}
4674       (*pargs)[*pcount] = type;
4675       ++*pcount;
4676     }
4677 
4678   return TRUE;
4679 }
4680 
4681 /* Demangle a type.  If the ptype argument is not NULL, *ptype is set
4682    to the newly allocated type.  */
4683 
4684 static bfd_boolean
4685 stab_demangle_type (struct stab_demangle_info *minfo, const char **pp,
4686 		    debug_type *ptype)
4687 {
4688   const char *orig;
4689 
4690   orig = *pp;
4691 
4692   switch (**pp)
4693     {
4694     case 'P':
4695     case 'p':
4696       /* A pointer type.  */
4697       ++*pp;
4698       if (! stab_demangle_type (minfo, pp, ptype))
4699 	return FALSE;
4700       if (ptype != NULL)
4701 	*ptype = debug_make_pointer_type (minfo->dhandle, *ptype);
4702       break;
4703 
4704     case 'R':
4705       /* A reference type.  */
4706       ++*pp;
4707       if (! stab_demangle_type (minfo, pp, ptype))
4708 	return FALSE;
4709       if (ptype != NULL)
4710 	*ptype = debug_make_reference_type (minfo->dhandle, *ptype);
4711       break;
4712 
4713     case 'A':
4714       /* An array.  */
4715       {
4716 	unsigned long high;
4717 
4718 	++*pp;
4719 	high = 0;
4720 	while (**pp != '\0' && **pp != '_')
4721 	  {
4722 	    if (! ISDIGIT (**pp))
4723 	      {
4724 		stab_bad_demangle (orig);
4725 		return FALSE;
4726 	      }
4727 	    high *= 10;
4728 	    high += **pp - '0';
4729 	    ++*pp;
4730 	  }
4731 	if (**pp != '_')
4732 	  {
4733 	    stab_bad_demangle (orig);
4734 	    return FALSE;
4735 	  }
4736 	++*pp;
4737 
4738 	if (! stab_demangle_type (minfo, pp, ptype))
4739 	  return FALSE;
4740 	if (ptype != NULL)
4741 	  {
4742 	    debug_type int_type;
4743 
4744 	    int_type = debug_find_named_type (minfo->dhandle, "int");
4745 	    if (int_type == NULL)
4746 	      int_type = debug_make_int_type (minfo->dhandle, 4, FALSE);
4747 	    *ptype = debug_make_array_type (minfo->dhandle, *ptype, int_type,
4748 					    0, high, FALSE);
4749 	  }
4750       }
4751       break;
4752 
4753     case 'T':
4754       /* A back reference to a remembered type.  */
4755       {
4756 	unsigned int i;
4757 	const char *p;
4758 
4759 	++*pp;
4760 	if (! stab_demangle_get_count (pp, &i))
4761 	  {
4762 	    stab_bad_demangle (orig);
4763 	    return FALSE;
4764 	  }
4765 	if (i >= minfo->typestring_count)
4766 	  {
4767 	    stab_bad_demangle (orig);
4768 	    return FALSE;
4769 	  }
4770 	p = minfo->typestrings[i].typestring;
4771 	if (! stab_demangle_type (minfo, &p, ptype))
4772 	  return FALSE;
4773       }
4774       break;
4775 
4776     case 'F':
4777       /* A function.  */
4778       {
4779 	debug_type *args;
4780 	bfd_boolean varargs;
4781 
4782 	++*pp;
4783 	if (! stab_demangle_args (minfo, pp,
4784 				  (ptype == NULL
4785 				   ? (debug_type **) NULL
4786 				   : &args),
4787 				  (ptype == NULL
4788 				   ? (bfd_boolean *) NULL
4789 				   : &varargs)))
4790 	  return FALSE;
4791 	if (**pp != '_')
4792 	  {
4793 	    /* cplus_demangle will accept a function without a return
4794 	       type, but I don't know when that will happen, or what
4795 	       to do if it does.  */
4796 	    stab_bad_demangle (orig);
4797 	    return FALSE;
4798 	  }
4799 	++*pp;
4800 	if (! stab_demangle_type (minfo, pp, ptype))
4801 	  return FALSE;
4802 	if (ptype != NULL)
4803 	  *ptype = debug_make_function_type (minfo->dhandle, *ptype, args,
4804 					     varargs);
4805 
4806       }
4807       break;
4808 
4809     case 'M':
4810     case 'O':
4811       {
4812 	bfd_boolean memberp;
4813 	debug_type class_type = DEBUG_TYPE_NULL;
4814 	debug_type *args;
4815 	bfd_boolean varargs;
4816 	unsigned int n;
4817 	const char *name;
4818 
4819 	memberp = **pp == 'M';
4820 	args = NULL;
4821 	varargs = FALSE;
4822 
4823 	++*pp;
4824 	if (ISDIGIT (**pp))
4825 	  {
4826 	    n = stab_demangle_count (pp);
4827 	    if (strlen (*pp) < n)
4828 	      {
4829 		stab_bad_demangle (orig);
4830 		return FALSE;
4831 	      }
4832 	    name = *pp;
4833 	    *pp += n;
4834 
4835 	    if (ptype != NULL)
4836 	      {
4837 		class_type = stab_find_tagged_type (minfo->dhandle,
4838 						    minfo->info,
4839 						    name, (int) n,
4840 						    DEBUG_KIND_CLASS);
4841 		if (class_type == DEBUG_TYPE_NULL)
4842 		  return FALSE;
4843 	      }
4844 	  }
4845 	else if (**pp == 'Q')
4846 	  {
4847 	    if (! stab_demangle_qualified (minfo, pp,
4848 					   (ptype == NULL
4849 					    ? (debug_type *) NULL
4850 					    : &class_type)))
4851 	      return FALSE;
4852 	  }
4853 	else
4854 	  {
4855 	    stab_bad_demangle (orig);
4856 	    return FALSE;
4857 	  }
4858 
4859 	if (memberp)
4860 	  {
4861 	    if (**pp == 'C')
4862 	      {
4863 		++*pp;
4864 	      }
4865 	    else if (**pp == 'V')
4866 	      {
4867 		++*pp;
4868 	      }
4869 	    if (**pp != 'F')
4870 	      {
4871 		stab_bad_demangle (orig);
4872 		return FALSE;
4873 	      }
4874 	    ++*pp;
4875 	    if (! stab_demangle_args (minfo, pp,
4876 				      (ptype == NULL
4877 				       ? (debug_type **) NULL
4878 				       : &args),
4879 				      (ptype == NULL
4880 				       ? (bfd_boolean *) NULL
4881 				       : &varargs)))
4882 	      return FALSE;
4883 	  }
4884 
4885 	if (**pp != '_')
4886 	  {
4887 	    stab_bad_demangle (orig);
4888 	    return FALSE;
4889 	  }
4890 	++*pp;
4891 
4892 	if (! stab_demangle_type (minfo, pp, ptype))
4893 	  return FALSE;
4894 
4895 	if (ptype != NULL)
4896 	  {
4897 	    if (! memberp)
4898 	      *ptype = debug_make_offset_type (minfo->dhandle, class_type,
4899 					       *ptype);
4900 	    else
4901 	      {
4902 		/* FIXME: We have no way to record constp or
4903                    volatilep.  */
4904 		*ptype = debug_make_method_type (minfo->dhandle, *ptype,
4905 						 class_type, args, varargs);
4906 	      }
4907 	  }
4908       }
4909       break;
4910 
4911     case 'G':
4912       ++*pp;
4913       if (! stab_demangle_type (minfo, pp, ptype))
4914 	return FALSE;
4915       break;
4916 
4917     case 'C':
4918       ++*pp;
4919       if (! stab_demangle_type (minfo, pp, ptype))
4920 	return FALSE;
4921       if (ptype != NULL)
4922 	*ptype = debug_make_const_type (minfo->dhandle, *ptype);
4923       break;
4924 
4925     case 'Q':
4926       {
4927 	if (! stab_demangle_qualified (minfo, pp, ptype))
4928 	  return FALSE;
4929       }
4930       break;
4931 
4932     default:
4933       if (! stab_demangle_fund_type (minfo, pp, ptype))
4934 	return FALSE;
4935       break;
4936     }
4937 
4938   return TRUE;
4939 }
4940 
4941 /* Demangle a fundamental type.  If the ptype argument is not NULL,
4942    *ptype is set to the newly allocated type.  */
4943 
4944 static bfd_boolean
4945 stab_demangle_fund_type (struct stab_demangle_info *minfo, const char **pp,
4946 			 debug_type *ptype)
4947 {
4948   const char *orig;
4949   bfd_boolean constp, volatilep, unsignedp, signedp;
4950   bfd_boolean done;
4951 
4952   orig = *pp;
4953 
4954   constp = FALSE;
4955   volatilep = FALSE;
4956   unsignedp = FALSE;
4957   signedp = FALSE;
4958 
4959   done = FALSE;
4960   while (! done)
4961     {
4962       switch (**pp)
4963 	{
4964 	case 'C':
4965 	  constp = TRUE;
4966 	  ++*pp;
4967 	  break;
4968 
4969 	case 'U':
4970 	  unsignedp = TRUE;
4971 	  ++*pp;
4972 	  break;
4973 
4974 	case 'S':
4975 	  signedp = TRUE;
4976 	  ++*pp;
4977 	  break;
4978 
4979 	case 'V':
4980 	  volatilep = TRUE;
4981 	  ++*pp;
4982 	  break;
4983 
4984 	default:
4985 	  done = TRUE;
4986 	  break;
4987 	}
4988     }
4989 
4990   switch (**pp)
4991     {
4992     case '\0':
4993     case '_':
4994       /* cplus_demangle permits this, but I don't know what it means.  */
4995       stab_bad_demangle (orig);
4996       break;
4997 
4998     case 'v': /* void */
4999       if (ptype != NULL)
5000 	{
5001 	  *ptype = debug_find_named_type (minfo->dhandle, "void");
5002 	  if (*ptype == DEBUG_TYPE_NULL)
5003 	    *ptype = debug_make_void_type (minfo->dhandle);
5004 	}
5005       ++*pp;
5006       break;
5007 
5008     case 'x': /* long long */
5009       if (ptype != NULL)
5010 	{
5011 	  *ptype = debug_find_named_type (minfo->dhandle,
5012 					  (unsignedp
5013 					   ? "long long unsigned int"
5014 					   : "long long int"));
5015 	  if (*ptype == DEBUG_TYPE_NULL)
5016 	    *ptype = debug_make_int_type (minfo->dhandle, 8, unsignedp);
5017 	}
5018       ++*pp;
5019       break;
5020 
5021     case 'l': /* long */
5022       if (ptype != NULL)
5023 	{
5024 	  *ptype = debug_find_named_type (minfo->dhandle,
5025 					  (unsignedp
5026 					   ? "long unsigned int"
5027 					   : "long int"));
5028 	  if (*ptype == DEBUG_TYPE_NULL)
5029 	    *ptype = debug_make_int_type (minfo->dhandle, 4, unsignedp);
5030 	}
5031       ++*pp;
5032       break;
5033 
5034     case 'i': /* int */
5035       if (ptype != NULL)
5036 	{
5037 	  *ptype = debug_find_named_type (minfo->dhandle,
5038 					  (unsignedp
5039 					   ? "unsigned int"
5040 					   : "int"));
5041 	  if (*ptype == DEBUG_TYPE_NULL)
5042 	    *ptype = debug_make_int_type (minfo->dhandle, 4, unsignedp);
5043 	}
5044       ++*pp;
5045       break;
5046 
5047     case 's': /* short */
5048       if (ptype != NULL)
5049 	{
5050 	  *ptype = debug_find_named_type (minfo->dhandle,
5051 					  (unsignedp
5052 					   ? "short unsigned int"
5053 					   : "short int"));
5054 	  if (*ptype == DEBUG_TYPE_NULL)
5055 	    *ptype = debug_make_int_type (minfo->dhandle, 2, unsignedp);
5056 	}
5057       ++*pp;
5058       break;
5059 
5060     case 'b': /* bool */
5061       if (ptype != NULL)
5062 	{
5063 	  *ptype = debug_find_named_type (minfo->dhandle, "bool");
5064 	  if (*ptype == DEBUG_TYPE_NULL)
5065 	    *ptype = debug_make_bool_type (minfo->dhandle, 4);
5066 	}
5067       ++*pp;
5068       break;
5069 
5070     case 'c': /* char */
5071       if (ptype != NULL)
5072 	{
5073 	  *ptype = debug_find_named_type (minfo->dhandle,
5074 					  (unsignedp
5075 					   ? "unsigned char"
5076 					   : (signedp
5077 					      ? "signed char"
5078 					      : "char")));
5079 	  if (*ptype == DEBUG_TYPE_NULL)
5080 	    *ptype = debug_make_int_type (minfo->dhandle, 1, unsignedp);
5081 	}
5082       ++*pp;
5083       break;
5084 
5085     case 'w': /* wchar_t */
5086       if (ptype != NULL)
5087 	{
5088 	  *ptype = debug_find_named_type (minfo->dhandle, "__wchar_t");
5089 	  if (*ptype == DEBUG_TYPE_NULL)
5090 	    *ptype = debug_make_int_type (minfo->dhandle, 2, TRUE);
5091 	}
5092       ++*pp;
5093       break;
5094 
5095     case 'r': /* long double */
5096       if (ptype != NULL)
5097 	{
5098 	  *ptype = debug_find_named_type (minfo->dhandle, "long double");
5099 	  if (*ptype == DEBUG_TYPE_NULL)
5100 	    *ptype = debug_make_float_type (minfo->dhandle, 8);
5101 	}
5102       ++*pp;
5103       break;
5104 
5105     case 'd': /* double */
5106       if (ptype != NULL)
5107 	{
5108 	  *ptype = debug_find_named_type (minfo->dhandle, "double");
5109 	  if (*ptype == DEBUG_TYPE_NULL)
5110 	    *ptype = debug_make_float_type (minfo->dhandle, 8);
5111 	}
5112       ++*pp;
5113       break;
5114 
5115     case 'f': /* float */
5116       if (ptype != NULL)
5117 	{
5118 	  *ptype = debug_find_named_type (minfo->dhandle, "float");
5119 	  if (*ptype == DEBUG_TYPE_NULL)
5120 	    *ptype = debug_make_float_type (minfo->dhandle, 4);
5121 	}
5122       ++*pp;
5123       break;
5124 
5125     case 'G':
5126       ++*pp;
5127       if (! ISDIGIT (**pp))
5128 	{
5129 	  stab_bad_demangle (orig);
5130 	  return FALSE;
5131 	}
5132       /* Fall through.  */
5133     case '0': case '1': case '2': case '3': case '4':
5134     case '5': case '6': case '7': case '8': case '9':
5135       {
5136 	const char *hold;
5137 
5138 	if (! stab_demangle_class (minfo, pp, &hold))
5139 	  return FALSE;
5140 	if (ptype != NULL)
5141 	  {
5142 	    char *name;
5143 
5144 	    name = savestring (hold, *pp - hold);
5145 	    *ptype = debug_find_named_type (minfo->dhandle, name);
5146 	    free (name);
5147 	    if (*ptype == DEBUG_TYPE_NULL)
5148 	      {
5149 		/* FIXME: It is probably incorrect to assume that
5150                    undefined types are tagged types.  */
5151 		*ptype = stab_find_tagged_type (minfo->dhandle, minfo->info,
5152 						hold, *pp - hold,
5153 						DEBUG_KIND_ILLEGAL);
5154 		if (*ptype == DEBUG_TYPE_NULL)
5155 		  return FALSE;
5156 	      }
5157 	  }
5158       }
5159       break;
5160 
5161     case 't':
5162       {
5163 	char *name;
5164 
5165 	if (! stab_demangle_template (minfo, pp,
5166 				      ptype != NULL ? &name : NULL))
5167 	  return FALSE;
5168 	if (ptype != NULL)
5169 	  {
5170 	    *ptype = stab_find_tagged_type (minfo->dhandle, minfo->info,
5171 					    name, strlen (name),
5172 					    DEBUG_KIND_CLASS);
5173 	    free (name);
5174 	    if (*ptype == DEBUG_TYPE_NULL)
5175 	      return FALSE;
5176 	  }
5177       }
5178       break;
5179 
5180     default:
5181       stab_bad_demangle (orig);
5182       return FALSE;
5183     }
5184 
5185   if (ptype != NULL)
5186     {
5187       if (constp)
5188 	*ptype = debug_make_const_type (minfo->dhandle, *ptype);
5189       if (volatilep)
5190 	*ptype = debug_make_volatile_type (minfo->dhandle, *ptype);
5191     }
5192 
5193   return TRUE;
5194 }
5195 
5196 /* Remember a type string in a demangled string.  */
5197 
5198 static bfd_boolean
5199 stab_demangle_remember_type (struct stab_demangle_info *minfo,
5200 			     const char *p, int len)
5201 {
5202   if (minfo->typestring_count >= minfo->typestring_alloc)
5203     {
5204       minfo->typestring_alloc += 10;
5205       minfo->typestrings = ((struct stab_demangle_typestring *)
5206 			    xrealloc (minfo->typestrings,
5207 				      (minfo->typestring_alloc
5208 				       * sizeof *minfo->typestrings)));
5209     }
5210 
5211   minfo->typestrings[minfo->typestring_count].typestring = p;
5212   minfo->typestrings[minfo->typestring_count].len = (unsigned int) len;
5213   ++minfo->typestring_count;
5214 
5215   return TRUE;
5216 }
5217 
5218 /* Demangle names encoded using the g++ V3 ABI.  The newer versions of
5219    g++ which use this ABI do not encode ordinary method argument types
5220    in a mangled name; they simply output the argument types.  However,
5221    for a static method, g++ simply outputs the return type and the
5222    physical name.  So in that case we need to demangle the name here.
5223    Here PHYSNAME is the physical name of the function, and we set the
5224    variable pointed at by PVARARGS to indicate whether this function
5225    is varargs.  This returns NULL, or a NULL terminated array of
5226    argument types.  */
5227 
5228 static debug_type *
5229 stab_demangle_v3_argtypes (void *dhandle, struct stab_handle *info,
5230 			   const char *physname, bfd_boolean *pvarargs)
5231 {
5232   struct demangle_component *dc;
5233   void *mem;
5234   debug_type *pargs;
5235 
5236   dc = cplus_demangle_v3_components (physname, DMGL_PARAMS | demangle_flags, &mem);
5237   if (dc == NULL)
5238     {
5239       stab_bad_demangle (physname);
5240       return NULL;
5241     }
5242 
5243   /* We expect to see TYPED_NAME, and the right subtree describes the
5244      function type.  */
5245   if (dc->type != DEMANGLE_COMPONENT_TYPED_NAME
5246       || dc->u.s_binary.right->type != DEMANGLE_COMPONENT_FUNCTION_TYPE)
5247     {
5248       fprintf (stderr, _("Demangled name is not a function\n"));
5249       free (mem);
5250       return NULL;
5251     }
5252 
5253   pargs = stab_demangle_v3_arglist (dhandle, info,
5254 				    dc->u.s_binary.right->u.s_binary.right,
5255 				    pvarargs);
5256 
5257   free (mem);
5258 
5259   return pargs;
5260 }
5261 
5262 /* Demangle an argument list in a struct demangle_component tree.
5263    Returns a DEBUG_TYPE_NULL terminated array of argument types, and
5264    sets *PVARARGS to indicate whether this is a varargs function.  */
5265 
5266 static debug_type *
5267 stab_demangle_v3_arglist (void *dhandle, struct stab_handle *info,
5268 			  struct demangle_component *arglist,
5269 			  bfd_boolean *pvarargs)
5270 {
5271   struct demangle_component *dc;
5272   unsigned int alloc, count;
5273   debug_type *pargs;
5274 
5275   alloc = 10;
5276   pargs = (debug_type *) xmalloc (alloc * sizeof *pargs);
5277   *pvarargs = FALSE;
5278 
5279   count = 0;
5280 
5281   for (dc = arglist;
5282        dc != NULL;
5283        dc = dc->u.s_binary.right)
5284     {
5285       debug_type arg;
5286       bfd_boolean varargs;
5287 
5288       if (dc->type != DEMANGLE_COMPONENT_ARGLIST)
5289 	{
5290 	  fprintf (stderr, _("Unexpected type in v3 arglist demangling\n"));
5291 	  free (pargs);
5292 	  return NULL;
5293 	}
5294 
5295       /* PR 13925: Cope if the demangler returns an empty
5296 	 context for a function with no arguments.  */
5297       if (dc->u.s_binary.left == NULL)
5298 	break;
5299 
5300       arg = stab_demangle_v3_arg (dhandle, info, dc->u.s_binary.left,
5301 				  NULL, &varargs);
5302       if (arg == NULL)
5303 	{
5304 	  if (varargs)
5305 	    {
5306 	      *pvarargs = TRUE;
5307 	      continue;
5308 	    }
5309 	  free (pargs);
5310 	  return NULL;
5311 	}
5312 
5313       if (count + 1 >= alloc)
5314 	{
5315 	  alloc += 10;
5316 	  pargs = (debug_type *) xrealloc (pargs, alloc * sizeof *pargs);
5317 	}
5318 
5319       pargs[count] = arg;
5320       ++count;
5321     }
5322 
5323   pargs[count] = DEBUG_TYPE_NULL;
5324 
5325   return pargs;
5326 }
5327 
5328 /* Convert a struct demangle_component tree describing an argument
5329    type into a debug_type.  */
5330 
5331 static debug_type
5332 stab_demangle_v3_arg (void *dhandle, struct stab_handle *info,
5333 		      struct demangle_component *dc, debug_type context,
5334 		      bfd_boolean *pvarargs)
5335 {
5336   debug_type dt;
5337 
5338   if (pvarargs != NULL)
5339     *pvarargs = FALSE;
5340 
5341   switch (dc->type)
5342     {
5343       /* FIXME: These are demangle component types which we probably
5344 	 need to handle one way or another.  */
5345     case DEMANGLE_COMPONENT_LOCAL_NAME:
5346     case DEMANGLE_COMPONENT_TYPED_NAME:
5347     case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
5348     case DEMANGLE_COMPONENT_CTOR:
5349     case DEMANGLE_COMPONENT_DTOR:
5350     case DEMANGLE_COMPONENT_JAVA_CLASS:
5351     case DEMANGLE_COMPONENT_RESTRICT_THIS:
5352     case DEMANGLE_COMPONENT_VOLATILE_THIS:
5353     case DEMANGLE_COMPONENT_CONST_THIS:
5354     case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
5355     case DEMANGLE_COMPONENT_COMPLEX:
5356     case DEMANGLE_COMPONENT_IMAGINARY:
5357     case DEMANGLE_COMPONENT_VENDOR_TYPE:
5358     case DEMANGLE_COMPONENT_ARRAY_TYPE:
5359     case DEMANGLE_COMPONENT_PTRMEM_TYPE:
5360     case DEMANGLE_COMPONENT_ARGLIST:
5361     default:
5362       fprintf (stderr, _("Unrecognized demangle component %d\n"),
5363 	       (int) dc->type);
5364       return NULL;
5365 
5366     case DEMANGLE_COMPONENT_NAME:
5367       if (context != NULL)
5368 	{
5369 	  const debug_field *fields;
5370 
5371 	  fields = debug_get_fields (dhandle, context);
5372 	  if (fields != NULL)
5373 	    {
5374 	      /* Try to find this type by looking through the context
5375 		 class.  */
5376 	      for (; *fields != DEBUG_FIELD_NULL; fields++)
5377 		{
5378 		  debug_type ft;
5379 		  const char *dn;
5380 
5381 		  ft = debug_get_field_type (dhandle, *fields);
5382 		  if (ft == NULL)
5383 		    return NULL;
5384 		  dn = debug_get_type_name (dhandle, ft);
5385 		  if (dn != NULL
5386 		      && (int) strlen (dn) == dc->u.s_name.len
5387 		      && strncmp (dn, dc->u.s_name.s, dc->u.s_name.len) == 0)
5388 		    return ft;
5389 		}
5390 	    }
5391 	}
5392       return stab_find_tagged_type (dhandle, info, dc->u.s_name.s,
5393 				    dc->u.s_name.len, DEBUG_KIND_ILLEGAL);
5394 
5395     case DEMANGLE_COMPONENT_QUAL_NAME:
5396       context = stab_demangle_v3_arg (dhandle, info, dc->u.s_binary.left,
5397 				      context, NULL);
5398       if (context == NULL)
5399 	return NULL;
5400       return stab_demangle_v3_arg (dhandle, info, dc->u.s_binary.right,
5401 				   context, NULL);
5402 
5403     case DEMANGLE_COMPONENT_TEMPLATE:
5404       {
5405 	char *p;
5406 	size_t alc;
5407 
5408 	/* We print this component to get a class name which we can
5409 	   use.  FIXME: This probably won't work if the template uses
5410 	   template parameters which refer to an outer template.  */
5411 	p = cplus_demangle_print (DMGL_PARAMS | demangle_flags, dc, 20, &alc);
5412 	if (p == NULL)
5413 	  {
5414 	    fprintf (stderr, _("Failed to print demangled template\n"));
5415 	    return NULL;
5416 	  }
5417 	dt = stab_find_tagged_type (dhandle, info, p, strlen (p),
5418 				    DEBUG_KIND_CLASS);
5419 	free (p);
5420 	return dt;
5421       }
5422 
5423     case DEMANGLE_COMPONENT_SUB_STD:
5424       return stab_find_tagged_type (dhandle, info, dc->u.s_string.string,
5425 				    dc->u.s_string.len, DEBUG_KIND_ILLEGAL);
5426 
5427     case DEMANGLE_COMPONENT_RESTRICT:
5428     case DEMANGLE_COMPONENT_VOLATILE:
5429     case DEMANGLE_COMPONENT_CONST:
5430     case DEMANGLE_COMPONENT_POINTER:
5431     case DEMANGLE_COMPONENT_REFERENCE:
5432       dt = stab_demangle_v3_arg (dhandle, info, dc->u.s_binary.left, NULL,
5433 				 NULL);
5434       if (dt == NULL)
5435 	return NULL;
5436 
5437       switch (dc->type)
5438 	{
5439 	default:
5440 	  abort ();
5441 	case DEMANGLE_COMPONENT_RESTRICT:
5442 	  /* FIXME: We have no way to represent restrict.  */
5443 	  return dt;
5444 	case DEMANGLE_COMPONENT_VOLATILE:
5445 	  return debug_make_volatile_type (dhandle, dt);
5446 	case DEMANGLE_COMPONENT_CONST:
5447 	  return debug_make_const_type (dhandle, dt);
5448 	case DEMANGLE_COMPONENT_POINTER:
5449 	  return debug_make_pointer_type (dhandle, dt);
5450 	case DEMANGLE_COMPONENT_REFERENCE:
5451 	  return debug_make_reference_type (dhandle, dt);
5452 	}
5453 
5454     case DEMANGLE_COMPONENT_FUNCTION_TYPE:
5455       {
5456 	debug_type *pargs;
5457 	bfd_boolean varargs;
5458 
5459 	if (dc->u.s_binary.left == NULL)
5460 	  {
5461 	    /* In this case the return type is actually unknown.
5462 	       However, I'm not sure this will ever arise in practice;
5463 	       normally an unknown return type would only appear at
5464 	       the top level, which is handled above.  */
5465 	    dt = debug_make_void_type (dhandle);
5466 	  }
5467 	else
5468 	  dt = stab_demangle_v3_arg (dhandle, info, dc->u.s_binary.left, NULL,
5469 				     NULL);
5470 	if (dt == NULL)
5471 	  return NULL;
5472 
5473 	pargs = stab_demangle_v3_arglist (dhandle, info,
5474 					  dc->u.s_binary.right,
5475 					  &varargs);
5476 	if (pargs == NULL)
5477 	  return NULL;
5478 
5479 	return debug_make_function_type (dhandle, dt, pargs, varargs);
5480       }
5481 
5482     case DEMANGLE_COMPONENT_BUILTIN_TYPE:
5483       {
5484 	char *p;
5485 	size_t alc;
5486 	debug_type ret;
5487 
5488 	/* We print this component in order to find out the type name.
5489 	   FIXME: Should we instead expose the
5490 	   demangle_builtin_type_info structure?  */
5491 	p = cplus_demangle_print (DMGL_PARAMS | demangle_flags, dc, 20, &alc);
5492 	if (p == NULL)
5493 	  {
5494 	    fprintf (stderr, _("Couldn't get demangled builtin type\n"));
5495 	    return NULL;
5496 	  }
5497 
5498 	/* The mangling is based on the type, but does not itself
5499 	   indicate what the sizes are.  So we have to guess.  */
5500 	if (strcmp (p, "signed char") == 0)
5501 	  ret = debug_make_int_type (dhandle, 1, FALSE);
5502 	else if (strcmp (p, "bool") == 0)
5503 	  ret = debug_make_bool_type (dhandle, 1);
5504 	else if (strcmp (p, "char") == 0)
5505 	  ret = debug_make_int_type (dhandle, 1, FALSE);
5506 	else if (strcmp (p, "double") == 0)
5507 	  ret = debug_make_float_type (dhandle, 8);
5508 	else if (strcmp (p, "long double") == 0)
5509 	  ret = debug_make_float_type (dhandle, 8);
5510 	else if (strcmp (p, "float") == 0)
5511 	  ret = debug_make_float_type (dhandle, 4);
5512 	else if (strcmp (p, "__float128") == 0)
5513 	  ret = debug_make_float_type (dhandle, 16);
5514 	else if (strcmp (p, "unsigned char") == 0)
5515 	  ret = debug_make_int_type (dhandle, 1, TRUE);
5516 	else if (strcmp (p, "int") == 0)
5517 	  ret = debug_make_int_type (dhandle, 4, FALSE);
5518 	else if (strcmp (p, "unsigned int") == 0)
5519 	  ret = debug_make_int_type (dhandle, 4, TRUE);
5520 	else if (strcmp (p, "long") == 0)
5521 	  ret = debug_make_int_type (dhandle, 4, FALSE);
5522 	else if (strcmp (p, "unsigned long") == 0)
5523 	  ret = debug_make_int_type (dhandle, 4, TRUE);
5524 	else if (strcmp (p, "__int128") == 0)
5525 	  ret = debug_make_int_type (dhandle, 16, FALSE);
5526 	else if (strcmp (p, "unsigned __int128") == 0)
5527 	  ret = debug_make_int_type (dhandle, 16, TRUE);
5528 	else if (strcmp (p, "short") == 0)
5529 	  ret = debug_make_int_type (dhandle, 2, FALSE);
5530 	else if (strcmp (p, "unsigned short") == 0)
5531 	  ret = debug_make_int_type (dhandle, 2, TRUE);
5532 	else if (strcmp (p, "void") == 0)
5533 	  ret = debug_make_void_type (dhandle);
5534 	else if (strcmp (p, "wchar_t") == 0)
5535 	  ret = debug_make_int_type (dhandle, 4, TRUE);
5536 	else if (strcmp (p, "long long") == 0)
5537 	  ret = debug_make_int_type (dhandle, 8, FALSE);
5538 	else if (strcmp (p, "unsigned long long") == 0)
5539 	  ret = debug_make_int_type (dhandle, 8, TRUE);
5540 	else if (strcmp (p, "...") == 0)
5541 	  {
5542 	    if (pvarargs == NULL)
5543 	      fprintf (stderr, _("Unexpected demangled varargs\n"));
5544 	    else
5545 	      *pvarargs = TRUE;
5546 	    ret = NULL;
5547 	  }
5548 	else
5549 	  {
5550 	    fprintf (stderr, _("Unrecognized demangled builtin type\n"));
5551 	    ret = NULL;
5552 	  }
5553 
5554 	free (p);
5555 
5556 	return ret;
5557       }
5558     }
5559 }
5560