OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [binutils/] [stabs.c] - Blame information for rev 222

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.