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