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