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