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