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