Automatic date update in version.in
[binutils-gdb.git] / binutils / stabs.c
blob88347012d219ef25b4b7ec8856f9becc5182af69
1 /* stabs.c -- Parse stabs debugging information
2 Copyright (C) 1995-2024 Free Software Foundation, Inc.
3 Written by Ian Lance Taylor <ian@cygnus.com>.
5 This file is part of GNU Binutils.
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.
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.
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. */
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. */
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"
38 /* The number of predefined XCOFF types. */
40 #define XCOFF_TYPE_COUNT 34
42 /* This structure is used as a handle so that the stab parsing doesn't
43 need to use any static variables. */
45 struct stab_handle
47 /* The BFD. */
48 bfd *abfd;
49 /* TRUE if this is stabs in sections. */
50 bool sections;
51 /* The symbol table. */
52 asymbol **syms;
53 /* The number of symbols. */
54 long symcount;
55 /* The accumulated file name string. */
56 char *so_string;
57 /* The value of the last N_SO symbol. */
58 bfd_vma so_value;
59 /* The value of the start of the file, so that we can handle file
60 relative N_LBRAC and N_RBRAC symbols. */
61 bfd_vma file_start_offset;
62 /* The offset of the start of the function, so that we can handle
63 function relative N_LBRAC and N_RBRAC symbols. */
64 bfd_vma function_start_offset;
65 /* The version number of gcc which compiled the current compilation
66 unit, 0 if not compiled by gcc. */
67 int gcc_compiled;
68 /* Whether an N_OPT symbol was seen that was not generated by gcc,
69 so that we can detect the SunPRO compiler. */
70 bool n_opt_found;
71 /* The main file name. */
72 char *main_filename;
73 /* A stack of unfinished N_BINCL files. */
74 struct bincl_file *bincl_stack;
75 /* A list of finished N_BINCL files. */
76 struct bincl_file *bincl_list;
77 /* Whether we are inside a function or not. */
78 bool within_function;
79 /* The address of the end of the function, used if we have seen an
80 N_FUN symbol while in a function. This is -1 if we have not seen
81 an N_FUN (the normal case). */
82 bfd_vma function_end;
83 /* The depth of block nesting. */
84 int block_depth;
85 /* List of pending variable definitions. */
86 struct stab_pending_var *pending;
87 /* Number of files for which we have types. */
88 unsigned int files;
89 /* Lists of types per file. */
90 struct stab_types **file_types;
91 /* Predefined XCOFF types. */
92 debug_type xcoff_types[XCOFF_TYPE_COUNT];
93 /* Undefined tags. */
94 struct stab_tag *tags;
95 /* Set by parse_stab_type if it sees a structure defined as a cross
96 reference to itself. Reset by parse_stab_type otherwise. */
97 bool self_crossref;
100 /* A list of these structures is used to hold pending variable
101 definitions seen before the N_LBRAC of a block. */
103 struct stab_pending_var
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;
117 /* A list of these structures is used to hold the types for a single
118 file. */
120 struct stab_types
122 /* Next set of slots for this file. */
123 struct stab_types *next;
124 /* Where the TYPES array starts. */
125 unsigned int base_index;
126 /* Types indexed by type number. */
127 #define STAB_TYPES_SLOTS (16)
128 debug_type types[STAB_TYPES_SLOTS];
131 /* We keep a list of undefined tags that we encounter, so that we can
132 fill them in if the tag is later defined. */
134 struct stab_tag
136 /* Next undefined tag. */
137 struct stab_tag *next;
138 /* Tag name. */
139 const char *name;
140 /* Type kind. */
141 enum debug_type_kind kind;
142 /* Slot to hold real type when we discover it. If we don't, we fill
143 in an undefined tag type. */
144 debug_type slot;
145 /* Indirect type we have created to point at slot. */
146 debug_type type;
149 static void bad_stab (const char *);
150 static void warn_stab (const char *, const char *);
151 static bool parse_stab_string
152 (void *, struct stab_handle *, int, int, bfd_vma,
153 const char *, const char *);
154 static debug_type parse_stab_type
155 (void *, struct stab_handle *, const char *, const char **,
156 debug_type **, const char *);
157 static bool parse_stab_type_number
158 (const char **, int *, const char *);
159 static debug_type parse_stab_range_type
160 (void *, struct stab_handle *, const char *, const char **,
161 const int *, const char *);
162 static debug_type parse_stab_sun_builtin_type
163 (void *, const char **, const char *);
164 static debug_type parse_stab_sun_floating_type
165 (void *, const char **, const char *);
166 static debug_type parse_stab_enum_type
167 (void *, const char **, const char *);
168 static debug_type parse_stab_struct_type
169 (void *, struct stab_handle *, const char *, const char **,
170 bool, const int *, const char *);
171 static bool parse_stab_baseclasses
172 (void *, struct stab_handle *, const char **, debug_baseclass **,
173 const char *);
174 static bool parse_stab_struct_fields
175 (void *, struct stab_handle *, const char **, debug_field **,
176 bool *, const char *);
177 static bool parse_stab_cpp_abbrev
178 (void *, struct stab_handle *, const char **, debug_field *, const char *);
179 static bool parse_stab_one_struct_field
180 (void *, struct stab_handle *, const char **, const char *,
181 debug_field *, bool *, const char *);
182 static bool parse_stab_members
183 (void *, struct stab_handle *, const char *, const char **, const int *,
184 debug_method **, const char *);
185 static debug_type parse_stab_argtypes
186 (void *, struct stab_handle *, debug_type, const char *, const char *,
187 debug_type, const char *, bool, bool, const char **);
188 static bool parse_stab_tilde_field
189 (void *, struct stab_handle *, const char **, const int *, debug_type *,
190 bool *, const char *);
191 static debug_type parse_stab_array_type
192 (void *, struct stab_handle *, const char **, bool, const char *);
193 static void push_bincl (void *, struct stab_handle *, const char *, bfd_vma);
194 static const char *pop_bincl (struct stab_handle *);
195 static bool find_excl (struct stab_handle *, const char *, bfd_vma);
196 static bool stab_record_variable
197 (void *, struct stab_handle *, const char *, debug_type,
198 enum debug_var_kind, bfd_vma);
199 static bool stab_emit_pending_vars (void *, struct stab_handle *);
200 static debug_type *stab_find_slot (void *, struct stab_handle *, const int *);
201 static debug_type stab_find_type (void *, struct stab_handle *, const int *);
202 static bool stab_record_type
203 (void *, struct stab_handle *, const int *, debug_type);
204 static debug_type stab_xcoff_builtin_type
205 (void *, struct stab_handle *, unsigned int);
206 static debug_type stab_find_tagged_type
207 (void *, struct stab_handle *, const char *, int, enum debug_type_kind);
208 static debug_type *stab_demangle_argtypes
209 (void *, struct stab_handle *, const char *, bool *, unsigned int);
210 static debug_type *stab_demangle_v3_argtypes
211 (void *, struct stab_handle *, const char *, bool *);
212 static debug_type *stab_demangle_v3_arglist
213 (void *, struct stab_handle *, struct demangle_component *, bool *);
214 static debug_type stab_demangle_v3_arg
215 (void *, struct stab_handle *, struct demangle_component *, debug_type,
216 bool *);
218 static int demangle_flags = DMGL_ANSI;
220 /* Save a string in memory. */
222 static char *
223 savestring (void *dhandle, const char *start, size_t len)
225 char *ret;
227 ret = debug_xalloc (dhandle, len + 1);
228 memcpy (ret, start, len);
229 ret[len] = '\0';
230 return ret;
233 /* Read a number from a string. */
235 static bfd_vma
236 parse_number (const char **pp, bool *poverflow, const char *p_end)
238 unsigned long ul;
239 const char *orig;
241 if (poverflow != NULL)
242 *poverflow = false;
244 orig = *pp;
245 if (orig >= p_end)
246 return (bfd_vma) 0;
248 /* Stop early if we are passed an empty string. */
249 if (*orig == 0)
250 return (bfd_vma) 0;
252 errno = 0;
253 ul = strtoul (*pp, (char **) pp, 0);
254 if (ul + 1 != 0 || errno == 0)
256 /* If bfd_vma is larger than unsigned long, and the number is
257 meant to be negative, we have to make sure that we sign
258 extend properly. */
259 if (*orig == '-')
260 return (bfd_vma) (bfd_signed_vma) (long) ul;
261 return (bfd_vma) ul;
264 /* Note that even though strtoul overflowed, it should have set *pp
265 to the end of the number, which is where we want it. */
266 if (sizeof (bfd_vma) > sizeof (unsigned long))
268 const char *p;
269 bool neg;
270 int base;
271 bfd_vma over, lastdig;
272 bool overflow;
273 bfd_vma v;
275 /* Our own version of strtoul, for a bfd_vma. */
276 p = orig;
278 neg = false;
279 if (*p == '+')
280 ++p;
281 else if (*p == '-')
283 neg = true;
284 ++p;
287 base = 10;
288 if (*p == '0')
290 if (p[1] == 'x' || p[1] == 'X')
292 base = 16;
293 p += 2;
295 else
297 base = 8;
298 ++p;
302 over = ((bfd_vma) (bfd_signed_vma) -1) / (bfd_vma) base;
303 lastdig = ((bfd_vma) (bfd_signed_vma) -1) % (bfd_vma) base;
305 overflow = false;
306 v = 0;
307 while (1)
309 int d;
311 d = *p++;
312 if (ISDIGIT (d))
313 d -= '0';
314 else if (ISUPPER (d))
315 d -= 'A';
316 else if (ISLOWER (d))
317 d -= 'a';
318 else
319 break;
321 if (d >= base)
322 break;
324 if (v > over || (v == over && (bfd_vma) d > lastdig))
326 overflow = true;
327 break;
331 if (! overflow)
333 if (neg)
334 v = - v;
335 return v;
339 /* If we get here, the number is too large to represent in a
340 bfd_vma. */
341 if (poverflow != NULL)
342 *poverflow = true;
343 else
344 warn_stab (orig, _("numeric overflow"));
346 return 0;
349 /* Give an error for a bad stab string. */
351 static void
352 bad_stab (const char *p)
354 fprintf (stderr, _("Bad stab: %s\n"), p);
357 /* Warn about something in a stab string. */
359 static void
360 warn_stab (const char *p, const char *err)
362 fprintf (stderr, _("Warning: %s: %s\n"), err, p);
365 /* Create a handle to parse stabs symbols with. */
367 void *
368 start_stab (void *dhandle ATTRIBUTE_UNUSED, bfd *abfd, bool sections,
369 asymbol **syms, long symcount)
371 struct stab_handle *ret;
373 ret = xmalloc (sizeof (*ret));
374 memset (ret, 0, sizeof (*ret));
375 ret->abfd = abfd;
376 ret->sections = sections;
377 ret->syms = syms;
378 ret->symcount = symcount;
379 ret->files = 1;
380 ret->file_types = xmalloc (sizeof (*ret->file_types));
381 ret->file_types[0] = NULL;
382 ret->function_end = -1;
383 return ret;
386 /* When we have processed all the stabs information, we need to go
387 through and fill in all the undefined tags. */
389 bool
390 finish_stab (void *dhandle, void *handle, bool emit)
392 struct stab_handle *info = (struct stab_handle *) handle;
393 struct stab_tag *st;
394 bool ret = true;
396 if (emit && info->within_function)
398 if (! stab_emit_pending_vars (dhandle, info)
399 || ! debug_end_function (dhandle, info->function_end))
400 ret = false;
403 if (emit && ret)
404 for (st = info->tags; st != NULL; st = st->next)
406 enum debug_type_kind kind;
408 kind = st->kind;
409 if (kind == DEBUG_KIND_ILLEGAL)
410 kind = DEBUG_KIND_STRUCT;
411 st->slot = debug_make_undefined_tagged_type (dhandle, st->name, kind);
412 if (st->slot == DEBUG_TYPE_NULL)
414 ret = false;
415 break;
419 free (info->file_types);
420 free (info->so_string);
421 free (info);
422 return ret;
425 /* Handle a single stabs symbol. */
427 bool
428 parse_stab (void *dhandle, void *handle, int type, int desc, bfd_vma value,
429 const char *string)
431 const char * string_end;
432 struct stab_handle *info = (struct stab_handle *) handle;
433 char *copy;
434 size_t len;
436 /* gcc will emit two N_SO strings per compilation unit, one for the
437 directory name and one for the file name. We just collect N_SO
438 strings as we see them, and start the new compilation unit when
439 we see a non N_SO symbol. */
440 if (info->so_string != NULL
441 && (type != N_SO || *string == '\0' || value != info->so_value))
443 len = strlen (info->so_string) + 1;
444 copy = debug_xalloc (dhandle, len);
445 memcpy (copy, info->so_string, len);
446 if (! debug_set_filename (dhandle, copy))
447 return false;
448 info->main_filename = copy;
450 free (info->so_string);
451 info->so_string = NULL;
453 info->gcc_compiled = 0;
454 info->n_opt_found = false;
456 /* Generally, for stabs in the symbol table, the N_LBRAC and
457 N_RBRAC symbols are relative to the N_SO symbol value. */
458 if (! info->sections)
459 info->file_start_offset = info->so_value;
461 /* We need to reset the mapping from type numbers to types. We
462 can only free the file_types array, not the stab_types
463 list entries due to the use of debug_make_indirect_type. */
464 info->files = 1;
465 info->file_types = xrealloc (info->file_types, sizeof (*info->file_types));
466 info->file_types[0] = NULL;
468 /* Now process whatever type we just got. */
471 string_end = string + strlen (string);
473 switch (type)
475 case N_FN:
476 case N_FN_SEQ:
477 break;
479 case N_LBRAC:
480 /* Ignore extra outermost context from SunPRO cc and acc. */
481 if (info->n_opt_found && desc == 1)
482 break;
484 if (! info->within_function)
486 fprintf (stderr, _("N_LBRAC not within function\n"));
487 return false;
490 /* Start an inner lexical block. */
491 if (! debug_start_block (dhandle,
492 (value
493 + info->file_start_offset
494 + info->function_start_offset)))
495 return false;
497 /* Emit any pending variable definitions. */
498 if (! stab_emit_pending_vars (dhandle, info))
499 return false;
501 ++info->block_depth;
502 break;
504 case N_RBRAC:
505 /* Ignore extra outermost context from SunPRO cc and acc. */
506 if (info->n_opt_found && desc == 1)
507 break;
509 /* We shouldn't have any pending variable definitions here, but,
510 if we do, we probably need to emit them before closing the
511 block. */
512 if (! stab_emit_pending_vars (dhandle, info))
513 return false;
515 /* End an inner lexical block. */
516 if (! debug_end_block (dhandle,
517 (value
518 + info->file_start_offset
519 + info->function_start_offset)))
520 return false;
522 --info->block_depth;
523 if (info->block_depth < 0)
525 fprintf (stderr, _("Too many N_RBRACs\n"));
526 return false;
528 break;
530 case N_SO:
531 /* This always ends a function. */
532 if (info->within_function)
534 bfd_vma endval;
536 endval = value;
537 if (*string != '\0'
538 && info->function_end != (bfd_vma) -1
539 && info->function_end < endval)
540 endval = info->function_end;
541 if (! stab_emit_pending_vars (dhandle, info)
542 || ! debug_end_function (dhandle, endval))
543 return false;
544 info->within_function = false;
545 info->function_end = (bfd_vma) -1;
548 /* An empty string is emitted by gcc at the end of a compilation
549 unit. */
550 if (*string == '\0')
551 return true;
553 /* Just accumulate strings until we see a non N_SO symbol. If
554 the string starts with a directory separator or some other
555 form of absolute path specification, we discard the previously
556 accumulated strings. */
557 if (info->so_string == NULL)
558 info->so_string = xstrdup (string);
559 else
561 char *f;
563 f = info->so_string;
565 if (IS_ABSOLUTE_PATH (string))
566 info->so_string = xstrdup (string);
567 else
568 info->so_string = concat (info->so_string, string,
569 (const char *) NULL);
570 free (f);
573 info->so_value = value;
575 break;
577 case N_SOL:
578 /* Start an include file. */
579 len = strlen (string) + 1;
580 copy = debug_xalloc (dhandle, len);
581 memcpy (copy, string, len);
582 if (! debug_start_source (dhandle, copy))
583 return false;
584 break;
586 case N_BINCL:
587 /* Start an include file which may be replaced. */
588 len = strlen (string) + 1;
589 copy = debug_xalloc (dhandle, len);
590 memcpy (copy, string, len);
591 push_bincl (dhandle, info, copy, value);
592 if (! debug_start_source (dhandle, copy))
593 return false;
594 break;
596 case N_EINCL:
597 /* End an N_BINCL include. */
598 if (! debug_start_source (dhandle, pop_bincl (info)))
599 return false;
600 break;
602 case N_EXCL:
603 /* This is a duplicate of a header file named by N_BINCL which
604 was eliminated by the linker. */
605 if (! find_excl (info, string, value))
606 return false;
607 break;
609 case N_SLINE:
610 if (! debug_record_line (dhandle, desc,
611 value + (info->within_function
612 ? info->function_start_offset : 0)))
613 return false;
614 break;
616 case N_BCOMM:
617 if (! debug_start_common_block (dhandle, string))
618 return false;
619 break;
621 case N_ECOMM:
622 if (! debug_end_common_block (dhandle, string))
623 return false;
624 break;
626 case N_FUN:
627 if (*string == '\0')
629 if (info->within_function)
631 /* This always marks the end of a function; we don't
632 need to worry about info->function_end. */
633 if (info->sections)
634 value += info->function_start_offset;
635 if (! stab_emit_pending_vars (dhandle, info)
636 || ! debug_end_function (dhandle, value))
637 return false;
638 info->within_function = false;
639 info->function_end = (bfd_vma) -1;
641 break;
644 /* A const static symbol in the .text section will have an N_FUN
645 entry. We need to use these to mark the end of the function,
646 in case we are looking at gcc output before it was changed to
647 always emit an empty N_FUN. We can't call debug_end_function
648 here, because it might be a local static symbol. */
649 if (info->within_function
650 && (info->function_end == (bfd_vma) -1
651 || value < info->function_end))
652 info->function_end = value;
654 /* Fall through. */
655 /* FIXME: gdb checks the string for N_STSYM, N_LCSYM or N_ROSYM
656 symbols, and if it does not start with :S, gdb relocates the
657 value to the start of the section. gcc always seems to use
658 :S, so we don't worry about this. */
659 /* Fall through. */
660 default:
662 const char *colon;
664 colon = strchr (string, ':');
665 if (colon != NULL
666 && (colon[1] == 'f' || colon[1] == 'F'))
668 if (info->within_function)
670 bfd_vma endval;
672 endval = value;
673 if (info->function_end != (bfd_vma) -1
674 && info->function_end < endval)
675 endval = info->function_end;
676 if (! stab_emit_pending_vars (dhandle, info)
677 || ! debug_end_function (dhandle, endval))
678 return false;
679 info->function_end = (bfd_vma) -1;
681 /* For stabs in sections, line numbers and block addresses
682 are offsets from the start of the function. */
683 if (info->sections)
684 info->function_start_offset = value;
685 info->within_function = true;
688 if (! parse_stab_string (dhandle, info, type, desc, value, string, string_end))
689 return false;
691 break;
693 case N_OPT:
694 if (string != NULL && strcmp (string, "gcc2_compiled.") == 0)
695 info->gcc_compiled = 2;
696 else if (string != NULL && strcmp (string, "gcc_compiled.") == 0)
697 info->gcc_compiled = 1;
698 else
699 info->n_opt_found = true;
700 break;
702 case N_OBJ:
703 case N_ENDM:
704 case N_MAIN:
705 case N_WARNING:
706 break;
709 return true;
712 /* Parse the stabs string. */
714 static bool
715 parse_stab_string (void *dhandle, struct stab_handle *info, int stabtype,
716 int desc ATTRIBUTE_UNUSED, bfd_vma value,
717 const char *string, const char * string_end)
719 const char *p;
720 char *name;
721 int type;
722 debug_type dtype;
723 bool synonym;
724 bool self_crossref;
725 debug_type *slot;
727 p = strchr (string, ':');
728 if (p == NULL)
729 return true;
731 while (p[1] == ':')
733 p += 2;
734 p = strchr (p, ':');
735 if (p == NULL)
737 bad_stab (string);
738 return false;
742 /* FIXME: Sometimes the special C++ names start with '.'. */
743 name = NULL;
744 if (string[0] == '$')
746 switch (string[1])
748 case 't':
749 name = "this";
750 break;
751 case 'v':
752 /* Was: name = "vptr"; */
753 break;
754 case 'e':
755 name = "eh_throw";
756 break;
757 case '_':
758 /* This was an anonymous type that was never fixed up. */
759 break;
760 case 'X':
761 /* SunPRO (3.0 at least) static variable encoding. */
762 break;
763 default:
764 warn_stab (string, _("unknown C++ encoded name"));
765 break;
769 if (name == NULL)
771 if (p == string || (string[0] == ' ' && p == string + 1))
772 name = NULL;
773 else
774 name = savestring (dhandle, string, p - string);
777 ++p;
778 if (ISDIGIT (*p) || *p == '(' || *p == '-')
779 type = 'l';
780 else if (*p == 0)
782 bad_stab (string);
783 return false;
785 else
786 type = *p++;
788 switch (type)
790 case 'c':
791 /* c is a special case, not followed by a type-number.
792 SYMBOL:c=iVALUE for an integer constant symbol.
793 SYMBOL:c=rVALUE for a floating constant symbol.
794 SYMBOL:c=eTYPE,INTVALUE for an enum constant symbol.
795 e.g. "b:c=e6,0" for "const b = blob1"
796 (where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;"). */
797 if (*p != '=')
799 bad_stab (string);
800 return false;
802 ++p;
803 switch (*p++)
805 case 'r':
806 /* Floating point constant. */
807 if (! debug_record_float_const (dhandle, name, atof (p)))
808 return false;
809 break;
810 case 'i':
811 /* Integer constant. */
812 /* Defining integer constants this way is kind of silly,
813 since 'e' constants allows the compiler to give not only
814 the value, but the type as well. C has at least int,
815 long, unsigned int, and long long as constant types;
816 other languages probably should have at least unsigned as
817 well as signed constants. */
818 if (! debug_record_int_const (dhandle, name, atoi (p)))
819 return false;
820 break;
821 case 'e':
822 /* SYMBOL:c=eTYPE,INTVALUE for a constant symbol whose value
823 can be represented as integral.
824 e.g. "b:c=e6,0" for "const b = blob1"
825 (where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;"). */
826 dtype = parse_stab_type (dhandle, info, (const char *) NULL,
827 &p, (debug_type **) NULL, string_end);
828 if (dtype == DEBUG_TYPE_NULL)
829 return false;
830 if (*p != ',')
832 bad_stab (string);
833 return false;
835 if (! debug_record_typed_const (dhandle, name, dtype, atoi (p)))
836 return false;
837 break;
838 default:
839 bad_stab (string);
840 return false;
843 break;
845 case 'C':
846 /* The name of a caught exception. */
847 dtype = parse_stab_type (dhandle, info, (const char *) NULL,
848 &p, (debug_type **) NULL, string_end);
849 if (dtype == DEBUG_TYPE_NULL)
850 return false;
851 if (! debug_record_label (dhandle, name, dtype, value))
852 return false;
853 break;
855 case 'f':
856 case 'F':
857 /* A function definition. */
858 dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
859 (debug_type **) NULL, string_end);
860 if (dtype == DEBUG_TYPE_NULL)
861 return false;
862 if (! debug_record_function (dhandle, name, dtype, type == 'F', value))
863 return false;
865 /* Sun acc puts declared types of arguments here. We don't care
866 about their actual types (FIXME -- we should remember the whole
867 function prototype), but the list may define some new types
868 that we have to remember, so we must scan it now. */
869 while (*p == ';')
871 ++p;
872 if (parse_stab_type (dhandle, info, (const char *) NULL, &p,
873 (debug_type **) NULL, string_end)
874 == DEBUG_TYPE_NULL)
875 return false;
878 break;
880 case 'G':
882 asymbol **ps;
884 /* A global symbol. The value must be extracted from the
885 symbol table. */
886 dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
887 (debug_type **) NULL, string_end);
888 if (dtype == DEBUG_TYPE_NULL)
889 return false;
890 if (name != NULL)
892 char leading;
893 long c;
895 leading = bfd_get_symbol_leading_char (info->abfd);
896 for (c = info->symcount, ps = info->syms; c > 0; --c, ++ps)
898 const char *n;
900 n = bfd_asymbol_name (*ps);
901 if (leading != '\0' && *n == leading)
902 ++n;
903 if (*n == *name && strcmp (n, name) == 0)
904 break;
907 if (c > 0)
908 value = bfd_asymbol_value (*ps);
911 if (! stab_record_variable (dhandle, info, name, dtype, DEBUG_GLOBAL,
912 value))
913 return false;
915 break;
917 /* This case is faked by a conditional above, when there is no
918 code letter in the dbx data. Dbx data never actually
919 contains 'l'. */
920 case 'l':
921 case 's':
922 dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
923 (debug_type **) NULL, string_end);
924 if (dtype == DEBUG_TYPE_NULL)
925 return false;
926 if (! stab_record_variable (dhandle, info, name, dtype, DEBUG_LOCAL,
927 value))
928 return false;
929 break;
931 case 'p':
932 /* A function parameter. */
933 if (*p != 'F')
934 dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
935 (debug_type **) NULL, string_end);
936 else
938 /* pF is a two-letter code that means a function parameter in
939 Fortran. The type-number specifies the type of the return
940 value. Translate it into a pointer-to-function type. */
941 ++p;
942 dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
943 (debug_type **) NULL, string_end);
944 if (dtype != DEBUG_TYPE_NULL)
946 debug_type ftype;
948 ftype = debug_make_function_type (dhandle, dtype,
949 (debug_type *) NULL, false);
950 dtype = debug_make_pointer_type (dhandle, ftype);
953 if (dtype == DEBUG_TYPE_NULL)
954 return false;
955 if (! debug_record_parameter (dhandle, name, dtype, DEBUG_PARM_STACK,
956 value))
957 return false;
959 /* FIXME: At this point gdb considers rearranging the parameter
960 address on a big endian machine if it is smaller than an int.
961 We have no way to do that, since we don't really know much
962 about the target. */
963 break;
965 case 'P':
966 if (stabtype == N_FUN)
968 /* Prototype of a function referenced by this file. */
969 while (*p == ';')
971 ++p;
972 if (parse_stab_type (dhandle, info, (const char *) NULL, &p,
973 (debug_type **) NULL, string_end)
974 == DEBUG_TYPE_NULL)
975 return false;
977 break;
979 /* Fall through. */
980 case 'R':
981 /* Parameter which is in a register. */
982 dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
983 (debug_type **) NULL, string_end);
984 if (dtype == DEBUG_TYPE_NULL)
985 return false;
986 if (! debug_record_parameter (dhandle, name, dtype, DEBUG_PARM_REG,
987 value))
988 return false;
989 break;
991 case 'r':
992 /* Register variable (either global or local). */
993 dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
994 (debug_type **) NULL, string_end);
995 if (dtype == DEBUG_TYPE_NULL)
996 return false;
997 if (! stab_record_variable (dhandle, info, name, dtype, DEBUG_REGISTER,
998 value))
999 return false;
1001 /* FIXME: At this point gdb checks to combine pairs of 'p' and
1002 'r' stabs into a single 'P' stab. */
1003 break;
1005 case 'S':
1006 /* Static symbol at top level of file. */
1007 dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
1008 (debug_type **) NULL, string_end);
1009 if (dtype == DEBUG_TYPE_NULL)
1010 return false;
1011 if (! stab_record_variable (dhandle, info, name, dtype, DEBUG_STATIC,
1012 value))
1013 return false;
1014 break;
1016 case 't':
1017 /* A typedef. */
1018 dtype = parse_stab_type (dhandle, info, name, &p, &slot, string_end);
1019 if (dtype == DEBUG_TYPE_NULL)
1020 return false;
1021 if (name == NULL)
1023 /* A nameless type. Nothing to do. */
1024 return true;
1027 dtype = debug_name_type (dhandle, name, dtype);
1028 if (dtype == DEBUG_TYPE_NULL)
1029 return false;
1031 if (slot != NULL)
1032 *slot = dtype;
1034 break;
1036 case 'T':
1037 /* Struct, union, or enum tag. For GNU C++, this can be followed
1038 by 't' which means we are typedef'ing it as well. */
1039 if (*p != 't')
1041 synonym = false;
1042 /* FIXME: gdb sets synonym to TRUE if the current language
1043 is C++. */
1045 else
1047 synonym = true;
1048 ++p;
1051 dtype = parse_stab_type (dhandle, info, name, &p, &slot, string_end);
1052 if (dtype == DEBUG_TYPE_NULL)
1053 return false;
1054 if (name == NULL)
1055 return true;
1057 /* INFO->SELF_CROSSREF is set by parse_stab_type if this type is
1058 a cross reference to itself. These are generated by some
1059 versions of g++. */
1060 self_crossref = info->self_crossref;
1062 dtype = debug_tag_type (dhandle, name, dtype);
1063 if (dtype == DEBUG_TYPE_NULL)
1064 return false;
1065 if (slot != NULL)
1066 *slot = dtype;
1068 /* See if we have a cross reference to this tag which we can now
1069 fill in. Avoid filling in a cross reference to ourselves,
1070 because that would lead to circular debugging information. */
1071 if (! self_crossref)
1073 register struct stab_tag **pst;
1075 for (pst = &info->tags; *pst != NULL; pst = &(*pst)->next)
1077 if ((*pst)->name[0] == name[0]
1078 && strcmp ((*pst)->name, name) == 0)
1080 (*pst)->slot = dtype;
1081 *pst = (*pst)->next;
1082 break;
1087 if (synonym)
1089 dtype = debug_name_type (dhandle, name, dtype);
1090 if (dtype == DEBUG_TYPE_NULL)
1091 return false;
1093 if (slot != NULL)
1094 *slot = dtype;
1097 break;
1099 case 'V':
1100 /* Static symbol of local scope */
1101 dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
1102 (debug_type **) NULL, string_end);
1103 if (dtype == DEBUG_TYPE_NULL)
1104 return false;
1105 /* FIXME: gdb checks os9k_stabs here. */
1106 if (! stab_record_variable (dhandle, info, name, dtype,
1107 DEBUG_LOCAL_STATIC, value))
1108 return false;
1109 break;
1111 case 'v':
1112 /* Reference parameter. */
1113 dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
1114 (debug_type **) NULL, string_end);
1115 if (dtype == DEBUG_TYPE_NULL)
1116 return false;
1117 if (! debug_record_parameter (dhandle, name, dtype, DEBUG_PARM_REFERENCE,
1118 value))
1119 return false;
1120 break;
1122 case 'a':
1123 /* Reference parameter which is in a register. */
1124 dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
1125 (debug_type **) NULL, string_end);
1126 if (dtype == DEBUG_TYPE_NULL)
1127 return false;
1128 if (! debug_record_parameter (dhandle, name, dtype, DEBUG_PARM_REF_REG,
1129 value))
1130 return false;
1131 break;
1133 case 'X':
1134 /* This is used by Sun FORTRAN for "function result value".
1135 Sun claims ("dbx and dbxtool interfaces", 2nd ed)
1136 that Pascal uses it too, but when I tried it Pascal used
1137 "x:3" (local symbol) instead. */
1138 dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
1139 (debug_type **) NULL, string_end);
1140 if (dtype == DEBUG_TYPE_NULL)
1141 return false;
1142 if (! stab_record_variable (dhandle, info, name, dtype, DEBUG_LOCAL,
1143 value))
1144 return false;
1145 break;
1147 case 'Y':
1148 /* SUNPro C++ Namespace =Yn0. */
1149 /* Skip the namespace mapping, as it is not used now. */
1150 if (*p++ != 0 && *p++ == 'n' && *p++ == '0')
1152 /* =Yn0name; */
1153 while (*p && *p != ';')
1154 ++p;
1155 if (*p)
1156 return true;
1158 /* TODO SUNPro C++ support:
1159 Support default arguments after F,P parameters
1160 Ya = Anonymous unions
1161 YM,YD = Pointers to class members
1162 YT,YI = Templates
1163 YR = Run-time type information (RTTI) */
1165 /* Fall through. */
1167 default:
1168 bad_stab (string);
1169 return false;
1172 /* FIXME: gdb converts structure values to structure pointers in a
1173 couple of cases, depending upon the target. */
1175 return true;
1178 /* Parse a stabs type. The typename argument is non-NULL if this is a
1179 typedef or a tag definition. The pp argument points to the stab
1180 string, and is updated. The slotp argument points to a place to
1181 store the slot used if the type is being defined. */
1183 static debug_type
1184 parse_stab_type (void * dhandle,
1185 struct stab_handle * info,
1186 const char * type_name,
1187 const char ** pp,
1188 debug_type ** slotp,
1189 const char * p_end)
1191 const char *orig;
1192 int typenums[2];
1193 int size;
1194 bool stringp;
1195 int descriptor;
1196 debug_type dtype;
1198 if (slotp != NULL)
1199 *slotp = NULL;
1201 orig = *pp;
1202 if (orig >= p_end)
1203 return DEBUG_TYPE_NULL;
1205 size = -1;
1206 stringp = false;
1208 info->self_crossref = false;
1210 /* Read type number if present. The type number may be omitted.
1211 for instance in a two-dimensional array declared with type
1212 "ar1;1;10;ar1;1;10;4". */
1213 if (! ISDIGIT (**pp) && **pp != '(' && **pp != '-')
1215 /* 'typenums=' not present, type is anonymous. Read and return
1216 the definition, but don't put it in the type vector. */
1217 typenums[0] = typenums[1] = -1;
1219 else
1221 if (! parse_stab_type_number (pp, typenums, p_end))
1222 return DEBUG_TYPE_NULL;
1224 if (**pp != '=')
1225 /* Type is not being defined here. Either it already
1226 exists, or this is a forward reference to it. */
1227 return stab_find_type (dhandle, info, typenums);
1229 /* Only set the slot if the type is being defined. This means
1230 that the mapping from type numbers to types will only record
1231 the name of the typedef which defines a type. If we don't do
1232 this, then something like
1233 typedef int foo;
1234 int i;
1235 will record that i is of type foo. Unfortunately, stabs
1236 information is ambiguous about variable types. For this code,
1237 typedef int foo;
1238 int i;
1239 foo j;
1240 the stabs information records both i and j as having the same
1241 type. This could be fixed by patching the compiler. */
1242 if (slotp != NULL && typenums[0] >= 0 && typenums[1] >= 0)
1243 *slotp = stab_find_slot (dhandle, info, typenums);
1245 /* Type is being defined here. */
1246 /* Skip the '='. */
1247 ++*pp;
1249 while (**pp == '@')
1251 const char *p = *pp + 1;
1252 const char *attr;
1254 if (ISDIGIT (*p) || *p == '(' || *p == '-')
1255 /* Member type. */
1256 break;
1258 /* Type attributes. */
1259 attr = p;
1261 for (; *p != ';'; ++p)
1263 if (*p == '\0')
1265 bad_stab (orig);
1266 return DEBUG_TYPE_NULL;
1269 *pp = p + 1;
1271 switch (*attr)
1273 case 's':
1274 size = atoi (attr + 1);
1275 size /= 8; /* Size is in bits. We store it in bytes. */
1276 if (size <= 0)
1277 size = -1;
1278 break;
1280 case 'S':
1281 stringp = true;
1282 break;
1284 case 0:
1285 bad_stab (orig);
1286 return DEBUG_TYPE_NULL;
1288 default:
1289 /* Ignore unrecognized type attributes, so future
1290 compilers can invent new ones. */
1291 break;
1296 descriptor = **pp;
1297 ++*pp;
1299 switch (descriptor)
1301 case 'x':
1303 enum debug_type_kind code;
1304 const char *q1, *q2, *p;
1306 /* A cross reference to another type. */
1307 switch (**pp)
1309 case 's':
1310 code = DEBUG_KIND_STRUCT;
1311 break;
1312 case 'u':
1313 code = DEBUG_KIND_UNION;
1314 break;
1315 case 'e':
1316 code = DEBUG_KIND_ENUM;
1317 break;
1318 case 0:
1319 bad_stab (orig);
1320 return DEBUG_TYPE_NULL;
1322 default:
1323 /* Complain and keep going, so compilers can invent new
1324 cross-reference types. */
1325 warn_stab (orig, _("unrecognized cross reference type"));
1326 code = DEBUG_KIND_STRUCT;
1327 break;
1329 ++*pp;
1331 q1 = strchr (*pp, '<');
1332 p = strchr (*pp, ':');
1333 if (p == NULL)
1335 bad_stab (orig);
1336 return DEBUG_TYPE_NULL;
1338 if (q1 != NULL && p > q1 && p[1] == ':')
1340 int nest = 0;
1342 for (q2 = q1; *q2 != '\0'; ++q2)
1344 if (*q2 == '<')
1345 ++nest;
1346 else if (*q2 == '>')
1347 --nest;
1348 else if (*q2 == ':' && nest == 0)
1349 break;
1351 p = q2;
1352 if (*p != ':')
1354 bad_stab (orig);
1355 return DEBUG_TYPE_NULL;
1359 /* Some versions of g++ can emit stabs like
1360 fleep:T20=xsfleep:
1361 which define structures in terms of themselves. We need to
1362 tell the caller to avoid building a circular structure. */
1363 if (type_name != NULL
1364 && strncmp (type_name, *pp, p - *pp) == 0
1365 && type_name[p - *pp] == '\0')
1366 info->self_crossref = true;
1368 dtype = stab_find_tagged_type (dhandle, info, *pp, p - *pp, code);
1370 *pp = p + 1;
1372 break;
1374 case '-':
1375 case '0':
1376 case '1':
1377 case '2':
1378 case '3':
1379 case '4':
1380 case '5':
1381 case '6':
1382 case '7':
1383 case '8':
1384 case '9':
1385 case '(':
1387 const char *hold;
1388 int xtypenums[2];
1390 /* This type is defined as another type. */
1391 (*pp)--;
1392 hold = *pp;
1394 /* Peek ahead at the number to detect void. */
1395 if (! parse_stab_type_number (pp, xtypenums, p_end))
1396 return DEBUG_TYPE_NULL;
1398 if (typenums[0] == xtypenums[0] && typenums[1] == xtypenums[1])
1400 /* This type is being defined as itself, which means that
1401 it is void. */
1402 dtype = debug_make_void_type (dhandle);
1404 else
1406 *pp = hold;
1408 /* Go back to the number and have parse_stab_type get it.
1409 This means that we can deal with something like
1410 t(1,2)=(3,4)=... which the Lucid compiler uses. */
1411 dtype = parse_stab_type (dhandle, info, (const char *) NULL,
1412 pp, (debug_type **) NULL, p_end);
1413 if (dtype == DEBUG_TYPE_NULL)
1414 return DEBUG_TYPE_NULL;
1417 if (typenums[0] != -1)
1419 if (! stab_record_type (dhandle, info, typenums, dtype))
1420 return DEBUG_TYPE_NULL;
1423 break;
1426 case '*':
1427 dtype = debug_make_pointer_type (dhandle,
1428 parse_stab_type (dhandle, info,
1429 (const char *) NULL,
1431 (debug_type **) NULL,
1432 p_end));
1433 break;
1435 case '&':
1436 /* Reference to another type. */
1437 dtype = (debug_make_reference_type
1438 (dhandle,
1439 parse_stab_type (dhandle, info, (const char *) NULL, pp,
1440 (debug_type **) NULL, p_end)));
1441 break;
1443 case 'f':
1444 /* Function returning another type. */
1445 /* FIXME: gdb checks os9k_stabs here. */
1446 dtype = (debug_make_function_type
1447 (dhandle,
1448 parse_stab_type (dhandle, info, (const char *) NULL, pp,
1449 (debug_type **) NULL, p_end),
1450 (debug_type *) NULL, false));
1451 break;
1453 case 'k':
1454 /* Const qualifier on some type (Sun). */
1455 /* FIXME: gdb accepts 'c' here if os9k_stabs. */
1456 dtype = debug_make_const_type (dhandle,
1457 parse_stab_type (dhandle, info,
1458 (const char *) NULL,
1460 (debug_type **) NULL,
1461 p_end));
1462 break;
1464 case 'B':
1465 /* Volatile qual on some type (Sun). */
1466 /* FIXME: gdb accepts 'i' here if os9k_stabs. */
1467 dtype = (debug_make_volatile_type
1468 (dhandle,
1469 parse_stab_type (dhandle, info, (const char *) NULL, pp,
1470 (debug_type **) NULL, p_end)));
1471 break;
1473 case '@':
1474 /* Offset (class & variable) type. This is used for a pointer
1475 relative to an object. */
1477 debug_type domain;
1478 debug_type memtype;
1480 /* Member type. */
1482 domain = parse_stab_type (dhandle, info, (const char *) NULL, pp,
1483 (debug_type **) NULL, p_end);
1484 if (domain == DEBUG_TYPE_NULL)
1485 return DEBUG_TYPE_NULL;
1487 if (**pp != ',')
1489 bad_stab (orig);
1490 return DEBUG_TYPE_NULL;
1492 ++*pp;
1494 memtype = parse_stab_type (dhandle, info, (const char *) NULL, pp,
1495 (debug_type **) NULL, p_end);
1496 if (memtype == DEBUG_TYPE_NULL)
1497 return DEBUG_TYPE_NULL;
1499 dtype = debug_make_offset_type (dhandle, domain, memtype);
1501 break;
1503 case '#':
1504 /* Method (class & fn) type. */
1505 if (**pp == '#')
1507 debug_type return_type;
1509 ++*pp;
1510 return_type = parse_stab_type (dhandle, info, (const char *) NULL,
1511 pp, (debug_type **) NULL, p_end);
1512 if (return_type == DEBUG_TYPE_NULL)
1513 return DEBUG_TYPE_NULL;
1514 if (**pp != ';')
1516 bad_stab (orig);
1517 return DEBUG_TYPE_NULL;
1519 ++*pp;
1520 dtype = debug_make_method_type (dhandle, return_type,
1521 DEBUG_TYPE_NULL,
1522 (debug_type *) NULL, false);
1524 else
1526 debug_type domain;
1527 debug_type return_type;
1528 debug_type *args, *xargs;
1529 unsigned int n;
1530 unsigned int alloc;
1531 bool varargs;
1533 domain = parse_stab_type (dhandle, info, (const char *) NULL,
1534 pp, (debug_type **) NULL, p_end);
1535 if (domain == DEBUG_TYPE_NULL)
1536 return DEBUG_TYPE_NULL;
1538 if (**pp != ',')
1540 bad_stab (orig);
1541 return DEBUG_TYPE_NULL;
1543 ++*pp;
1545 return_type = parse_stab_type (dhandle, info, (const char *) NULL,
1546 pp, (debug_type **) NULL, p_end);
1547 if (return_type == DEBUG_TYPE_NULL)
1548 return DEBUG_TYPE_NULL;
1550 alloc = 10;
1551 args = xmalloc (alloc * sizeof (*args));
1552 n = 0;
1553 while (**pp != ';')
1555 if (**pp != ',')
1557 bad_stab (orig);
1558 free (args);
1559 return DEBUG_TYPE_NULL;
1561 ++*pp;
1563 if (n + 1 >= alloc)
1565 alloc += 10;
1566 args = xrealloc (args, alloc * sizeof (*args));
1569 args[n] = parse_stab_type (dhandle, info, (const char *) NULL,
1570 pp, (debug_type **) NULL, p_end);
1571 if (args[n] == DEBUG_TYPE_NULL)
1573 free (args);
1574 return DEBUG_TYPE_NULL;
1576 ++n;
1578 ++*pp;
1580 /* If the last type is not void, then this function takes a
1581 variable number of arguments. Otherwise, we must strip
1582 the void type. */
1583 if (n == 0
1584 || debug_get_type_kind (dhandle, args[n - 1]) != DEBUG_KIND_VOID)
1585 varargs = true;
1586 else
1588 --n;
1589 varargs = false;
1592 args[n] = DEBUG_TYPE_NULL;
1593 xargs = debug_xalloc (dhandle, (n + 1) * sizeof (*args));
1594 memcpy (xargs, args, (n + 1) * sizeof (*args));
1595 free (args);
1597 dtype = debug_make_method_type (dhandle, return_type, domain, xargs,
1598 varargs);
1600 break;
1602 case 'r':
1603 /* Range type. */
1604 dtype = parse_stab_range_type (dhandle, info, type_name, pp, typenums, p_end);
1605 break;
1607 case 'b':
1608 /* FIXME: gdb checks os9k_stabs here. */
1609 /* Sun ACC builtin int type. */
1610 dtype = parse_stab_sun_builtin_type (dhandle, pp, p_end);
1611 break;
1613 case 'R':
1614 /* Sun ACC builtin float type. */
1615 dtype = parse_stab_sun_floating_type (dhandle, pp, p_end);
1616 break;
1618 case 'e':
1619 /* Enumeration type. */
1620 dtype = parse_stab_enum_type (dhandle, pp, p_end);
1621 break;
1623 case 's':
1624 case 'u':
1625 /* Struct or union type. */
1626 dtype = parse_stab_struct_type (dhandle, info, type_name, pp,
1627 descriptor == 's', typenums, p_end);
1628 break;
1630 case 'a':
1631 /* Array type. */
1632 if (**pp != 'r')
1634 bad_stab (orig);
1635 return DEBUG_TYPE_NULL;
1637 ++*pp;
1639 dtype = parse_stab_array_type (dhandle, info, pp, stringp, p_end);
1640 break;
1642 case 'S':
1643 dtype = debug_make_set_type (dhandle,
1644 parse_stab_type (dhandle, info,
1645 (const char *) NULL,
1647 (debug_type **) NULL,
1648 p_end),
1649 stringp);
1650 break;
1652 default:
1653 bad_stab (orig);
1654 return DEBUG_TYPE_NULL;
1657 if (dtype == DEBUG_TYPE_NULL)
1658 return DEBUG_TYPE_NULL;
1660 if (typenums[0] != -1)
1662 if (! stab_record_type (dhandle, info, typenums, dtype))
1663 return DEBUG_TYPE_NULL;
1666 if (size != -1)
1668 if (! debug_record_type_size (dhandle, dtype, (unsigned int) size))
1669 return DEBUG_TYPE_NULL;
1672 return dtype;
1675 /* Read a number by which a type is referred to in dbx data, or
1676 perhaps read a pair (FILENUM, TYPENUM) in parentheses. Just a
1677 single number N is equivalent to (0,N). Return the two numbers by
1678 storing them in the vector TYPENUMS. */
1680 static bool
1681 parse_stab_type_number (const char **pp, int *typenums, const char *p_end)
1683 const char *orig;
1685 orig = *pp;
1687 if (**pp != '(')
1689 typenums[0] = 0;
1690 typenums[1] = (int) parse_number (pp, (bool *) NULL, p_end);
1691 return true;
1694 ++*pp;
1695 typenums[0] = (int) parse_number (pp, (bool *) NULL, p_end);
1696 if (**pp != ',')
1698 bad_stab (orig);
1699 return false;
1702 ++*pp;
1703 typenums[1] = (int) parse_number (pp, (bool *) NULL, p_end);
1704 if (**pp != ')')
1706 bad_stab (orig);
1707 return false;
1710 ++*pp;
1711 return true;
1714 /* Parse a range type. */
1716 static debug_type
1717 parse_stab_range_type (void * dhandle,
1718 struct stab_handle * info,
1719 const char * type_name,
1720 const char ** pp,
1721 const int * typenums,
1722 const char * p_end)
1724 const char *orig;
1725 int rangenums[2];
1726 bool self_subrange;
1727 debug_type index_type;
1728 const char *s2, *s3;
1729 bfd_signed_vma n2, n3;
1730 bool ov2, ov3;
1732 orig = *pp;
1733 if (orig >= p_end)
1734 return DEBUG_TYPE_NULL;
1736 index_type = DEBUG_TYPE_NULL;
1738 /* First comes a type we are a subrange of.
1739 In C it is usually 0, 1 or the type being defined. */
1740 if (! parse_stab_type_number (pp, rangenums, p_end))
1741 return DEBUG_TYPE_NULL;
1743 self_subrange = (rangenums[0] == typenums[0]
1744 && rangenums[1] == typenums[1]);
1746 if (**pp == '=')
1748 *pp = orig;
1749 index_type = parse_stab_type (dhandle, info, (const char *) NULL,
1750 pp, (debug_type **) NULL, p_end);
1751 if (index_type == DEBUG_TYPE_NULL)
1752 return DEBUG_TYPE_NULL;
1755 if (**pp == ';')
1756 ++*pp;
1758 /* The remaining two operands are usually lower and upper bounds of
1759 the range. But in some special cases they mean something else. */
1760 s2 = *pp;
1761 n2 = parse_number (pp, &ov2, p_end);
1762 if (**pp != ';')
1764 bad_stab (orig);
1765 return DEBUG_TYPE_NULL;
1767 ++*pp;
1769 s3 = *pp;
1770 n3 = parse_number (pp, &ov3, p_end);
1771 if (**pp != ';')
1773 bad_stab (orig);
1774 return DEBUG_TYPE_NULL;
1776 ++*pp;
1778 if (ov2 || ov3)
1780 /* gcc will emit range stabs for long long types. Handle this
1781 as a special case. FIXME: This needs to be more general. */
1782 #define LLLOW "01000000000000000000000;"
1783 #define LLHIGH "0777777777777777777777;"
1784 #define ULLHIGH "01777777777777777777777;"
1785 if (index_type == DEBUG_TYPE_NULL)
1787 if (startswith (s2, LLLOW)
1788 && startswith (s3, LLHIGH))
1789 return debug_make_int_type (dhandle, 8, false);
1790 if (! ov2
1791 && n2 == 0
1792 && startswith (s3, ULLHIGH))
1793 return debug_make_int_type (dhandle, 8, true);
1796 warn_stab (orig, _("numeric overflow"));
1799 if (index_type == DEBUG_TYPE_NULL)
1801 /* A type defined as a subrange of itself, with both bounds 0,
1802 is void. */
1803 if (self_subrange && n2 == 0 && n3 == 0)
1804 return debug_make_void_type (dhandle);
1806 /* A type defined as a subrange of itself, with n2 positive and
1807 n3 zero, is a complex type, and n2 is the number of bytes. */
1808 if (self_subrange && n3 == 0 && n2 > 0)
1809 return debug_make_complex_type (dhandle, n2);
1811 /* If n3 is zero and n2 is positive, this is a floating point
1812 type, and n2 is the number of bytes. */
1813 if (n3 == 0 && n2 > 0)
1814 return debug_make_float_type (dhandle, n2);
1816 /* If the upper bound is -1, this is an unsigned int. */
1817 if (n2 == 0 && n3 == -1)
1819 /* When gcc is used with -gstabs, but not -gstabs+, it will emit
1820 long long int:t6=r1;0;-1;
1821 long long unsigned int:t7=r1;0;-1;
1822 We hack here to handle this reasonably. */
1823 if (type_name != NULL)
1825 if (strcmp (type_name, "long long int") == 0)
1826 return debug_make_int_type (dhandle, 8, false);
1827 else if (strcmp (type_name, "long long unsigned int") == 0)
1828 return debug_make_int_type (dhandle, 8, true);
1830 /* FIXME: The size here really depends upon the target. */
1831 return debug_make_int_type (dhandle, 4, true);
1834 /* A range of 0 to 127 is char. */
1835 if (self_subrange && n2 == 0 && n3 == 127)
1836 return debug_make_int_type (dhandle, 1, false);
1838 /* FIXME: gdb checks for the language CHILL here. */
1840 if (n2 == 0)
1842 if (n3 < 0)
1843 return debug_make_int_type (dhandle, - n3, true);
1844 else if (n3 == 0xff)
1845 return debug_make_int_type (dhandle, 1, true);
1846 else if (n3 == 0xffff)
1847 return debug_make_int_type (dhandle, 2, true);
1848 else if (n3 == (bfd_signed_vma) 0xffffffff)
1849 return debug_make_int_type (dhandle, 4, true);
1850 #ifdef BFD64
1851 else if (n3 == (bfd_signed_vma) 0xffffffffffffffffLL)
1852 return debug_make_int_type (dhandle, 8, true);
1853 #endif
1855 else if (n3 == 0
1856 && n2 < 0
1857 && (self_subrange || n2 == -8))
1858 return debug_make_int_type (dhandle, - n2, true);
1859 else if (n2 == - n3 - 1 || n2 == n3 + 1)
1861 if (n3 == 0x7f)
1862 return debug_make_int_type (dhandle, 1, false);
1863 else if (n3 == 0x7fff)
1864 return debug_make_int_type (dhandle, 2, false);
1865 else if (n3 == 0x7fffffff)
1866 return debug_make_int_type (dhandle, 4, false);
1867 #ifdef BFD64
1868 else if (n3 == ((((bfd_vma) 0x7fffffff) << 32) | 0xffffffff))
1869 return debug_make_int_type (dhandle, 8, false);
1870 #endif
1874 /* At this point I don't have the faintest idea how to deal with a
1875 self_subrange type; I'm going to assume that this is used as an
1876 idiom, and that all of them are special cases. So . . . */
1877 if (self_subrange)
1879 bad_stab (orig);
1880 return DEBUG_TYPE_NULL;
1883 index_type = stab_find_type (dhandle, info, rangenums);
1884 if (index_type == DEBUG_TYPE_NULL)
1886 /* Does this actually ever happen? Is that why we are worrying
1887 about dealing with it rather than just calling error_type? */
1888 warn_stab (orig, _("missing index type"));
1889 index_type = debug_make_int_type (dhandle, 4, false);
1892 return debug_make_range_type (dhandle, index_type, n2, n3);
1895 /* Sun's ACC uses a somewhat saner method for specifying the builtin
1896 typedefs in every file (for int, long, etc):
1898 type = b <signed> <width>; <offset>; <nbits>
1899 signed = u or s. Possible c in addition to u or s (for char?).
1900 offset = offset from high order bit to start bit of type.
1901 width is # bytes in object of this type, nbits is # bits in type.
1903 The width/offset stuff appears to be for small objects stored in
1904 larger ones (e.g. `shorts' in `int' registers). We ignore it for now,
1905 FIXME. */
1907 static debug_type
1908 parse_stab_sun_builtin_type (void *dhandle, const char **pp, const char * p_end)
1910 const char *orig;
1911 bool unsignedp;
1912 bfd_vma bits;
1914 orig = *pp;
1915 if (orig >= p_end)
1916 return DEBUG_TYPE_NULL;
1918 switch (**pp)
1920 case 's':
1921 unsignedp = false;
1922 break;
1923 case 'u':
1924 unsignedp = true;
1925 break;
1926 default:
1927 bad_stab (orig);
1928 return DEBUG_TYPE_NULL;
1930 ++*pp;
1932 /* OpenSolaris source code indicates that one of "cbv" characters
1933 can come next and specify the intrinsic 'iformat' encoding.
1934 'c' is character encoding, 'b' is boolean encoding, and 'v' is
1935 varargs encoding. This field can be safely ignored because
1936 the type of the field is determined from the bitwidth extracted
1937 below. */
1938 if (**pp == 'c' || **pp == 'b' || **pp == 'v')
1939 ++*pp;
1941 /* The first number appears to be the number of bytes occupied
1942 by this type, except that unsigned short is 4 instead of 2.
1943 Since this information is redundant with the third number,
1944 we will ignore it. */
1945 (void) parse_number (pp, (bool *) NULL, p_end);
1946 if (**pp != ';')
1948 bad_stab (orig);
1949 return DEBUG_TYPE_NULL;
1951 ++*pp;
1953 /* The second number is always 0, so ignore it too. */
1954 (void) parse_number (pp, (bool *) NULL, p_end);
1955 if (**pp != ';')
1957 bad_stab (orig);
1958 return DEBUG_TYPE_NULL;
1960 ++*pp;
1962 /* The third number is the number of bits for this type. */
1963 bits = parse_number (pp, (bool *) NULL, p_end);
1965 /* The type *should* end with a semicolon. If it are embedded
1966 in a larger type the semicolon may be the only way to know where
1967 the type ends. If this type is at the end of the stabstring we
1968 can deal with the omitted semicolon (but we don't have to like
1969 it). Don't bother to complain(), Sun's compiler omits the semicolon
1970 for "void". */
1971 if (**pp == ';')
1972 ++*pp;
1974 if (bits == 0)
1975 return debug_make_void_type (dhandle);
1977 return debug_make_int_type (dhandle, bits / 8, unsignedp);
1980 /* Parse a builtin floating type generated by the Sun compiler. */
1982 static debug_type
1983 parse_stab_sun_floating_type (void *dhandle, const char **pp, const char *p_end)
1985 const char *orig;
1986 bfd_vma details;
1987 bfd_vma bytes;
1989 orig = *pp;
1990 if (orig >= p_end)
1991 return DEBUG_TYPE_NULL;
1993 /* The first number has more details about the type, for example
1994 FN_COMPLEX. */
1995 details = parse_number (pp, (bool *) NULL, p_end);
1996 if (**pp != ';')
1998 bad_stab (orig);
1999 return DEBUG_TYPE_NULL;
2002 /* The second number is the number of bytes occupied by this type */
2003 bytes = parse_number (pp, (bool *) NULL, p_end);
2004 if (**pp != ';')
2006 bad_stab (orig);
2007 return DEBUG_TYPE_NULL;
2010 if (details == NF_COMPLEX
2011 || details == NF_COMPLEX16
2012 || details == NF_COMPLEX32)
2013 return debug_make_complex_type (dhandle, bytes);
2015 return debug_make_float_type (dhandle, bytes);
2018 /* Handle an enum type. */
2020 static debug_type
2021 parse_stab_enum_type (void *dhandle, const char **pp, const char * p_end)
2023 const char *orig;
2024 const char **names, **xnames;
2025 bfd_signed_vma *values, *xvalues;
2026 unsigned int n;
2027 unsigned int alloc;
2029 orig = *pp;
2030 if (orig >= p_end)
2031 return DEBUG_TYPE_NULL;
2033 /* FIXME: gdb checks os9k_stabs here. */
2035 /* The aix4 compiler emits an extra field before the enum members;
2036 my guess is it's a type of some sort. Just ignore it. */
2037 if (**pp == '-')
2039 while (**pp != ':' && **pp != 0)
2040 ++*pp;
2042 if (**pp == 0)
2044 bad_stab (orig);
2045 return DEBUG_TYPE_NULL;
2047 ++*pp;
2050 /* Read the value-names and their values.
2051 The input syntax is NAME:VALUE,NAME:VALUE, and so on.
2052 A semicolon or comma instead of a NAME means the end. */
2053 alloc = 10;
2054 names = xmalloc (alloc * sizeof (*names));
2055 values = xmalloc (alloc * sizeof (*values));
2056 n = 0;
2057 while (**pp != '\0' && **pp != ';' && **pp != ',')
2059 const char *p;
2060 char *name;
2061 bfd_signed_vma val;
2063 p = *pp;
2064 while (*p != ':' && *p != 0)
2065 ++p;
2067 if (*p == 0)
2069 bad_stab (orig);
2070 free (names);
2071 free (values);
2072 return DEBUG_TYPE_NULL;
2075 name = savestring (dhandle, *pp, p - *pp);
2077 *pp = p + 1;
2078 val = (bfd_signed_vma) parse_number (pp, (bool *) NULL, p_end);
2079 if (**pp != ',')
2081 bad_stab (orig);
2082 free (names);
2083 free (values);
2084 return DEBUG_TYPE_NULL;
2086 ++*pp;
2088 if (n + 1 >= alloc)
2090 alloc += 10;
2091 names = xrealloc (names, alloc * sizeof (*names));
2092 values = xrealloc (values, alloc * sizeof (*values));
2095 names[n] = name;
2096 values[n] = val;
2097 ++n;
2100 names[n] = NULL;
2101 values[n] = 0;
2102 xnames = debug_xalloc (dhandle, (n + 1) * sizeof (*names));
2103 memcpy (xnames, names, (n + 1) * sizeof (*names));
2104 free (names);
2105 xvalues = debug_xalloc (dhandle, (n + 1) * sizeof (*names));
2106 memcpy (xvalues, values, (n + 1) * sizeof (*names));
2107 free (values);
2109 if (**pp == ';')
2110 ++*pp;
2112 return debug_make_enum_type (dhandle, xnames, xvalues);
2115 /* Read the description of a structure (or union type) and return an object
2116 describing the type.
2118 PP points to a character pointer that points to the next unconsumed token
2119 in the stabs string. For example, given stabs "A:T4=s4a:1,0,32;;",
2120 *PP will point to "4a:1,0,32;;". */
2122 static debug_type
2123 parse_stab_struct_type (void *dhandle,
2124 struct stab_handle *info,
2125 const char *tagname,
2126 const char **pp,
2127 bool structp,
2128 const int *typenums,
2129 const char *p_end)
2131 bfd_vma size;
2132 debug_baseclass *baseclasses;
2133 debug_field *fields = NULL;
2134 bool statics;
2135 debug_method *methods;
2136 debug_type vptrbase;
2137 bool ownvptr;
2139 /* Get the size. */
2140 size = parse_number (pp, (bool *) NULL, p_end);
2142 /* Get the other information. */
2143 if (! parse_stab_baseclasses (dhandle, info, pp, &baseclasses, p_end)
2144 || ! parse_stab_struct_fields (dhandle, info, pp, &fields, &statics, p_end)
2145 || ! parse_stab_members (dhandle, info, tagname, pp, typenums, &methods, p_end)
2146 || ! parse_stab_tilde_field (dhandle, info, pp, typenums, &vptrbase,
2147 &ownvptr, p_end))
2148 return DEBUG_TYPE_NULL;
2150 if (! statics
2151 && baseclasses == NULL
2152 && methods == NULL
2153 && vptrbase == DEBUG_TYPE_NULL
2154 && ! ownvptr)
2155 return debug_make_struct_type (dhandle, structp, size, fields);
2157 return debug_make_object_type (dhandle, structp, size, fields, baseclasses,
2158 methods, vptrbase, ownvptr);
2161 /* The stabs for C++ derived classes contain baseclass information which
2162 is marked by a '!' character after the total size. This function is
2163 called when we encounter the baseclass marker, and slurps up all the
2164 baseclass information.
2166 Immediately following the '!' marker is the number of base classes that
2167 the class is derived from, followed by information for each base class.
2168 For each base class, there are two visibility specifiers, a bit offset
2169 to the base class information within the derived class, a reference to
2170 the type for the base class, and a terminating semicolon.
2172 A typical example, with two base classes, would be "!2,020,19;0264,21;".
2173 ^^ ^ ^ ^ ^ ^ ^
2174 Baseclass information marker __________________|| | | | | | |
2175 Number of baseclasses __________________________| | | | | | |
2176 Visibility specifiers (2) ________________________| | | | | |
2177 Offset in bits from start of class _________________| | | | |
2178 Type number for base class ___________________________| | | |
2179 Visibility specifiers (2) _______________________________| | |
2180 Offset in bits from start of class ________________________| |
2181 Type number of base class ____________________________________|
2183 Return TRUE for success, FALSE for failure. */
2185 static bool
2186 parse_stab_baseclasses (void * dhandle,
2187 struct stab_handle * info,
2188 const char ** pp,
2189 debug_baseclass ** retp,
2190 const char * p_end)
2192 const char *orig;
2193 unsigned int c, i;
2194 debug_baseclass *classes;
2196 *retp = NULL;
2198 orig = *pp;
2199 if (orig >= p_end)
2200 return false;
2202 if (**pp != '!')
2204 /* No base classes. */
2205 return true;
2207 ++*pp;
2209 c = (unsigned int) parse_number (pp, (bool *) NULL, p_end);
2211 if (**pp != ',')
2213 bad_stab (orig);
2214 return false;
2216 ++*pp;
2218 classes = debug_xalloc (dhandle, (c + 1) * sizeof (*classes));
2220 for (i = 0; i < c; i++)
2222 bool is_virtual;
2223 enum debug_visibility visibility;
2224 bfd_vma bitpos;
2225 debug_type type;
2227 switch (**pp)
2229 case '0':
2230 is_virtual = false;
2231 break;
2232 case '1':
2233 is_virtual = true;
2234 break;
2235 case 0:
2236 bad_stab (orig);
2237 return false;
2238 default:
2239 warn_stab (orig, _("unknown virtual character for baseclass"));
2240 is_virtual = false;
2241 break;
2243 ++*pp;
2245 switch (**pp)
2247 case '0':
2248 visibility = DEBUG_VISIBILITY_PRIVATE;
2249 break;
2250 case '1':
2251 visibility = DEBUG_VISIBILITY_PROTECTED;
2252 break;
2253 case '2':
2254 visibility = DEBUG_VISIBILITY_PUBLIC;
2255 break;
2256 case 0:
2257 bad_stab (orig);
2258 return false;
2259 default:
2260 warn_stab (orig, _("unknown visibility character for baseclass"));
2261 visibility = DEBUG_VISIBILITY_PUBLIC;
2262 break;
2264 ++*pp;
2266 /* The remaining value is the bit offset of the portion of the
2267 object corresponding to this baseclass. Always zero in the
2268 absence of multiple inheritance. */
2269 bitpos = parse_number (pp, (bool *) NULL, p_end);
2270 if (**pp != ',')
2272 bad_stab (orig);
2273 return false;
2275 ++*pp;
2277 type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2278 (debug_type **) NULL, p_end);
2279 if (type == DEBUG_TYPE_NULL)
2280 return false;
2282 classes[i] = debug_make_baseclass (dhandle, type, bitpos, is_virtual,
2283 visibility);
2284 if (classes[i] == DEBUG_BASECLASS_NULL)
2285 return false;
2287 if (**pp != ';')
2288 return false;
2289 ++*pp;
2292 classes[i] = DEBUG_BASECLASS_NULL;
2294 *retp = classes;
2296 return true;
2299 /* Read struct or class data fields. They have the form:
2301 NAME : [VISIBILITY] TYPENUM , BITPOS , BITSIZE ;
2303 At the end, we see a semicolon instead of a field.
2305 In C++, this may wind up being NAME:?TYPENUM:PHYSNAME; for
2306 a static field.
2308 The optional VISIBILITY is one of:
2310 '/0' (VISIBILITY_PRIVATE)
2311 '/1' (VISIBILITY_PROTECTED)
2312 '/2' (VISIBILITY_PUBLIC)
2313 '/9' (VISIBILITY_IGNORE)
2315 or nothing, for C style fields with public visibility.
2317 Returns 1 for success, 0 for failure. */
2319 static bool
2320 parse_stab_struct_fields (void *dhandle,
2321 struct stab_handle *info,
2322 const char **pp,
2323 debug_field **retp,
2324 bool *staticsp,
2325 const char * p_end)
2327 const char *orig;
2328 const char *p;
2329 debug_field *fields, *xfields;
2330 unsigned int c;
2331 unsigned int alloc;
2333 *retp = NULL;
2334 *staticsp = false;
2336 orig = *pp;
2337 if (orig >= p_end)
2338 return false;
2340 c = 0;
2341 alloc = 10;
2342 fields = xmalloc (alloc * sizeof (*fields));
2343 while (**pp != ';')
2345 /* FIXME: gdb checks os9k_stabs here. */
2347 p = *pp;
2349 /* Add 1 to c to leave room for NULL pointer at end. */
2350 if (c + 1 >= alloc)
2352 alloc += 10;
2353 fields = xrealloc (fields, alloc * sizeof (*fields));
2356 /* If it starts with CPLUS_MARKER it is a special abbreviation,
2357 unless the CPLUS_MARKER is followed by an underscore, in
2358 which case it is just the name of an anonymous type, which we
2359 should handle like any other type name. We accept either '$'
2360 or '.', because a field name can never contain one of these
2361 characters except as a CPLUS_MARKER. */
2363 if ((*p == '$' || *p == '.') && p[1] != '_')
2365 ++*pp;
2366 if (! parse_stab_cpp_abbrev (dhandle, info, pp, fields + c, p_end))
2368 free (fields);
2369 return false;
2371 ++c;
2372 continue;
2375 /* Look for the ':' that separates the field name from the field
2376 values. Data members are delimited by a single ':', while member
2377 functions are delimited by a pair of ':'s. When we hit the member
2378 functions (if any), terminate scan loop and return. */
2380 p = strchr (p, ':');
2381 if (p == NULL)
2383 bad_stab (orig);
2384 free (fields);
2385 return false;
2388 if (p[1] == ':')
2389 break;
2391 if (! parse_stab_one_struct_field (dhandle, info, pp, p, fields + c,
2392 staticsp, p_end))
2394 free (fields);
2395 return false;
2398 ++c;
2401 fields[c] = DEBUG_FIELD_NULL;
2402 xfields = debug_xalloc (dhandle, (c + 1) * sizeof (*fields));
2403 memcpy (xfields, fields, (c + 1) * sizeof (*fields));
2404 free (fields);
2406 *retp = xfields;
2408 return true;
2411 /* Special GNU C++ name. */
2413 static bool
2414 parse_stab_cpp_abbrev (void * dhandle,
2415 struct stab_handle * info,
2416 const char ** pp,
2417 debug_field * retp,
2418 const char * p_end)
2420 const char *orig;
2421 int cpp_abbrev;
2422 debug_type context;
2423 const char *name;
2424 const char *type_name;
2425 debug_type type;
2426 bfd_vma bitpos;
2427 size_t len;
2429 *retp = DEBUG_FIELD_NULL;
2431 orig = *pp;
2432 if (orig >= p_end)
2433 return false;
2435 if (**pp != 'v')
2437 bad_stab (*pp);
2438 return false;
2440 ++*pp;
2442 cpp_abbrev = **pp;
2443 if (cpp_abbrev == 0)
2445 bad_stab (orig);
2446 return false;
2448 ++*pp;
2450 /* At this point, *pp points to something like "22:23=*22...", where
2451 the type number before the ':' is the "context" and everything
2452 after is a regular type definition. Lookup the type, find it's
2453 name, and construct the field name. */
2455 context = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2456 (debug_type **) NULL, p_end);
2457 if (context == DEBUG_TYPE_NULL)
2458 return false;
2460 switch (cpp_abbrev)
2462 case 'f':
2463 /* $vf -- a virtual function table pointer. */
2464 name = "_vptr$";
2465 break;
2466 case 'b':
2467 /* $vb -- a virtual bsomethingorother */
2468 type_name = debug_get_type_name (dhandle, context);
2469 if (type_name == NULL)
2471 warn_stab (orig, _("unnamed $vb type"));
2472 type_name = "FOO";
2474 len = strlen (type_name);
2475 name = debug_xalloc (dhandle, len + sizeof ("_vb$"));
2476 memcpy ((char *) name, "_vb$", sizeof ("_vb$") - 1);
2477 memcpy ((char *) name + sizeof ("_vb$") - 1, type_name, len + 1);
2478 break;
2479 default:
2480 warn_stab (orig, _("unrecognized C++ abbreviation"));
2481 name = "INVALID_CPLUSPLUS_ABBREV";
2482 break;
2485 if (**pp != ':')
2487 bad_stab (orig);
2488 return false;
2490 ++*pp;
2492 type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2493 (debug_type **) NULL, p_end);
2494 if (**pp != ',')
2496 bad_stab (orig);
2497 return false;
2499 ++*pp;
2501 bitpos = parse_number (pp, (bool *) NULL, p_end);
2502 if (**pp != ';')
2504 bad_stab (orig);
2505 return false;
2507 ++*pp;
2509 *retp = debug_make_field (dhandle, name, type, bitpos, 0,
2510 DEBUG_VISIBILITY_PRIVATE);
2511 if (*retp == DEBUG_FIELD_NULL)
2512 return false;
2514 return true;
2517 /* Parse a single field in a struct or union. */
2519 static bool
2520 parse_stab_one_struct_field (void *dhandle,
2521 struct stab_handle *info,
2522 const char **pp,
2523 const char *p,
2524 debug_field *retp,
2525 bool *staticsp,
2526 const char *p_end)
2528 const char *orig;
2529 char *name;
2530 enum debug_visibility visibility;
2531 debug_type type;
2532 bfd_vma bitpos;
2533 bfd_vma bitsize;
2535 orig = *pp;
2536 if (orig >= p_end)
2537 return false;
2539 /* FIXME: gdb checks ARM_DEMANGLING here. */
2541 name = savestring (dhandle, *pp, p - *pp);
2543 *pp = p + 1;
2545 if (**pp != '/')
2546 visibility = DEBUG_VISIBILITY_PUBLIC;
2547 else
2549 ++*pp;
2550 switch (**pp)
2552 case '0':
2553 visibility = DEBUG_VISIBILITY_PRIVATE;
2554 break;
2555 case '1':
2556 visibility = DEBUG_VISIBILITY_PROTECTED;
2557 break;
2558 case '2':
2559 visibility = DEBUG_VISIBILITY_PUBLIC;
2560 break;
2561 case 0:
2562 bad_stab (orig);
2563 return false;
2564 default:
2565 warn_stab (orig, _("unknown visibility character for field"));
2566 visibility = DEBUG_VISIBILITY_PUBLIC;
2567 break;
2569 ++*pp;
2572 type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2573 (debug_type **) NULL, p_end);
2574 if (type == DEBUG_TYPE_NULL)
2575 return false;
2577 if (**pp == ':')
2579 char *varname;
2581 /* This is a static class member. */
2582 ++*pp;
2583 p = strchr (*pp, ';');
2584 if (p == NULL)
2586 bad_stab (orig);
2587 return false;
2590 varname = savestring (dhandle, *pp, p - *pp);
2592 *pp = p + 1;
2594 *retp = debug_make_static_member (dhandle, name, type, varname,
2595 visibility);
2596 *staticsp = true;
2598 return true;
2601 if (**pp != ',')
2603 bad_stab (orig);
2604 return false;
2606 ++*pp;
2608 bitpos = parse_number (pp, (bool *) NULL, p_end);
2609 if (**pp != ',')
2611 bad_stab (orig);
2612 return false;
2614 ++*pp;
2616 bitsize = parse_number (pp, (bool *) NULL, p_end);
2617 if (**pp != ';')
2619 bad_stab (orig);
2620 return false;
2622 ++*pp;
2624 if (bitpos == 0 && bitsize == 0)
2626 /* This can happen in two cases: (1) at least for gcc 2.4.5 or
2627 so, it is a field which has been optimized out. The correct
2628 stab for this case is to use VISIBILITY_IGNORE, but that is a
2629 recent invention. (2) It is a 0-size array. For example
2630 union { int num; char str[0]; } foo. Printing "<no value>"
2631 for str in "p foo" is OK, since foo.str (and thus foo.str[3])
2632 will continue to work, and a 0-size array as a whole doesn't
2633 have any contents to print.
2635 I suspect this probably could also happen with gcc -gstabs
2636 (not -gstabs+) for static fields, and perhaps other C++
2637 extensions. Hopefully few people use -gstabs with gdb, since
2638 it is intended for dbx compatibility. */
2639 visibility = DEBUG_VISIBILITY_IGNORE;
2642 /* FIXME: gdb does some stuff here to mark fields as unpacked. */
2644 *retp = debug_make_field (dhandle, name, type, bitpos, bitsize, visibility);
2646 return true;
2649 /* Read member function stabs info for C++ classes. The form of each member
2650 function data is:
2652 NAME :: TYPENUM[=type definition] ARGS : PHYSNAME ;
2654 An example with two member functions is:
2656 afunc1::20=##15;:i;2A.;afunc2::20:i;2A.;
2658 For the case of overloaded operators, the format is op$::*.funcs, where
2659 $ is the CPLUS_MARKER (usually '$'), `*' holds the place for an operator
2660 name (such as `+=') and `.' marks the end of the operator name. */
2662 static bool
2663 parse_stab_members (void * dhandle,
2664 struct stab_handle * info,
2665 const char * tagname,
2666 const char ** pp,
2667 const int * typenums,
2668 debug_method ** retp,
2669 const char * p_end)
2671 const char *orig;
2672 debug_method *methods, *xmethods;
2673 unsigned int c;
2674 unsigned int alloc;
2675 char *name = NULL;
2676 debug_method_variant *variants = NULL, *xvariants;
2677 char *argtypes = NULL;
2679 *retp = NULL;
2681 orig = *pp;
2682 if (orig >= p_end)
2683 return false;
2685 alloc = 0;
2686 methods = NULL;
2687 c = 0;
2689 while (**pp != ';')
2691 const char *p;
2692 unsigned int cvars;
2693 unsigned int allocvars;
2694 debug_type look_ahead_type;
2696 p = strchr (*pp, ':');
2697 if (p == NULL || p[1] != ':')
2698 break;
2700 /* FIXME: Some systems use something other than '$' here. */
2701 if ((*pp)[0] != 'o' || (*pp)[1] != 'p' || (*pp)[2] != '$')
2703 name = savestring (dhandle, *pp, p - *pp);
2704 *pp = p + 2;
2706 else
2708 /* This is a completely weird case. In order to stuff in the
2709 names that might contain colons (the usual name delimiter),
2710 Mike Tiemann defined a different name format which is
2711 signalled if the identifier is "op$". In that case, the
2712 format is "op$::XXXX." where XXXX is the name. This is
2713 used for names like "+" or "=". YUUUUUUUK! FIXME! */
2714 *pp = p + 2;
2715 for (p = *pp; *p != '.' && *p != '\0'; p++)
2717 if (*p != '.')
2719 bad_stab (orig);
2720 goto fail;
2722 name = savestring (dhandle, *pp, p - *pp);
2723 *pp = p + 1;
2726 allocvars = 10;
2727 variants = xmalloc (allocvars * sizeof (*variants));
2728 cvars = 0;
2730 look_ahead_type = DEBUG_TYPE_NULL;
2734 debug_type type;
2735 bool stub;
2736 enum debug_visibility visibility;
2737 bool constp, volatilep, staticp;
2738 bfd_vma voffset;
2739 debug_type context;
2740 const char *physname;
2741 bool varargs;
2743 if (look_ahead_type != DEBUG_TYPE_NULL)
2745 /* g++ version 1 kludge */
2746 type = look_ahead_type;
2747 look_ahead_type = DEBUG_TYPE_NULL;
2749 else
2751 type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2752 (debug_type **) NULL, p_end);
2753 if (type == DEBUG_TYPE_NULL)
2754 goto fail;
2756 if (**pp != ':')
2758 bad_stab (orig);
2759 goto fail;
2763 ++*pp;
2764 p = strchr (*pp, ';');
2765 if (p == NULL)
2767 bad_stab (orig);
2768 goto fail;
2771 stub = false;
2772 if (debug_get_type_kind (dhandle, type) == DEBUG_KIND_METHOD
2773 && debug_get_parameter_types (dhandle, type, &varargs) == NULL)
2774 stub = true;
2776 argtypes = savestring (dhandle, *pp, p - *pp);
2777 *pp = p + 1;
2779 switch (**pp)
2781 case '0':
2782 visibility = DEBUG_VISIBILITY_PRIVATE;
2783 break;
2784 case '1':
2785 visibility = DEBUG_VISIBILITY_PROTECTED;
2786 break;
2787 case 0:
2788 bad_stab (orig);
2789 goto fail;
2790 default:
2791 visibility = DEBUG_VISIBILITY_PUBLIC;
2792 break;
2794 ++*pp;
2796 constp = false;
2797 volatilep = false;
2798 switch (**pp)
2800 case 'A':
2801 /* Normal function. */
2802 ++*pp;
2803 break;
2804 case 'B':
2805 /* const member function. */
2806 constp = true;
2807 ++*pp;
2808 break;
2809 case 'C':
2810 /* volatile member function. */
2811 volatilep = true;
2812 ++*pp;
2813 break;
2814 case 'D':
2815 /* const volatile member function. */
2816 constp = true;
2817 volatilep = true;
2818 ++*pp;
2819 break;
2820 case '*':
2821 case '?':
2822 case '.':
2823 /* File compiled with g++ version 1; no information. */
2824 break;
2825 default:
2826 warn_stab (orig, _("const/volatile indicator missing"));
2827 break;
2830 staticp = false;
2831 switch (**pp)
2833 case '*':
2834 /* virtual member function, followed by index. The sign
2835 bit is supposedly set to distinguish
2836 pointers-to-methods from virtual function indices. */
2837 ++*pp;
2838 voffset = parse_number (pp, (bool *) NULL, p_end);
2839 if (**pp != ';')
2841 bad_stab (orig);
2842 goto fail;
2844 ++*pp;
2845 voffset &= 0x7fffffff;
2847 if (**pp == ';' || **pp == '\0')
2849 /* Must be g++ version 1. */
2850 context = DEBUG_TYPE_NULL;
2852 else
2854 /* Figure out from whence this virtual function
2855 came. It may belong to virtual function table of
2856 one of its baseclasses. */
2857 look_ahead_type = parse_stab_type (dhandle, info,
2858 (const char *) NULL,
2860 (debug_type **) NULL,
2861 p_end);
2862 if (**pp == ':')
2864 /* g++ version 1 overloaded methods. */
2865 context = DEBUG_TYPE_NULL;
2867 else
2869 context = look_ahead_type;
2870 look_ahead_type = DEBUG_TYPE_NULL;
2871 if (**pp != ';')
2873 bad_stab (orig);
2874 goto fail;
2876 ++*pp;
2879 break;
2881 case '?':
2882 /* static member function. */
2883 ++*pp;
2884 staticp = true;
2885 voffset = 0;
2886 context = DEBUG_TYPE_NULL;
2887 if (strncmp (argtypes, name, strlen (name)) != 0)
2888 stub = true;
2889 break;
2891 default:
2892 warn_stab (orig, "member function type missing");
2893 voffset = 0;
2894 context = DEBUG_TYPE_NULL;
2895 break;
2897 case '.':
2898 ++*pp;
2899 voffset = 0;
2900 context = DEBUG_TYPE_NULL;
2901 break;
2904 /* If the type is not a stub, then the argtypes string is
2905 the physical name of the function. Otherwise the
2906 argtypes string is the mangled form of the argument
2907 types, and the full type and the physical name must be
2908 extracted from them. */
2909 physname = argtypes;
2910 if (stub)
2912 debug_type class_type, return_type;
2914 class_type = stab_find_type (dhandle, info, typenums);
2915 if (class_type == DEBUG_TYPE_NULL)
2916 goto fail;
2917 return_type = debug_get_return_type (dhandle, type);
2918 if (return_type == DEBUG_TYPE_NULL)
2920 bad_stab (orig);
2921 goto fail;
2923 type = parse_stab_argtypes (dhandle, info, class_type, name,
2924 tagname, return_type, argtypes,
2925 constp, volatilep, &physname);
2926 if (type == DEBUG_TYPE_NULL)
2927 goto fail;
2930 if (cvars + 1 >= allocvars)
2932 allocvars += 10;
2933 variants = xrealloc (variants, allocvars * sizeof (*variants));
2936 if (! staticp)
2937 variants[cvars] = debug_make_method_variant (dhandle, physname,
2938 type, visibility,
2939 constp, volatilep,
2940 voffset, context);
2941 else
2942 variants[cvars] = debug_make_static_method_variant (dhandle,
2943 physname,
2944 type,
2945 visibility,
2946 constp,
2947 volatilep);
2948 if (variants[cvars] == DEBUG_METHOD_VARIANT_NULL)
2949 goto fail;
2951 ++cvars;
2953 while (**pp != ';' && **pp != '\0');
2955 variants[cvars] = DEBUG_METHOD_VARIANT_NULL;
2956 xvariants = debug_xalloc (dhandle, (cvars + 1) * sizeof (*variants));
2957 memcpy (xvariants, variants, (cvars + 1) * sizeof (*variants));
2958 free (variants);
2960 if (**pp != '\0')
2961 ++*pp;
2963 if (c + 1 >= alloc)
2965 alloc += 10;
2966 methods = xrealloc (methods, alloc * sizeof (*methods));
2969 methods[c] = debug_make_method (dhandle, name, xvariants);
2971 ++c;
2974 xmethods = methods;
2975 if (methods != NULL)
2977 methods[c] = DEBUG_METHOD_NULL;
2978 xmethods = debug_xalloc (dhandle, (c + 1) * sizeof (*methods));
2979 memcpy (xmethods, methods, (c + 1) * sizeof (*methods));
2980 free (methods);
2983 *retp = xmethods;
2985 return true;
2987 fail:
2988 free (variants);
2989 free (methods);
2990 return false;
2993 /* Parse a string representing argument types for a method. Stabs
2994 tries to save space by packing argument types into a mangled
2995 string. This string should give us enough information to extract
2996 both argument types and the physical name of the function, given
2997 the tag name. */
2999 static debug_type
3000 parse_stab_argtypes (void *dhandle, struct stab_handle *info,
3001 debug_type class_type, const char *fieldname,
3002 const char *tagname, debug_type return_type,
3003 const char *argtypes, bool constp,
3004 bool volatilep, const char **pphysname)
3006 bool is_full_physname_constructor;
3007 bool is_constructor;
3008 bool is_destructor;
3009 bool is_v3;
3010 debug_type *args;
3011 bool varargs;
3012 unsigned int physname_len = 0;
3014 /* Constructors are sometimes handled specially. */
3015 is_full_physname_constructor = ((argtypes[0] == '_'
3016 && argtypes[1] == '_'
3017 && (ISDIGIT (argtypes[2])
3018 || argtypes[2] == 'Q'
3019 || argtypes[2] == 't'))
3020 || startswith (argtypes, "__ct"));
3022 is_constructor = (is_full_physname_constructor
3023 || (tagname != NULL
3024 && strcmp (fieldname, tagname) == 0));
3025 is_destructor = ((argtypes[0] == '_'
3026 && (argtypes[1] == '$' || argtypes[1] == '.')
3027 && argtypes[2] == '_')
3028 || startswith (argtypes, "__dt"));
3029 is_v3 = argtypes[0] == '_' && argtypes[1] == 'Z';
3031 if (!(is_destructor || is_full_physname_constructor || is_v3))
3033 unsigned int len, buf_len;
3034 const char *const_prefix;
3035 const char *volatile_prefix;
3036 char buf[20];
3037 unsigned int mangled_name_len;
3038 char *physname;
3040 len = tagname == NULL ? 0 : strlen (tagname);
3041 const_prefix = constp ? "C" : "";
3042 volatile_prefix = volatilep ? "V" : "";
3044 if (len == 0)
3045 buf_len = sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
3046 else if (tagname != NULL && strchr (tagname, '<') != NULL)
3048 /* Template methods are fully mangled. */
3049 buf_len = sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
3050 tagname = NULL;
3051 len = 0;
3053 else
3054 buf_len = sprintf (buf, "__%s%s%d", const_prefix, volatile_prefix, len);
3056 mangled_name_len = ((is_constructor ? 0 : strlen (fieldname))
3057 + buf_len
3058 + len
3059 + strlen (argtypes)
3060 + 1);
3062 if (fieldname[0] == 'o'
3063 && fieldname[1] == 'p'
3064 && (fieldname[2] == '$' || fieldname[2] == '.'))
3066 /* Opname selection is no longer supported by libiberty's demangler. */
3067 return DEBUG_TYPE_NULL;
3070 physname = debug_xalloc (dhandle, mangled_name_len);
3071 if (is_constructor)
3072 physname[0] = '\0';
3073 else
3074 strcpy (physname, fieldname);
3076 physname_len = strlen (physname);
3077 strcat (physname, buf);
3078 if (tagname != NULL)
3079 strcat (physname, tagname);
3080 strcat (physname, argtypes);
3082 *pphysname = physname;
3085 if (*argtypes == '\0' || is_destructor)
3087 args = debug_xalloc (dhandle, sizeof (*args));
3088 *args = NULL;
3089 return debug_make_method_type (dhandle, return_type, class_type, args,
3090 false);
3093 args = stab_demangle_argtypes (dhandle, info, *pphysname, &varargs, physname_len);
3094 if (args == NULL)
3095 return DEBUG_TYPE_NULL;
3097 return debug_make_method_type (dhandle, return_type, class_type, args,
3098 varargs);
3101 /* The tail end of stabs for C++ classes that contain a virtual function
3102 pointer contains a tilde, a %, and a type number.
3103 The type number refers to the base class (possibly this class itself) which
3104 contains the vtable pointer for the current class.
3106 This function is called when we have parsed all the method declarations,
3107 so we can look for the vptr base class info. */
3109 static bool
3110 parse_stab_tilde_field (void *dhandle,
3111 struct stab_handle *info,
3112 const char **pp,
3113 const int *typenums,
3114 debug_type *retvptrbase,
3115 bool *retownvptr,
3116 const char *p_end)
3118 const char *orig;
3119 const char *hold;
3120 int vtypenums[2];
3122 *retvptrbase = DEBUG_TYPE_NULL;
3123 *retownvptr = false;
3125 orig = *pp;
3126 if (orig >= p_end)
3127 return false;
3129 /* If we are positioned at a ';', then skip it. */
3130 if (**pp == ';')
3131 ++*pp;
3133 if (**pp != '~')
3134 return true;
3135 ++*pp;
3137 if (**pp == '=' || **pp == '+' || **pp == '-')
3139 /* Obsolete flags that used to indicate the presence of
3140 constructors and/or destructors. */
3141 ++*pp;
3144 if (**pp != '%')
3145 return true;
3146 ++*pp;
3148 hold = *pp;
3150 /* The next number is the type number of the base class (possibly
3151 our own class) which supplies the vtable for this class. */
3152 if (! parse_stab_type_number (pp, vtypenums, p_end))
3153 return false;
3155 if (vtypenums[0] == typenums[0]
3156 && vtypenums[1] == typenums[1])
3157 *retownvptr = true;
3158 else
3160 debug_type vtype;
3161 const char *p;
3163 *pp = hold;
3165 vtype = parse_stab_type (dhandle, info, (const char *) NULL, pp,
3166 (debug_type **) NULL, p_end);
3167 for (p = *pp; *p != ';' && *p != '\0'; p++)
3169 if (*p != ';')
3171 bad_stab (orig);
3172 return false;
3175 *retvptrbase = vtype;
3177 *pp = p + 1;
3180 return true;
3183 /* Read a definition of an array type. */
3185 static debug_type
3186 parse_stab_array_type (void *dhandle,
3187 struct stab_handle *info,
3188 const char **pp,
3189 bool stringp,
3190 const char *p_end)
3192 const char *orig;
3193 const char *p;
3194 int typenums[2];
3195 debug_type index_type;
3196 bool adjustable;
3197 bfd_signed_vma lower, upper;
3198 debug_type element_type;
3200 /* Format of an array type:
3201 "ar<index type>;lower;upper;<array_contents_type>".
3202 OS9000: "arlower,upper;<array_contents_type>".
3204 Fortran adjustable arrays use Adigits or Tdigits for lower or upper;
3205 for these, produce a type like float[][]. */
3207 orig = *pp;
3208 if (orig >= p_end)
3209 return DEBUG_TYPE_NULL;
3211 /* FIXME: gdb checks os9k_stabs here. */
3213 /* If the index type is type 0, we take it as int. */
3214 p = *pp;
3215 if (! parse_stab_type_number (&p, typenums, p_end))
3216 return DEBUG_TYPE_NULL;
3218 if (typenums[0] == 0 && typenums[1] == 0 && **pp != '=')
3220 index_type = debug_find_named_type (dhandle, "int");
3221 if (index_type == DEBUG_TYPE_NULL)
3223 index_type = debug_make_int_type (dhandle, 4, false);
3224 if (index_type == DEBUG_TYPE_NULL)
3225 return DEBUG_TYPE_NULL;
3227 *pp = p;
3229 else
3231 index_type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
3232 (debug_type **) NULL, p_end);
3235 if (**pp != ';')
3237 bad_stab (orig);
3238 return DEBUG_TYPE_NULL;
3240 ++*pp;
3242 adjustable = false;
3244 if (! ISDIGIT (**pp) && **pp != '-' && **pp != 0)
3246 ++*pp;
3247 adjustable = true;
3250 lower = (bfd_signed_vma) parse_number (pp, (bool *) NULL, p_end);
3251 if (**pp != ';')
3253 bad_stab (orig);
3254 return DEBUG_TYPE_NULL;
3256 ++*pp;
3258 if (! ISDIGIT (**pp) && **pp != '-' && **pp != 0)
3260 ++*pp;
3261 adjustable = true;
3264 upper = (bfd_signed_vma) parse_number (pp, (bool *) NULL, p_end);
3265 if (**pp != ';')
3267 bad_stab (orig);
3268 return DEBUG_TYPE_NULL;
3270 ++*pp;
3272 element_type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
3273 (debug_type **) NULL, p_end);
3274 if (element_type == DEBUG_TYPE_NULL)
3275 return DEBUG_TYPE_NULL;
3277 if (adjustable)
3279 lower = 0;
3280 upper = -1;
3283 return debug_make_array_type (dhandle, element_type, index_type, lower,
3284 upper, stringp);
3287 /* This struct holds information about files we have seen using
3288 N_BINCL. */
3290 struct bincl_file
3292 /* The next N_BINCL file. */
3293 struct bincl_file *next;
3294 /* The next N_BINCL on the stack. */
3295 struct bincl_file *next_stack;
3296 /* The file name. */
3297 const char *name;
3298 /* The hash value. */
3299 bfd_vma hash;
3300 /* The file index. */
3301 unsigned int file;
3302 /* The list of types defined in this file. */
3303 struct stab_types *file_types;
3306 /* Start a new N_BINCL file, pushing it onto the stack. */
3308 static void
3309 push_bincl (void *dhandle, struct stab_handle *info, const char *name,
3310 bfd_vma hash)
3312 struct bincl_file *n;
3314 n = debug_xalloc (dhandle, sizeof *n);
3315 n->next = info->bincl_list;
3316 n->next_stack = info->bincl_stack;
3317 n->name = name;
3318 n->hash = hash;
3319 n->file = info->files;
3320 n->file_types = NULL;
3321 info->bincl_list = n;
3322 info->bincl_stack = n;
3324 ++info->files;
3325 info->file_types = xrealloc (info->file_types,
3326 info->files * sizeof (*info->file_types));
3327 info->file_types[n->file] = NULL;
3330 /* Finish an N_BINCL file, at an N_EINCL, popping the name off the
3331 stack. */
3333 static const char *
3334 pop_bincl (struct stab_handle *info)
3336 struct bincl_file *o;
3338 o = info->bincl_stack;
3339 if (o == NULL)
3340 return info->main_filename;
3341 info->bincl_stack = o->next_stack;
3343 if (o->file >= info->files)
3344 return info->main_filename;
3346 o->file_types = info->file_types[o->file];
3348 if (info->bincl_stack == NULL)
3349 return info->main_filename;
3350 return info->bincl_stack->name;
3353 /* Handle an N_EXCL: get the types from the corresponding N_BINCL. */
3355 static bool
3356 find_excl (struct stab_handle *info, const char *name, bfd_vma hash)
3358 struct bincl_file *l;
3360 ++info->files;
3361 info->file_types = xrealloc (info->file_types,
3362 info->files * sizeof (*info->file_types));
3364 for (l = info->bincl_list; l != NULL; l = l->next)
3365 if (l->hash == hash && strcmp (l->name, name) == 0)
3366 break;
3367 if (l == NULL)
3369 warn_stab (name, _("Undefined N_EXCL"));
3370 info->file_types[info->files - 1] = NULL;
3371 return true;
3374 info->file_types[info->files - 1] = l->file_types;
3376 return true;
3379 /* Handle a variable definition. gcc emits variable definitions for a
3380 block before the N_LBRAC, so we must hold onto them until we see
3381 it. The SunPRO compiler emits variable definitions after the
3382 N_LBRAC, so we can call debug_record_variable immediately. */
3384 static bool
3385 stab_record_variable (void *dhandle, struct stab_handle *info,
3386 const char *name, debug_type type,
3387 enum debug_var_kind kind, bfd_vma val)
3389 struct stab_pending_var *v;
3391 if ((kind == DEBUG_GLOBAL || kind == DEBUG_STATIC)
3392 || ! info->within_function
3393 || (info->gcc_compiled == 0 && info->n_opt_found))
3394 return debug_record_variable (dhandle, name, type, kind, val);
3396 v = debug_xzalloc (dhandle, sizeof (*v));
3398 v->next = info->pending;
3399 v->name = name;
3400 v->type = type;
3401 v->kind = kind;
3402 v->val = val;
3403 info->pending = v;
3405 return true;
3408 /* Emit pending variable definitions. This is called after we see the
3409 N_LBRAC that starts the block. */
3411 static bool
3412 stab_emit_pending_vars (void *dhandle, struct stab_handle *info)
3414 struct stab_pending_var *v;
3416 v = info->pending;
3417 while (v != NULL)
3419 if (! debug_record_variable (dhandle, v->name, v->type, v->kind, v->val))
3420 return false;
3422 v = v->next;
3425 info->pending = NULL;
3427 return true;
3430 /* Find the slot for a type in the database. */
3432 static debug_type *
3433 stab_find_slot (void *dhandle, struct stab_handle *info, const int *typenums)
3435 unsigned int filenum;
3436 unsigned int tindex;
3437 unsigned int base_index;
3438 struct stab_types **ps;
3440 filenum = typenums[0];
3441 tindex = typenums[1];
3443 if (filenum >= info->files)
3445 fprintf (stderr, _("Type file number %d out of range\n"), filenum);
3446 return NULL;
3449 ps = info->file_types + filenum;
3450 base_index = tindex / STAB_TYPES_SLOTS * STAB_TYPES_SLOTS;
3451 tindex -= base_index;
3452 while (*ps && (*ps)->base_index < base_index)
3453 ps = &(*ps)->next;
3455 if (*ps == NULL || (*ps)->base_index != base_index)
3457 struct stab_types *n = debug_xzalloc (dhandle, sizeof (*n));
3458 n->next = *ps;
3459 n->base_index = base_index;
3460 *ps = n;
3463 return (*ps)->types + tindex;
3466 /* Find a type given a type number. If the type has not been
3467 allocated yet, create an indirect type. */
3469 static debug_type
3470 stab_find_type (void *dhandle, struct stab_handle *info, const int *typenums)
3472 debug_type *slot;
3474 if (typenums[0] == 0 && typenums[1] < 0)
3476 /* A negative type number indicates an XCOFF builtin type. */
3477 return stab_xcoff_builtin_type (dhandle, info, typenums[1]);
3480 slot = stab_find_slot (dhandle, info, typenums);
3481 if (slot == NULL)
3482 return DEBUG_TYPE_NULL;
3484 if (*slot == DEBUG_TYPE_NULL)
3485 return debug_make_indirect_type (dhandle, slot, (const char *) NULL);
3487 return *slot;
3490 /* Record that a given type number refers to a given type. */
3492 static bool
3493 stab_record_type (void *dhandle, struct stab_handle *info,
3494 const int *typenums, debug_type type)
3496 debug_type *slot;
3498 slot = stab_find_slot (dhandle, info, typenums);
3499 if (slot == NULL)
3500 return false;
3502 /* gdb appears to ignore type redefinitions, so we do as well. */
3504 *slot = type;
3506 return true;
3509 /* Return an XCOFF builtin type. */
3511 static debug_type
3512 stab_xcoff_builtin_type (void *dhandle, struct stab_handle *info,
3513 unsigned int typenum)
3515 debug_type rettype;
3516 const char *name;
3518 typenum = -typenum - 1;
3519 if (typenum >= XCOFF_TYPE_COUNT)
3521 fprintf (stderr, _("Unrecognized XCOFF type %d\n"), -typenum - 1);
3522 return DEBUG_TYPE_NULL;
3524 if (info->xcoff_types[typenum] != NULL)
3525 return info->xcoff_types[typenum];
3527 switch (typenum)
3529 case 0:
3530 /* The size of this and all the other types are fixed, defined
3531 by the debugging format. */
3532 name = "int";
3533 rettype = debug_make_int_type (dhandle, 4, false);
3534 break;
3535 case 1:
3536 name = "char";
3537 rettype = debug_make_int_type (dhandle, 1, false);
3538 break;
3539 case 2:
3540 name = "short";
3541 rettype = debug_make_int_type (dhandle, 2, false);
3542 break;
3543 case 3:
3544 name = "long";
3545 rettype = debug_make_int_type (dhandle, 4, false);
3546 break;
3547 case 4:
3548 name = "unsigned char";
3549 rettype = debug_make_int_type (dhandle, 1, true);
3550 break;
3551 case 5:
3552 name = "signed char";
3553 rettype = debug_make_int_type (dhandle, 1, false);
3554 break;
3555 case 6:
3556 name = "unsigned short";
3557 rettype = debug_make_int_type (dhandle, 2, true);
3558 break;
3559 case 7:
3560 name = "unsigned int";
3561 rettype = debug_make_int_type (dhandle, 4, true);
3562 break;
3563 case 8:
3564 name = "unsigned";
3565 rettype = debug_make_int_type (dhandle, 4, true);
3566 break;
3567 case 9:
3568 name = "unsigned long";
3569 rettype = debug_make_int_type (dhandle, 4, true);
3570 break;
3571 case 10:
3572 name = "void";
3573 rettype = debug_make_void_type (dhandle);
3574 break;
3575 case 11:
3576 /* IEEE single precision (32 bit). */
3577 name = "float";
3578 rettype = debug_make_float_type (dhandle, 4);
3579 break;
3580 case 12:
3581 /* IEEE double precision (64 bit). */
3582 name = "double";
3583 rettype = debug_make_float_type (dhandle, 8);
3584 break;
3585 case 13:
3586 /* This is an IEEE double on the RS/6000, and different machines
3587 with different sizes for "long double" should use different
3588 negative type numbers. See stabs.texinfo. */
3589 name = "long double";
3590 rettype = debug_make_float_type (dhandle, 8);
3591 break;
3592 case 14:
3593 name = "integer";
3594 rettype = debug_make_int_type (dhandle, 4, false);
3595 break;
3596 case 15:
3597 name = "boolean";
3598 rettype = debug_make_bool_type (dhandle, 4);
3599 break;
3600 case 16:
3601 name = "short real";
3602 rettype = debug_make_float_type (dhandle, 4);
3603 break;
3604 case 17:
3605 name = "real";
3606 rettype = debug_make_float_type (dhandle, 8);
3607 break;
3608 case 18:
3609 /* FIXME */
3610 name = "stringptr";
3611 rettype = NULL;
3612 break;
3613 case 19:
3614 /* FIXME */
3615 name = "character";
3616 rettype = debug_make_int_type (dhandle, 1, true);
3617 break;
3618 case 20:
3619 name = "logical*1";
3620 rettype = debug_make_bool_type (dhandle, 1);
3621 break;
3622 case 21:
3623 name = "logical*2";
3624 rettype = debug_make_bool_type (dhandle, 2);
3625 break;
3626 case 22:
3627 name = "logical*4";
3628 rettype = debug_make_bool_type (dhandle, 4);
3629 break;
3630 case 23:
3631 name = "logical";
3632 rettype = debug_make_bool_type (dhandle, 4);
3633 break;
3634 case 24:
3635 /* Complex type consisting of two IEEE single precision values. */
3636 name = "complex";
3637 rettype = debug_make_complex_type (dhandle, 8);
3638 break;
3639 case 25:
3640 /* Complex type consisting of two IEEE double precision values. */
3641 name = "double complex";
3642 rettype = debug_make_complex_type (dhandle, 16);
3643 break;
3644 case 26:
3645 name = "integer*1";
3646 rettype = debug_make_int_type (dhandle, 1, false);
3647 break;
3648 case 27:
3649 name = "integer*2";
3650 rettype = debug_make_int_type (dhandle, 2, false);
3651 break;
3652 case 28:
3653 name = "integer*4";
3654 rettype = debug_make_int_type (dhandle, 4, false);
3655 break;
3656 case 29:
3657 /* FIXME */
3658 name = "wchar";
3659 rettype = debug_make_int_type (dhandle, 2, false);
3660 break;
3661 case 30:
3662 name = "long long";
3663 rettype = debug_make_int_type (dhandle, 8, false);
3664 break;
3665 case 31:
3666 name = "unsigned long long";
3667 rettype = debug_make_int_type (dhandle, 8, true);
3668 break;
3669 case 32:
3670 name = "logical*8";
3671 rettype = debug_make_bool_type (dhandle, 8);
3672 break;
3673 case 33:
3674 name = "integer*8";
3675 rettype = debug_make_int_type (dhandle, 8, false);
3676 break;
3677 default:
3678 abort ();
3681 rettype = debug_name_type (dhandle, name, rettype);
3682 info->xcoff_types[typenum] = rettype;
3683 return rettype;
3686 /* Find or create a tagged type. */
3688 static debug_type
3689 stab_find_tagged_type (void *dhandle, struct stab_handle *info,
3690 const char *p, int len, enum debug_type_kind kind)
3692 char *name;
3693 debug_type dtype;
3694 struct stab_tag *st;
3696 name = savestring (dhandle, p, len);
3698 /* We pass DEBUG_KIND_ILLEGAL because we want all tags in the same
3699 namespace. This is right for C, and I don't know how to handle
3700 other languages. FIXME. */
3701 dtype = debug_find_tagged_type (dhandle, name, DEBUG_KIND_ILLEGAL);
3702 if (dtype != DEBUG_TYPE_NULL)
3703 return dtype;
3705 /* We need to allocate an entry on the undefined tag list. */
3706 for (st = info->tags; st != NULL; st = st->next)
3708 if (st->name[0] == name[0]
3709 && strcmp (st->name, name) == 0)
3711 if (st->kind == DEBUG_KIND_ILLEGAL)
3712 st->kind = kind;
3713 break;
3716 if (st == NULL)
3718 st = debug_xzalloc (dhandle, sizeof (*st));
3720 st->next = info->tags;
3721 st->name = name;
3722 st->kind = kind;
3723 st->slot = DEBUG_TYPE_NULL;
3724 st->type = debug_make_indirect_type (dhandle, &st->slot, name);
3725 info->tags = st;
3728 return st->type;
3731 /* In order to get the correct argument types for a stubbed method, we
3732 need to extract the argument types from a C++ mangled string.
3733 Since the argument types can refer back to the return type, this
3734 means that we must demangle the entire physical name. In gdb this
3735 is done by calling cplus_demangle and running the results back
3736 through the C++ expression parser. Since we have no expression
3737 parser, we must duplicate much of the work of cplus_demangle here.
3739 We assume that GNU style demangling is used, since this is only
3740 done for method stubs, and only g++ should output that form of
3741 debugging information. */
3743 /* This structure is used to hold a pointer to type information which
3744 demangling a string. */
3746 struct stab_demangle_typestring
3748 /* The start of the type. This is not null terminated. */
3749 const char *typestring;
3750 /* The length of the type. */
3751 unsigned int len;
3754 /* This structure is used to hold information while demangling a
3755 string. */
3757 struct stab_demangle_info
3759 /* The debugging information handle. */
3760 void *dhandle;
3761 /* The stab information handle. */
3762 struct stab_handle *info;
3763 /* The array of arguments we are building. */
3764 debug_type *args;
3765 /* Whether the method takes a variable number of arguments. */
3766 bool varargs;
3767 /* The array of types we have remembered. */
3768 struct stab_demangle_typestring *typestrings;
3769 /* The number of typestrings. */
3770 unsigned int typestring_count;
3771 /* The number of typestring slots we have allocated. */
3772 unsigned int typestring_alloc;
3775 static void stab_bad_demangle (const char *);
3776 static unsigned int stab_demangle_count (const char **);
3777 static bool stab_demangle_get_count (const char **, unsigned int *);
3778 static bool stab_demangle_prefix
3779 (struct stab_demangle_info *, const char **, unsigned int);
3780 static bool stab_demangle_function_name
3781 (struct stab_demangle_info *, const char **, const char *);
3782 static bool stab_demangle_signature
3783 (struct stab_demangle_info *, const char **);
3784 static bool stab_demangle_qualified
3785 (struct stab_demangle_info *, const char **, debug_type *);
3786 static bool stab_demangle_template
3787 (struct stab_demangle_info *, const char **, char **);
3788 static bool stab_demangle_class
3789 (struct stab_demangle_info *, const char **, const char **);
3790 static bool stab_demangle_args
3791 (struct stab_demangle_info *, const char **, debug_type **, bool *);
3792 static bool stab_demangle_arg
3793 (struct stab_demangle_info *, const char **, debug_type **,
3794 unsigned int *, unsigned int *);
3795 static bool stab_demangle_type
3796 (struct stab_demangle_info *, const char **, debug_type *);
3797 static bool stab_demangle_fund_type
3798 (struct stab_demangle_info *, const char **, debug_type *);
3799 static bool stab_demangle_remember_type
3800 (struct stab_demangle_info *, const char *, int);
3802 /* Warn about a bad demangling. */
3804 static void
3805 stab_bad_demangle (const char *s)
3807 fprintf (stderr, _("bad mangled name `%s'\n"), s);
3810 /* Get a count from a stab string. */
3812 static unsigned int
3813 stab_demangle_count (const char **pp)
3815 unsigned int count;
3817 count = 0;
3818 while (ISDIGIT (**pp))
3820 count *= 10;
3821 count += **pp - '0';
3822 ++*pp;
3824 return count;
3827 /* Require a count in a string. The count may be multiple digits, in
3828 which case it must end in an underscore. */
3830 static bool
3831 stab_demangle_get_count (const char **pp, unsigned int *pi)
3833 if (! ISDIGIT (**pp))
3834 return false;
3836 *pi = **pp - '0';
3837 ++*pp;
3838 if (ISDIGIT (**pp))
3840 unsigned int count;
3841 const char *p;
3843 count = *pi;
3844 p = *pp;
3847 count *= 10;
3848 count += *p - '0';
3849 ++p;
3851 while (ISDIGIT (*p));
3852 if (*p == '_')
3854 *pp = p + 1;
3855 *pi = count;
3859 return true;
3862 /* This function demangles a physical name, returning a NULL
3863 terminated array of argument types. */
3865 static debug_type *
3866 stab_demangle_argtypes (void *dhandle, struct stab_handle *info,
3867 const char *physname, bool *pvarargs,
3868 unsigned int physname_len)
3870 struct stab_demangle_info minfo;
3872 /* Check for the g++ V3 ABI. */
3873 if (physname[0] == '_' && physname[1] == 'Z')
3874 return stab_demangle_v3_argtypes (dhandle, info, physname, pvarargs);
3876 minfo.dhandle = dhandle;
3877 minfo.info = info;
3878 minfo.args = NULL;
3879 minfo.varargs = false;
3880 minfo.typestring_alloc = 10;
3881 minfo.typestrings
3882 = xmalloc (minfo.typestring_alloc * sizeof (*minfo.typestrings));
3883 minfo.typestring_count = 0;
3885 /* cplus_demangle checks for special GNU mangled forms, but we can't
3886 see any of them in mangled method argument types. */
3888 if (! stab_demangle_prefix (&minfo, &physname, physname_len))
3889 goto error_return;
3891 if (*physname != '\0')
3893 if (! stab_demangle_signature (&minfo, &physname))
3894 goto error_return;
3897 free (minfo.typestrings);
3899 if (minfo.args == NULL)
3900 fprintf (stderr, _("no argument types in mangled string\n"));
3902 *pvarargs = minfo.varargs;
3903 return minfo.args;
3905 error_return:
3906 free (minfo.typestrings);
3907 return NULL;
3910 /* Demangle the prefix of the mangled name. */
3912 static bool
3913 stab_demangle_prefix (struct stab_demangle_info *minfo, const char **pp,
3914 unsigned int physname_len)
3916 const char *scan;
3917 unsigned int i;
3919 /* cplus_demangle checks for global constructors and destructors,
3920 but we can't see them in mangled argument types. */
3922 if (physname_len)
3923 scan = *pp + physname_len;
3924 else
3926 /* Look for `__'. */
3927 scan = *pp;
3929 scan = strchr (scan, '_');
3930 while (scan != NULL && *++scan != '_');
3932 if (scan == NULL)
3934 stab_bad_demangle (*pp);
3935 return false;
3938 --scan;
3940 /* We found `__'; move ahead to the last contiguous `__' pair. */
3941 i = strspn (scan, "_");
3942 if (i > 2)
3943 scan += i - 2;
3946 if (scan == *pp
3947 && (ISDIGIT (scan[2])
3948 || scan[2] == 'Q'
3949 || scan[2] == 't'))
3951 /* This is a GNU style constructor name. */
3952 *pp = scan + 2;
3953 return true;
3955 else if (scan == *pp
3956 && ! ISDIGIT (scan[2])
3957 && scan[2] != 't')
3959 /* Look for the `__' that separates the prefix from the
3960 signature. */
3961 while (*scan == '_')
3962 ++scan;
3963 scan = strstr (scan, "__");
3964 if (scan == NULL || scan[2] == '\0')
3966 stab_bad_demangle (*pp);
3967 return false;
3970 return stab_demangle_function_name (minfo, pp, scan);
3972 else if (scan[2] != '\0')
3974 /* The name doesn't start with `__', but it does contain `__'. */
3975 return stab_demangle_function_name (minfo, pp, scan);
3977 else
3979 stab_bad_demangle (*pp);
3980 return false;
3982 /*NOTREACHED*/
3985 /* Demangle a function name prefix. The scan argument points to the
3986 double underscore which separates the function name from the
3987 signature. */
3989 static bool
3990 stab_demangle_function_name (struct stab_demangle_info *minfo,
3991 const char **pp, const char *scan)
3993 const char *name;
3995 /* The string from *pp to scan is the name of the function. We
3996 don't care about the name, since we just looking for argument
3997 types. However, for conversion operators, the name may include a
3998 type which we must remember in order to handle backreferences. */
4000 name = *pp;
4001 *pp = scan + 2;
4003 if (*pp - name >= 5
4004 && startswith (name, "type")
4005 && (name[4] == '$' || name[4] == '.'))
4007 const char *tem;
4009 /* This is a type conversion operator. */
4010 tem = name + 5;
4011 if (! stab_demangle_type (minfo, &tem, (debug_type *) NULL))
4012 return false;
4014 else if (name[0] == '_'
4015 && name[1] == '_'
4016 && name[2] == 'o'
4017 && name[3] == 'p')
4019 const char *tem;
4021 /* This is a type conversion operator. */
4022 tem = name + 4;
4023 if (! stab_demangle_type (minfo, &tem, (debug_type *) NULL))
4024 return false;
4027 return true;
4030 /* Demangle the signature. This is where the argument types are
4031 found. */
4033 static bool
4034 stab_demangle_signature (struct stab_demangle_info *minfo, const char **pp)
4036 const char *orig;
4037 bool expect_func, func_done;
4038 const char *hold;
4040 orig = *pp;
4042 expect_func = false;
4043 func_done = false;
4044 hold = NULL;
4046 while (**pp != '\0')
4048 switch (**pp)
4050 case 'Q':
4051 hold = *pp;
4052 if (! stab_demangle_qualified (minfo, pp, (debug_type *) NULL)
4053 || ! stab_demangle_remember_type (minfo, hold, *pp - hold))
4054 return false;
4055 expect_func = true;
4056 hold = NULL;
4057 break;
4059 case 'S':
4060 /* Static member function. FIXME: Can this happen? */
4061 if (hold == NULL)
4062 hold = *pp;
4063 ++*pp;
4064 break;
4066 case 'C':
4067 /* Const member function. */
4068 if (hold == NULL)
4069 hold = *pp;
4070 ++*pp;
4071 break;
4073 case '0': case '1': case '2': case '3': case '4':
4074 case '5': case '6': case '7': case '8': case '9':
4075 if (hold == NULL)
4076 hold = *pp;
4077 if (! stab_demangle_class (minfo, pp, (const char **) NULL)
4078 || ! stab_demangle_remember_type (minfo, hold, *pp - hold))
4079 return false;
4080 expect_func = true;
4081 hold = NULL;
4082 break;
4084 case 'F':
4085 /* Function. I don't know if this actually happens with g++
4086 output. */
4087 hold = NULL;
4088 func_done = true;
4089 ++*pp;
4090 if (! stab_demangle_args (minfo, pp, &minfo->args, &minfo->varargs))
4091 return false;
4092 break;
4094 case 't':
4095 /* Template. */
4096 if (hold == NULL)
4097 hold = *pp;
4098 if (! stab_demangle_template (minfo, pp, (char **) NULL)
4099 || ! stab_demangle_remember_type (minfo, hold, *pp - hold))
4100 return false;
4101 hold = NULL;
4102 expect_func = true;
4103 break;
4105 case '_':
4106 /* At the outermost level, we cannot have a return type
4107 specified, so if we run into another '_' at this point we
4108 are dealing with a mangled name that is either bogus, or
4109 has been mangled by some algorithm we don't know how to
4110 deal with. So just reject the entire demangling. */
4111 stab_bad_demangle (orig);
4112 return false;
4114 default:
4115 /* Assume we have stumbled onto the first outermost function
4116 argument token, and start processing args. */
4117 func_done = true;
4118 if (! stab_demangle_args (minfo, pp, &minfo->args, &minfo->varargs))
4119 return false;
4120 break;
4123 if (expect_func)
4125 func_done = true;
4126 if (! stab_demangle_args (minfo, pp, &minfo->args, &minfo->varargs))
4127 return false;
4131 if (! func_done)
4133 /* With GNU style demangling, bar__3foo is 'foo::bar(void)', and
4134 bar__3fooi is 'foo::bar(int)'. We get here when we find the
4135 first case, and need to ensure that the '(void)' gets added
4136 to the current declp. */
4137 if (! stab_demangle_args (minfo, pp, &minfo->args, &minfo->varargs))
4138 return false;
4141 return true;
4144 /* Demangle a qualified name, such as "Q25Outer5Inner" which is the
4145 mangled form of "Outer::Inner". */
4147 static bool
4148 stab_demangle_qualified (struct stab_demangle_info *minfo, const char **pp,
4149 debug_type *ptype)
4151 const char *orig;
4152 const char *p;
4153 unsigned int qualifiers;
4154 debug_type context;
4156 orig = *pp;
4158 switch ((*pp)[1])
4160 case '_':
4161 /* GNU mangled name with more than 9 classes. The count is
4162 preceded by an underscore (to distinguish it from the <= 9
4163 case) and followed by an underscore. */
4164 p = *pp + 2;
4165 if (! ISDIGIT (*p) || *p == '0')
4167 stab_bad_demangle (orig);
4168 return false;
4170 qualifiers = atoi (p);
4171 while (ISDIGIT (*p))
4172 ++p;
4173 if (*p != '_')
4175 stab_bad_demangle (orig);
4176 return false;
4178 *pp = p + 1;
4179 break;
4181 case '1': case '2': case '3': case '4': case '5':
4182 case '6': case '7': case '8': case '9':
4183 qualifiers = (*pp)[1] - '0';
4184 /* Skip an optional underscore after the count. */
4185 if ((*pp)[2] == '_')
4186 ++*pp;
4187 *pp += 2;
4188 break;
4190 case '0':
4191 default:
4192 stab_bad_demangle (orig);
4193 return false;
4196 context = DEBUG_TYPE_NULL;
4198 /* Pick off the names. */
4199 while (qualifiers-- > 0)
4201 if (**pp == '_')
4202 ++*pp;
4203 if (**pp == 't')
4205 char *name;
4207 if (! stab_demangle_template (minfo, pp,
4208 ptype != NULL ? &name : NULL))
4209 return false;
4211 if (ptype != NULL)
4213 context = stab_find_tagged_type (minfo->dhandle, minfo->info,
4214 name, strlen (name),
4215 DEBUG_KIND_CLASS);
4216 if (context == DEBUG_TYPE_NULL)
4217 return false;
4220 else
4222 unsigned int len;
4224 len = stab_demangle_count (pp);
4225 if (strlen (*pp) < len)
4227 stab_bad_demangle (orig);
4228 return false;
4231 if (ptype != NULL)
4233 const debug_field *fields;
4235 fields = NULL;
4236 if (context != DEBUG_TYPE_NULL)
4237 fields = debug_get_fields (minfo->dhandle, context);
4239 context = DEBUG_TYPE_NULL;
4241 if (fields != NULL)
4243 char *name;
4245 /* Try to find the type by looking through the
4246 fields of context until we find a field with the
4247 same type. This ought to work for a class
4248 defined within a class, but it won't work for,
4249 e.g., an enum defined within a class. stabs does
4250 not give us enough information to figure out the
4251 latter case. */
4253 name = savestring (minfo->dhandle, *pp, len);
4255 for (; *fields != DEBUG_FIELD_NULL; fields++)
4257 debug_type ft;
4258 const char *dn;
4260 ft = debug_get_field_type (minfo->dhandle, *fields);
4261 if (ft == NULL)
4262 return false;
4263 dn = debug_get_type_name (minfo->dhandle, ft);
4264 if (dn != NULL && strcmp (dn, name) == 0)
4266 context = ft;
4267 break;
4272 if (context == DEBUG_TYPE_NULL)
4274 /* We have to fall back on finding the type by name.
4275 If there are more types to come, then this must
4276 be a class. Otherwise, it could be anything. */
4278 if (qualifiers == 0)
4280 char *name;
4282 name = savestring (minfo->dhandle, *pp, len);
4283 context = debug_find_named_type (minfo->dhandle,
4284 name);
4287 if (context == DEBUG_TYPE_NULL)
4289 context = stab_find_tagged_type (minfo->dhandle,
4290 minfo->info,
4291 *pp, len,
4292 (qualifiers == 0
4293 ? DEBUG_KIND_ILLEGAL
4294 : DEBUG_KIND_CLASS));
4295 if (context == DEBUG_TYPE_NULL)
4296 return false;
4301 *pp += len;
4305 if (ptype != NULL)
4306 *ptype = context;
4308 return true;
4311 /* Demangle a template. If PNAME is not NULL, this sets *PNAME to a
4312 string representation of the template. */
4314 static bool
4315 stab_demangle_template (struct stab_demangle_info *minfo, const char **pp,
4316 char **pname)
4318 const char *orig;
4319 unsigned int r, i;
4321 orig = *pp;
4323 ++*pp;
4325 /* Skip the template name. */
4326 r = stab_demangle_count (pp);
4327 if (r == 0 || strlen (*pp) < r)
4329 stab_bad_demangle (orig);
4330 return false;
4332 *pp += r;
4334 /* Get the size of the parameter list. */
4335 if (stab_demangle_get_count (pp, &r) == 0)
4337 stab_bad_demangle (orig);
4338 return false;
4341 for (i = 0; i < r; i++)
4343 if (**pp == 'Z')
4345 /* This is a type parameter. */
4346 ++*pp;
4347 if (! stab_demangle_type (minfo, pp, (debug_type *) NULL))
4348 return false;
4350 else
4352 const char *old_p;
4353 bool pointerp, realp, integralp, charp, boolp;
4354 bool done;
4356 old_p = *pp;
4357 pointerp = false;
4358 realp = false;
4359 integralp = false;
4360 charp = false;
4361 boolp = false;
4362 done = false;
4364 /* This is a value parameter. */
4366 if (! stab_demangle_type (minfo, pp, (debug_type *) NULL))
4367 return false;
4369 while (*old_p != '\0' && ! done)
4371 switch (*old_p)
4373 case 'P':
4374 case 'p':
4375 case 'R':
4376 pointerp = true;
4377 done = true;
4378 break;
4379 case 'C': /* Const. */
4380 case 'S': /* Signed. */
4381 case 'U': /* Unsigned. */
4382 case 'V': /* Volatile. */
4383 case 'F': /* Function. */
4384 case 'M': /* Member function. */
4385 case 'O': /* ??? */
4386 ++old_p;
4387 break;
4388 case 'Q': /* Qualified name. */
4389 integralp = true;
4390 done = true;
4391 break;
4392 case 'T': /* Remembered type. */
4393 abort ();
4394 case 'v': /* Void. */
4395 abort ();
4396 case 'x': /* Long long. */
4397 case 'l': /* Long. */
4398 case 'i': /* Int. */
4399 case 's': /* Short. */
4400 case 'w': /* Wchar_t. */
4401 integralp = true;
4402 done = true;
4403 break;
4404 case 'b': /* Bool. */
4405 boolp = true;
4406 done = true;
4407 break;
4408 case 'c': /* Char. */
4409 charp = true;
4410 done = true;
4411 break;
4412 case 'r': /* Long double. */
4413 case 'd': /* Double. */
4414 case 'f': /* Float. */
4415 realp = true;
4416 done = true;
4417 break;
4418 default:
4419 /* Assume it's a user defined integral type. */
4420 integralp = true;
4421 done = true;
4422 break;
4426 if (integralp)
4428 if (**pp == 'm')
4429 ++*pp;
4430 while (ISDIGIT (**pp))
4431 ++*pp;
4433 else if (charp)
4435 unsigned int val;
4437 if (**pp == 'm')
4438 ++*pp;
4439 val = stab_demangle_count (pp);
4440 if (val == 0)
4442 stab_bad_demangle (orig);
4443 return false;
4446 else if (boolp)
4448 unsigned int val;
4450 val = stab_demangle_count (pp);
4451 if (val != 0 && val != 1)
4453 stab_bad_demangle (orig);
4454 return false;
4457 else if (realp)
4459 if (**pp == 'm')
4460 ++*pp;
4461 while (ISDIGIT (**pp))
4462 ++*pp;
4463 if (**pp == '.')
4465 ++*pp;
4466 while (ISDIGIT (**pp))
4467 ++*pp;
4469 if (**pp == 'e')
4471 ++*pp;
4472 while (ISDIGIT (**pp))
4473 ++*pp;
4476 else if (pointerp)
4478 unsigned int len;
4480 len = stab_demangle_count (pp);
4481 if (len == 0)
4483 stab_bad_demangle (orig);
4484 return false;
4486 *pp += len;
4491 /* We can translate this to a string fairly easily by invoking the
4492 regular demangling routine. */
4493 if (pname != NULL)
4495 char *s1, *s2, *s3, *s4 = NULL;
4496 char *from, *to;
4498 s1 = savestring (minfo->dhandle, orig, *pp - orig);
4500 s2 = concat ("NoSuchStrinG__", s1, (const char *) NULL);
4502 s3 = cplus_demangle (s2, demangle_flags);
4504 free (s2);
4506 if (s3 != NULL)
4507 s4 = strstr (s3, "::NoSuchStrinG");
4508 if (s3 == NULL || s4 == NULL)
4510 stab_bad_demangle (orig);
4511 free (s3);
4512 return false;
4515 /* Eliminating all spaces, except those between > characters,
4516 makes it more likely that the demangled name will match the
4517 name which g++ used as the structure name. */
4518 for (from = to = s3; from != s4; ++from)
4519 if (*from != ' '
4520 || (from[1] == '>' && from > s3 && from[-1] == '>'))
4521 *to++ = *from;
4523 *pname = savestring (minfo->dhandle, s3, to - s3);
4525 free (s3);
4528 return true;
4531 /* Demangle a class name. */
4533 static bool
4534 stab_demangle_class (struct stab_demangle_info *minfo ATTRIBUTE_UNUSED,
4535 const char **pp, const char **pstart)
4537 const char *orig;
4538 unsigned int n;
4540 orig = *pp;
4542 n = stab_demangle_count (pp);
4543 if (strlen (*pp) < n)
4545 stab_bad_demangle (orig);
4546 return false;
4549 if (pstart != NULL)
4550 *pstart = *pp;
4552 *pp += n;
4554 return true;
4557 /* Demangle function arguments. If the pargs argument is not NULL, it
4558 is set to a NULL terminated array holding the arguments. */
4560 static bool
4561 stab_demangle_args (struct stab_demangle_info *minfo, const char **pp,
4562 debug_type **pargs, bool *pvarargs)
4564 const char *orig;
4565 unsigned int alloc, count;
4567 orig = *pp;
4569 alloc = 10;
4570 if (pargs != NULL)
4571 *pargs = xmalloc (alloc * sizeof (**pargs));
4572 if (pvarargs != NULL)
4573 *pvarargs = false;
4574 count = 0;
4576 while (**pp != '_' && **pp != '\0' && **pp != 'e')
4578 if (**pp == 'N' || **pp == 'T')
4580 char temptype;
4581 unsigned int r, t;
4583 temptype = **pp;
4584 ++*pp;
4586 if (temptype == 'T')
4587 r = 1;
4588 else
4590 if (! stab_demangle_get_count (pp, &r))
4591 goto bad;
4594 if (!stab_demangle_get_count (pp, &t)
4595 || t >= minfo->typestring_count)
4596 goto bad;
4598 while (r-- > 0)
4600 const char *tem;
4602 tem = minfo->typestrings[t].typestring;
4603 if (! stab_demangle_arg (minfo, &tem, pargs, &count, &alloc))
4604 goto fail;
4607 else
4609 if (! stab_demangle_arg (minfo, pp, pargs, &count, &alloc))
4610 goto fail;
4614 if (pargs != NULL)
4616 debug_type *xargs;
4617 (*pargs)[count] = DEBUG_TYPE_NULL;
4618 xargs = debug_xalloc (minfo->dhandle, (count + 1) * sizeof (*xargs));
4619 memcpy (xargs, *pargs, (count + 1) * sizeof (*xargs));
4620 free (*pargs);
4621 *pargs = xargs;
4624 if (**pp == 'e')
4626 if (pvarargs != NULL)
4627 *pvarargs = true;
4628 ++*pp;
4630 return true;
4632 bad:
4633 stab_bad_demangle (orig);
4634 fail:
4635 if (pargs != NULL)
4637 free (*pargs);
4638 *pargs = NULL;
4640 return false;
4643 /* Demangle a single argument. */
4645 static bool
4646 stab_demangle_arg (struct stab_demangle_info *minfo, const char **pp,
4647 debug_type **pargs, unsigned int *pcount,
4648 unsigned int *palloc)
4650 const char *start;
4651 debug_type type;
4653 start = *pp;
4654 if (! stab_demangle_type (minfo, pp,
4655 pargs == NULL ? (debug_type *) NULL : &type)
4656 || ! stab_demangle_remember_type (minfo, start, *pp - start))
4657 return false;
4659 if (pargs != NULL)
4661 if (type == DEBUG_TYPE_NULL)
4662 return false;
4664 if (*pcount + 1 >= *palloc)
4666 *palloc += 10;
4667 *pargs = xrealloc (*pargs, *palloc * sizeof (**pargs));
4669 (*pargs)[*pcount] = type;
4670 ++*pcount;
4673 return true;
4676 /* Demangle a type. If the ptype argument is not NULL, *ptype is set
4677 to the newly allocated type. */
4679 static bool
4680 stab_demangle_type (struct stab_demangle_info *minfo, const char **pp,
4681 debug_type *ptype)
4683 const char *orig;
4685 orig = *pp;
4687 switch (**pp)
4689 case 'P':
4690 case 'p':
4691 /* A pointer type. */
4692 ++*pp;
4693 if (! stab_demangle_type (minfo, pp, ptype))
4694 return false;
4695 if (ptype != NULL)
4696 *ptype = debug_make_pointer_type (minfo->dhandle, *ptype);
4697 break;
4699 case 'R':
4700 /* A reference type. */
4701 ++*pp;
4702 if (! stab_demangle_type (minfo, pp, ptype))
4703 return false;
4704 if (ptype != NULL)
4705 *ptype = debug_make_reference_type (minfo->dhandle, *ptype);
4706 break;
4708 case 'A':
4709 /* An array. */
4711 unsigned long high;
4713 ++*pp;
4714 high = 0;
4715 while (**pp != '\0' && **pp != '_')
4717 if (! ISDIGIT (**pp))
4719 stab_bad_demangle (orig);
4720 return false;
4722 high *= 10;
4723 high += **pp - '0';
4724 ++*pp;
4726 if (**pp != '_')
4728 stab_bad_demangle (orig);
4729 return false;
4731 ++*pp;
4733 if (! stab_demangle_type (minfo, pp, ptype))
4734 return false;
4735 if (ptype != NULL)
4737 debug_type int_type;
4739 int_type = debug_find_named_type (minfo->dhandle, "int");
4740 if (int_type == NULL)
4741 int_type = debug_make_int_type (minfo->dhandle, 4, false);
4742 *ptype = debug_make_array_type (minfo->dhandle, *ptype, int_type,
4743 0, high, false);
4746 break;
4748 case 'T':
4749 /* A back reference to a remembered type. */
4751 unsigned int i;
4752 const char *p;
4754 ++*pp;
4755 if (! stab_demangle_get_count (pp, &i))
4757 stab_bad_demangle (orig);
4758 return false;
4760 if (i >= minfo->typestring_count)
4762 stab_bad_demangle (orig);
4763 return false;
4765 p = minfo->typestrings[i].typestring;
4766 if (! stab_demangle_type (minfo, &p, ptype))
4767 return false;
4769 break;
4771 case 'F':
4772 /* A function. */
4774 debug_type *args;
4775 bool varargs;
4777 ++*pp;
4778 if (! stab_demangle_args (minfo, pp,
4779 (ptype == NULL
4780 ? (debug_type **) NULL
4781 : &args),
4782 (ptype == NULL
4783 ? (bool *) NULL
4784 : &varargs)))
4785 return false;
4786 if (**pp != '_')
4788 /* cplus_demangle will accept a function without a return
4789 type, but I don't know when that will happen, or what
4790 to do if it does. */
4791 stab_bad_demangle (orig);
4792 return false;
4794 ++*pp;
4795 if (! stab_demangle_type (minfo, pp, ptype))
4796 return false;
4797 if (ptype != NULL)
4798 *ptype = debug_make_function_type (minfo->dhandle, *ptype, args,
4799 varargs);
4802 break;
4804 case 'M':
4805 case 'O':
4807 bool memberp;
4808 debug_type class_type = DEBUG_TYPE_NULL;
4809 debug_type *args;
4810 bool varargs;
4811 unsigned int n;
4812 const char *name;
4814 memberp = **pp == 'M';
4815 args = NULL;
4816 varargs = false;
4818 ++*pp;
4819 if (ISDIGIT (**pp))
4821 n = stab_demangle_count (pp);
4822 if (strlen (*pp) < n)
4824 stab_bad_demangle (orig);
4825 return false;
4827 name = *pp;
4828 *pp += n;
4830 if (ptype != NULL)
4832 class_type = stab_find_tagged_type (minfo->dhandle,
4833 minfo->info,
4834 name, (int) n,
4835 DEBUG_KIND_CLASS);
4836 if (class_type == DEBUG_TYPE_NULL)
4837 return false;
4840 else if (**pp == 'Q')
4842 if (! stab_demangle_qualified (minfo, pp,
4843 (ptype == NULL
4844 ? (debug_type *) NULL
4845 : &class_type)))
4846 return false;
4848 else
4850 stab_bad_demangle (orig);
4851 return false;
4854 if (memberp)
4856 if (**pp == 'C')
4858 ++*pp;
4860 else if (**pp == 'V')
4862 ++*pp;
4864 if (**pp != 'F')
4866 stab_bad_demangle (orig);
4867 return false;
4869 ++*pp;
4870 if (! stab_demangle_args (minfo, pp,
4871 (ptype == NULL
4872 ? (debug_type **) NULL
4873 : &args),
4874 (ptype == NULL
4875 ? (bool *) NULL
4876 : &varargs)))
4877 return false;
4880 if (**pp != '_')
4882 stab_bad_demangle (orig);
4883 return false;
4885 ++*pp;
4887 if (! stab_demangle_type (minfo, pp, ptype))
4888 return false;
4890 if (ptype != NULL)
4892 if (! memberp)
4893 *ptype = debug_make_offset_type (minfo->dhandle, class_type,
4894 *ptype);
4895 else
4897 /* FIXME: We have no way to record constp or
4898 volatilep. */
4899 *ptype = debug_make_method_type (minfo->dhandle, *ptype,
4900 class_type, args, varargs);
4904 break;
4906 case 'G':
4907 ++*pp;
4908 if (! stab_demangle_type (minfo, pp, ptype))
4909 return false;
4910 break;
4912 case 'C':
4913 ++*pp;
4914 if (! stab_demangle_type (minfo, pp, ptype))
4915 return false;
4916 if (ptype != NULL)
4917 *ptype = debug_make_const_type (minfo->dhandle, *ptype);
4918 break;
4920 case 'Q':
4922 if (! stab_demangle_qualified (minfo, pp, ptype))
4923 return false;
4925 break;
4927 default:
4928 if (! stab_demangle_fund_type (minfo, pp, ptype))
4929 return false;
4930 break;
4933 return true;
4936 /* Demangle a fundamental type. If the ptype argument is not NULL,
4937 *ptype is set to the newly allocated type. */
4939 static bool
4940 stab_demangle_fund_type (struct stab_demangle_info *minfo, const char **pp,
4941 debug_type *ptype)
4943 const char *orig;
4944 bool constp, volatilep, unsignedp, signedp;
4945 bool done;
4947 orig = *pp;
4949 constp = false;
4950 volatilep = false;
4951 unsignedp = false;
4952 signedp = false;
4954 done = false;
4955 while (! done)
4957 switch (**pp)
4959 case 'C':
4960 constp = true;
4961 ++*pp;
4962 break;
4964 case 'U':
4965 unsignedp = true;
4966 ++*pp;
4967 break;
4969 case 'S':
4970 signedp = true;
4971 ++*pp;
4972 break;
4974 case 'V':
4975 volatilep = true;
4976 ++*pp;
4977 break;
4979 default:
4980 done = true;
4981 break;
4985 switch (**pp)
4987 case '\0':
4988 case '_':
4989 /* cplus_demangle permits this, but I don't know what it means. */
4990 stab_bad_demangle (orig);
4991 break;
4993 case 'v': /* void */
4994 if (ptype != NULL)
4996 *ptype = debug_find_named_type (minfo->dhandle, "void");
4997 if (*ptype == DEBUG_TYPE_NULL)
4998 *ptype = debug_make_void_type (minfo->dhandle);
5000 ++*pp;
5001 break;
5003 case 'x': /* long long */
5004 if (ptype != NULL)
5006 *ptype = debug_find_named_type (minfo->dhandle,
5007 (unsignedp
5008 ? "long long unsigned int"
5009 : "long long int"));
5010 if (*ptype == DEBUG_TYPE_NULL)
5011 *ptype = debug_make_int_type (minfo->dhandle, 8, unsignedp);
5013 ++*pp;
5014 break;
5016 case 'l': /* long */
5017 if (ptype != NULL)
5019 *ptype = debug_find_named_type (minfo->dhandle,
5020 (unsignedp
5021 ? "long unsigned int"
5022 : "long int"));
5023 if (*ptype == DEBUG_TYPE_NULL)
5024 *ptype = debug_make_int_type (minfo->dhandle, 4, unsignedp);
5026 ++*pp;
5027 break;
5029 case 'i': /* int */
5030 if (ptype != NULL)
5032 *ptype = debug_find_named_type (minfo->dhandle,
5033 (unsignedp
5034 ? "unsigned int"
5035 : "int"));
5036 if (*ptype == DEBUG_TYPE_NULL)
5037 *ptype = debug_make_int_type (minfo->dhandle, 4, unsignedp);
5039 ++*pp;
5040 break;
5042 case 's': /* short */
5043 if (ptype != NULL)
5045 *ptype = debug_find_named_type (minfo->dhandle,
5046 (unsignedp
5047 ? "short unsigned int"
5048 : "short int"));
5049 if (*ptype == DEBUG_TYPE_NULL)
5050 *ptype = debug_make_int_type (minfo->dhandle, 2, unsignedp);
5052 ++*pp;
5053 break;
5055 case 'b': /* bool */
5056 if (ptype != NULL)
5058 *ptype = debug_find_named_type (minfo->dhandle, "bool");
5059 if (*ptype == DEBUG_TYPE_NULL)
5060 *ptype = debug_make_bool_type (minfo->dhandle, 4);
5062 ++*pp;
5063 break;
5065 case 'c': /* char */
5066 if (ptype != NULL)
5068 *ptype = debug_find_named_type (minfo->dhandle,
5069 (unsignedp
5070 ? "unsigned char"
5071 : (signedp
5072 ? "signed char"
5073 : "char")));
5074 if (*ptype == DEBUG_TYPE_NULL)
5075 *ptype = debug_make_int_type (minfo->dhandle, 1, unsignedp);
5077 ++*pp;
5078 break;
5080 case 'w': /* wchar_t */
5081 if (ptype != NULL)
5083 *ptype = debug_find_named_type (minfo->dhandle, "__wchar_t");
5084 if (*ptype == DEBUG_TYPE_NULL)
5085 *ptype = debug_make_int_type (minfo->dhandle, 2, true);
5087 ++*pp;
5088 break;
5090 case 'r': /* long double */
5091 if (ptype != NULL)
5093 *ptype = debug_find_named_type (minfo->dhandle, "long double");
5094 if (*ptype == DEBUG_TYPE_NULL)
5095 *ptype = debug_make_float_type (minfo->dhandle, 8);
5097 ++*pp;
5098 break;
5100 case 'd': /* double */
5101 if (ptype != NULL)
5103 *ptype = debug_find_named_type (minfo->dhandle, "double");
5104 if (*ptype == DEBUG_TYPE_NULL)
5105 *ptype = debug_make_float_type (minfo->dhandle, 8);
5107 ++*pp;
5108 break;
5110 case 'f': /* float */
5111 if (ptype != NULL)
5113 *ptype = debug_find_named_type (minfo->dhandle, "float");
5114 if (*ptype == DEBUG_TYPE_NULL)
5115 *ptype = debug_make_float_type (minfo->dhandle, 4);
5117 ++*pp;
5118 break;
5120 case 'G':
5121 ++*pp;
5122 if (! ISDIGIT (**pp))
5124 stab_bad_demangle (orig);
5125 return false;
5127 /* Fall through. */
5128 case '0': case '1': case '2': case '3': case '4':
5129 case '5': case '6': case '7': case '8': case '9':
5131 const char *hold;
5133 if (! stab_demangle_class (minfo, pp, &hold))
5134 return false;
5135 if (ptype != NULL)
5137 char *name;
5139 name = savestring (minfo->dhandle, hold, *pp - hold);
5140 *ptype = debug_find_named_type (minfo->dhandle, name);
5141 if (*ptype == DEBUG_TYPE_NULL)
5143 /* FIXME: It is probably incorrect to assume that
5144 undefined types are tagged types. */
5145 *ptype = stab_find_tagged_type (minfo->dhandle, minfo->info,
5146 hold, *pp - hold,
5147 DEBUG_KIND_ILLEGAL);
5148 if (*ptype == DEBUG_TYPE_NULL)
5149 return false;
5153 break;
5155 case 't':
5157 char *name;
5159 if (! stab_demangle_template (minfo, pp,
5160 ptype != NULL ? &name : NULL))
5161 return false;
5162 if (ptype != NULL)
5164 *ptype = stab_find_tagged_type (minfo->dhandle, minfo->info,
5165 name, strlen (name),
5166 DEBUG_KIND_CLASS);
5167 if (*ptype == DEBUG_TYPE_NULL)
5168 return false;
5171 break;
5173 default:
5174 stab_bad_demangle (orig);
5175 return false;
5178 if (ptype != NULL)
5180 if (constp)
5181 *ptype = debug_make_const_type (minfo->dhandle, *ptype);
5182 if (volatilep)
5183 *ptype = debug_make_volatile_type (minfo->dhandle, *ptype);
5186 return true;
5189 /* Remember a type string in a demangled string. */
5191 static bool
5192 stab_demangle_remember_type (struct stab_demangle_info *minfo,
5193 const char *p, int len)
5195 if (minfo->typestring_count >= minfo->typestring_alloc)
5197 minfo->typestring_alloc += 10;
5198 minfo->typestrings
5199 = xrealloc (minfo->typestrings,
5200 minfo->typestring_alloc * sizeof (*minfo->typestrings));
5203 minfo->typestrings[minfo->typestring_count].typestring = p;
5204 minfo->typestrings[minfo->typestring_count].len = (unsigned int) len;
5205 ++minfo->typestring_count;
5207 return true;
5210 /* Demangle names encoded using the g++ V3 ABI. The newer versions of
5211 g++ which use this ABI do not encode ordinary method argument types
5212 in a mangled name; they simply output the argument types. However,
5213 for a static method, g++ simply outputs the return type and the
5214 physical name. So in that case we need to demangle the name here.
5215 Here PHYSNAME is the physical name of the function, and we set the
5216 variable pointed at by PVARARGS to indicate whether this function
5217 is varargs. This returns NULL, or a NULL terminated array of
5218 argument types. */
5220 static debug_type *
5221 stab_demangle_v3_argtypes (void *dhandle, struct stab_handle *info,
5222 const char *physname, bool *pvarargs)
5224 struct demangle_component *dc;
5225 void *mem;
5226 debug_type *pargs;
5228 dc = cplus_demangle_v3_components (physname, DMGL_PARAMS | demangle_flags, &mem);
5229 if (dc == NULL)
5231 stab_bad_demangle (physname);
5232 return NULL;
5235 /* We expect to see TYPED_NAME, and the right subtree describes the
5236 function type. */
5237 if (dc->type != DEMANGLE_COMPONENT_TYPED_NAME
5238 || dc->u.s_binary.right->type != DEMANGLE_COMPONENT_FUNCTION_TYPE)
5240 fprintf (stderr, _("Demangled name is not a function\n"));
5241 free (mem);
5242 return NULL;
5245 pargs = stab_demangle_v3_arglist (dhandle, info,
5246 dc->u.s_binary.right->u.s_binary.right,
5247 pvarargs);
5249 free (mem);
5251 return pargs;
5254 /* Demangle an argument list in a struct demangle_component tree.
5255 Returns a DEBUG_TYPE_NULL terminated array of argument types, and
5256 sets *PVARARGS to indicate whether this is a varargs function. */
5258 static debug_type *
5259 stab_demangle_v3_arglist (void *dhandle, struct stab_handle *info,
5260 struct demangle_component *arglist,
5261 bool *pvarargs)
5263 struct demangle_component *dc;
5264 unsigned int alloc, count;
5265 debug_type *pargs, *xargs;
5267 alloc = 10;
5268 pargs = xmalloc (alloc * sizeof (*pargs));
5269 *pvarargs = false;
5271 count = 0;
5273 for (dc = arglist;
5274 dc != NULL;
5275 dc = dc->u.s_binary.right)
5277 debug_type arg;
5278 bool varargs;
5280 if (dc->type != DEMANGLE_COMPONENT_ARGLIST)
5282 fprintf (stderr, _("Unexpected type in v3 arglist demangling\n"));
5283 free (pargs);
5284 return NULL;
5287 /* PR 13925: Cope if the demangler returns an empty
5288 context for a function with no arguments. */
5289 if (dc->u.s_binary.left == NULL)
5290 break;
5292 arg = stab_demangle_v3_arg (dhandle, info, dc->u.s_binary.left,
5293 NULL, &varargs);
5294 if (arg == NULL)
5296 if (varargs)
5298 *pvarargs = true;
5299 continue;
5301 free (pargs);
5302 return NULL;
5305 if (count + 1 >= alloc)
5307 alloc += 10;
5308 pargs = xrealloc (pargs, alloc * sizeof (*pargs));
5311 pargs[count] = arg;
5312 ++count;
5315 pargs[count] = DEBUG_TYPE_NULL;
5316 xargs = debug_xalloc (dhandle, (count + 1) * sizeof (*pargs));
5317 memcpy (xargs, pargs, (count + 1) * sizeof (*pargs));
5318 free (pargs);
5320 return xargs;
5323 /* Convert a struct demangle_component tree describing an argument
5324 type into a debug_type. */
5326 static debug_type
5327 stab_demangle_v3_arg (void *dhandle, struct stab_handle *info,
5328 struct demangle_component *dc, debug_type context,
5329 bool *pvarargs)
5331 debug_type dt;
5333 if (pvarargs != NULL)
5334 *pvarargs = false;
5336 switch (dc->type)
5338 /* FIXME: These are demangle component types which we probably
5339 need to handle one way or another. */
5340 case DEMANGLE_COMPONENT_LOCAL_NAME:
5341 case DEMANGLE_COMPONENT_TYPED_NAME:
5342 case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
5343 case DEMANGLE_COMPONENT_CTOR:
5344 case DEMANGLE_COMPONENT_DTOR:
5345 case DEMANGLE_COMPONENT_JAVA_CLASS:
5346 case DEMANGLE_COMPONENT_RESTRICT_THIS:
5347 case DEMANGLE_COMPONENT_VOLATILE_THIS:
5348 case DEMANGLE_COMPONENT_CONST_THIS:
5349 case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
5350 case DEMANGLE_COMPONENT_COMPLEX:
5351 case DEMANGLE_COMPONENT_IMAGINARY:
5352 case DEMANGLE_COMPONENT_VENDOR_TYPE:
5353 case DEMANGLE_COMPONENT_ARRAY_TYPE:
5354 case DEMANGLE_COMPONENT_PTRMEM_TYPE:
5355 case DEMANGLE_COMPONENT_ARGLIST:
5356 default:
5357 fprintf (stderr, _("Unrecognized demangle component %d\n"),
5358 (int) dc->type);
5359 return NULL;
5361 case DEMANGLE_COMPONENT_NAME:
5362 if (context != NULL)
5364 const debug_field *fields;
5366 fields = debug_get_fields (dhandle, context);
5367 if (fields != NULL)
5369 /* Try to find this type by looking through the context
5370 class. */
5371 for (; *fields != DEBUG_FIELD_NULL; fields++)
5373 debug_type ft;
5374 const char *dn;
5376 ft = debug_get_field_type (dhandle, *fields);
5377 if (ft == NULL)
5378 return NULL;
5379 dn = debug_get_type_name (dhandle, ft);
5380 if (dn != NULL
5381 && (int) strlen (dn) == dc->u.s_name.len
5382 && strncmp (dn, dc->u.s_name.s, dc->u.s_name.len) == 0)
5383 return ft;
5387 return stab_find_tagged_type (dhandle, info, dc->u.s_name.s,
5388 dc->u.s_name.len, DEBUG_KIND_ILLEGAL);
5390 case DEMANGLE_COMPONENT_QUAL_NAME:
5391 context = stab_demangle_v3_arg (dhandle, info, dc->u.s_binary.left,
5392 context, NULL);
5393 if (context == NULL)
5394 return NULL;
5395 return stab_demangle_v3_arg (dhandle, info, dc->u.s_binary.right,
5396 context, NULL);
5398 case DEMANGLE_COMPONENT_TEMPLATE:
5400 char *p;
5401 size_t alc;
5403 /* We print this component to get a class name which we can
5404 use. FIXME: This probably won't work if the template uses
5405 template parameters which refer to an outer template. */
5406 p = cplus_demangle_print (DMGL_PARAMS | demangle_flags, dc, 20, &alc);
5407 if (p == NULL)
5409 fprintf (stderr, _("Failed to print demangled template\n"));
5410 return NULL;
5412 dt = stab_find_tagged_type (dhandle, info, p, strlen (p),
5413 DEBUG_KIND_CLASS);
5414 free (p);
5415 return dt;
5418 case DEMANGLE_COMPONENT_SUB_STD:
5419 return stab_find_tagged_type (dhandle, info, dc->u.s_string.string,
5420 dc->u.s_string.len, DEBUG_KIND_ILLEGAL);
5422 case DEMANGLE_COMPONENT_RESTRICT:
5423 case DEMANGLE_COMPONENT_VOLATILE:
5424 case DEMANGLE_COMPONENT_CONST:
5425 case DEMANGLE_COMPONENT_POINTER:
5426 case DEMANGLE_COMPONENT_REFERENCE:
5427 dt = stab_demangle_v3_arg (dhandle, info, dc->u.s_binary.left, NULL,
5428 NULL);
5429 if (dt == NULL)
5430 return NULL;
5432 switch (dc->type)
5434 default:
5435 abort ();
5436 case DEMANGLE_COMPONENT_RESTRICT:
5437 /* FIXME: We have no way to represent restrict. */
5438 return dt;
5439 case DEMANGLE_COMPONENT_VOLATILE:
5440 return debug_make_volatile_type (dhandle, dt);
5441 case DEMANGLE_COMPONENT_CONST:
5442 return debug_make_const_type (dhandle, dt);
5443 case DEMANGLE_COMPONENT_POINTER:
5444 return debug_make_pointer_type (dhandle, dt);
5445 case DEMANGLE_COMPONENT_REFERENCE:
5446 return debug_make_reference_type (dhandle, dt);
5449 case DEMANGLE_COMPONENT_FUNCTION_TYPE:
5451 debug_type *pargs;
5452 bool varargs;
5454 if (dc->u.s_binary.left == NULL)
5456 /* In this case the return type is actually unknown.
5457 However, I'm not sure this will ever arise in practice;
5458 normally an unknown return type would only appear at
5459 the top level, which is handled above. */
5460 dt = debug_make_void_type (dhandle);
5462 else
5463 dt = stab_demangle_v3_arg (dhandle, info, dc->u.s_binary.left, NULL,
5464 NULL);
5465 if (dt == NULL)
5466 return NULL;
5468 pargs = stab_demangle_v3_arglist (dhandle, info,
5469 dc->u.s_binary.right,
5470 &varargs);
5471 if (pargs == NULL)
5472 return NULL;
5474 return debug_make_function_type (dhandle, dt, pargs, varargs);
5477 case DEMANGLE_COMPONENT_BUILTIN_TYPE:
5479 char *p;
5480 size_t alc;
5481 debug_type ret;
5483 /* We print this component in order to find out the type name.
5484 FIXME: Should we instead expose the
5485 demangle_builtin_type_info structure? */
5486 p = cplus_demangle_print (DMGL_PARAMS | demangle_flags, dc, 20, &alc);
5487 if (p == NULL)
5489 fprintf (stderr, _("Couldn't get demangled builtin type\n"));
5490 return NULL;
5493 /* The mangling is based on the type, but does not itself
5494 indicate what the sizes are. So we have to guess. */
5495 if (strcmp (p, "signed char") == 0)
5496 ret = debug_make_int_type (dhandle, 1, false);
5497 else if (strcmp (p, "bool") == 0)
5498 ret = debug_make_bool_type (dhandle, 1);
5499 else if (strcmp (p, "char") == 0)
5500 ret = debug_make_int_type (dhandle, 1, false);
5501 else if (strcmp (p, "double") == 0)
5502 ret = debug_make_float_type (dhandle, 8);
5503 else if (strcmp (p, "long double") == 0)
5504 ret = debug_make_float_type (dhandle, 8);
5505 else if (strcmp (p, "float") == 0)
5506 ret = debug_make_float_type (dhandle, 4);
5507 else if (strcmp (p, "__float128") == 0)
5508 ret = debug_make_float_type (dhandle, 16);
5509 else if (strcmp (p, "unsigned char") == 0)
5510 ret = debug_make_int_type (dhandle, 1, true);
5511 else if (strcmp (p, "int") == 0)
5512 ret = debug_make_int_type (dhandle, 4, false);
5513 else if (strcmp (p, "unsigned int") == 0)
5514 ret = debug_make_int_type (dhandle, 4, true);
5515 else if (strcmp (p, "long") == 0)
5516 ret = debug_make_int_type (dhandle, 4, false);
5517 else if (strcmp (p, "unsigned long") == 0)
5518 ret = debug_make_int_type (dhandle, 4, true);
5519 else if (strcmp (p, "__int128") == 0)
5520 ret = debug_make_int_type (dhandle, 16, false);
5521 else if (strcmp (p, "unsigned __int128") == 0)
5522 ret = debug_make_int_type (dhandle, 16, true);
5523 else if (strcmp (p, "short") == 0)
5524 ret = debug_make_int_type (dhandle, 2, false);
5525 else if (strcmp (p, "unsigned short") == 0)
5526 ret = debug_make_int_type (dhandle, 2, true);
5527 else if (strcmp (p, "void") == 0)
5528 ret = debug_make_void_type (dhandle);
5529 else if (strcmp (p, "wchar_t") == 0)
5530 ret = debug_make_int_type (dhandle, 4, true);
5531 else if (strcmp (p, "long long") == 0)
5532 ret = debug_make_int_type (dhandle, 8, false);
5533 else if (strcmp (p, "unsigned long long") == 0)
5534 ret = debug_make_int_type (dhandle, 8, true);
5535 else if (strcmp (p, "...") == 0)
5537 if (pvarargs == NULL)
5538 fprintf (stderr, _("Unexpected demangled varargs\n"));
5539 else
5540 *pvarargs = true;
5541 ret = NULL;
5543 else
5545 fprintf (stderr, _("Unrecognized demangled builtin type\n"));
5546 ret = NULL;
5549 free (p);
5551 return ret;