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