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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [binutils-2.20.1/] [binutils/] [stabs.c] - Blame information for rev 818

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 205 julius
/* stabs.c -- Parse stabs debugging information
2
   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
3
   2005, 2006, 2007, 2008  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 663 jeremybenn
                   int desc ATTRIBUTE_UNUSED, bfd_vma value, const char *string)
681 205 julius
{
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
          return DEBUG_TYPE_NULL;
1984
        }
1985
      ++*pp;
1986
 
1987
      if (n + 1 >= alloc)
1988
        {
1989
          alloc += 10;
1990
          names = ((const char **)
1991
                   xrealloc (names, alloc * sizeof *names));
1992
          values = ((bfd_signed_vma *)
1993
                    xrealloc (values, alloc * sizeof *values));
1994
        }
1995
 
1996
      names[n] = name;
1997
      values[n] = val;
1998
      ++n;
1999
    }
2000
 
2001
  names[n] = NULL;
2002
  values[n] = 0;
2003
 
2004
  if (**pp == ';')
2005
    ++*pp;
2006
 
2007
  return debug_make_enum_type (dhandle, names, values);
2008
}
2009
 
2010
/* Read the description of a structure (or union type) and return an object
2011
   describing the type.
2012
 
2013
   PP points to a character pointer that points to the next unconsumed token
2014
   in the stabs string.  For example, given stabs "A:T4=s4a:1,0,32;;",
2015
   *PP will point to "4a:1,0,32;;".  */
2016
 
2017
static debug_type
2018
parse_stab_struct_type (void *dhandle, struct stab_handle *info,
2019
                        const char *tagname, const char **pp,
2020
                        bfd_boolean structp, const int *typenums)
2021
{
2022
  bfd_vma size;
2023
  debug_baseclass *baseclasses;
2024
  debug_field *fields;
2025
  bfd_boolean statics;
2026
  debug_method *methods;
2027
  debug_type vptrbase;
2028
  bfd_boolean ownvptr;
2029
 
2030
  /* Get the size.  */
2031
  size = parse_number (pp, (bfd_boolean *) NULL);
2032
 
2033
  /* Get the other information.  */
2034
  if (! parse_stab_baseclasses (dhandle, info, pp, &baseclasses)
2035
      || ! parse_stab_struct_fields (dhandle, info, pp, &fields, &statics)
2036
      || ! parse_stab_members (dhandle, info, tagname, pp, typenums, &methods)
2037
      || ! parse_stab_tilde_field (dhandle, info, pp, typenums, &vptrbase,
2038
                                   &ownvptr))
2039
    return DEBUG_TYPE_NULL;
2040
 
2041
  if (! statics
2042
      && baseclasses == NULL
2043
      && methods == NULL
2044
      && vptrbase == DEBUG_TYPE_NULL
2045
      && ! ownvptr)
2046
    return debug_make_struct_type (dhandle, structp, size, fields);
2047
 
2048
  return debug_make_object_type (dhandle, structp, size, fields, baseclasses,
2049
                                 methods, vptrbase, ownvptr);
2050
}
2051
 
2052
/* The stabs for C++ derived classes contain baseclass information which
2053
   is marked by a '!' character after the total size.  This function is
2054
   called when we encounter the baseclass marker, and slurps up all the
2055
   baseclass information.
2056
 
2057
   Immediately following the '!' marker is the number of base classes that
2058
   the class is derived from, followed by information for each base class.
2059
   For each base class, there are two visibility specifiers, a bit offset
2060
   to the base class information within the derived class, a reference to
2061
   the type for the base class, and a terminating semicolon.
2062
 
2063
   A typical example, with two base classes, would be "!2,020,19;0264,21;".
2064
                                                       ^^ ^ ^ ^  ^ ^  ^
2065
        Baseclass information marker __________________|| | | |  | |  |
2066
        Number of baseclasses __________________________| | | |  | |  |
2067
        Visibility specifiers (2) ________________________| | |  | |  |
2068
        Offset in bits from start of class _________________| |  | |  |
2069
        Type number for base class ___________________________|  | |  |
2070
        Visibility specifiers (2) _______________________________| |  |
2071
        Offset in bits from start of class ________________________|  |
2072
        Type number of base class ____________________________________|
2073
 
2074
  Return TRUE for success, FALSE for failure.  */
2075
 
2076
static bfd_boolean
2077
parse_stab_baseclasses (void *dhandle, struct stab_handle *info,
2078
                        const char **pp, debug_baseclass **retp)
2079
{
2080
  const char *orig;
2081
  unsigned int c, i;
2082
  debug_baseclass *classes;
2083
 
2084
  *retp = NULL;
2085
 
2086
  orig = *pp;
2087
 
2088
  if (**pp != '!')
2089
    {
2090
      /* No base classes.  */
2091
      return TRUE;
2092
    }
2093
  ++*pp;
2094
 
2095
  c = (unsigned int) parse_number (pp, (bfd_boolean *) NULL);
2096
 
2097
  if (**pp != ',')
2098
    {
2099
      bad_stab (orig);
2100
      return FALSE;
2101
    }
2102
  ++*pp;
2103
 
2104
  classes = (debug_baseclass *) xmalloc ((c + 1) * sizeof (**retp));
2105
 
2106
  for (i = 0; i < c; i++)
2107
    {
2108
      bfd_boolean is_virtual;
2109
      enum debug_visibility visibility;
2110
      bfd_vma bitpos;
2111
      debug_type type;
2112
 
2113
      switch (**pp)
2114
        {
2115
        case '0':
2116
          is_virtual = FALSE;
2117
          break;
2118
        case '1':
2119
          is_virtual = TRUE;
2120
          break;
2121
        default:
2122
          warn_stab (orig, _("unknown virtual character for baseclass"));
2123
          is_virtual = FALSE;
2124
          break;
2125
        }
2126
      ++*pp;
2127
 
2128
      switch (**pp)
2129
        {
2130
        case '0':
2131
          visibility = DEBUG_VISIBILITY_PRIVATE;
2132
          break;
2133
        case '1':
2134
          visibility = DEBUG_VISIBILITY_PROTECTED;
2135
          break;
2136
        case '2':
2137
          visibility = DEBUG_VISIBILITY_PUBLIC;
2138
          break;
2139
        default:
2140
          warn_stab (orig, _("unknown visibility character for baseclass"));
2141
          visibility = DEBUG_VISIBILITY_PUBLIC;
2142
          break;
2143
        }
2144
      ++*pp;
2145
 
2146
      /* The remaining value is the bit offset of the portion of the
2147
         object corresponding to this baseclass.  Always zero in the
2148
         absence of multiple inheritance.  */
2149
      bitpos = parse_number (pp, (bfd_boolean *) NULL);
2150
      if (**pp != ',')
2151
        {
2152
          bad_stab (orig);
2153
          return FALSE;
2154
        }
2155
      ++*pp;
2156
 
2157
      type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2158
                              (debug_type **) NULL);
2159
      if (type == DEBUG_TYPE_NULL)
2160
        return FALSE;
2161
 
2162
      classes[i] = debug_make_baseclass (dhandle, type, bitpos, is_virtual,
2163
                                         visibility);
2164
      if (classes[i] == DEBUG_BASECLASS_NULL)
2165
        return FALSE;
2166
 
2167
      if (**pp != ';')
2168
        return FALSE;
2169
      ++*pp;
2170
    }
2171
 
2172
  classes[i] = DEBUG_BASECLASS_NULL;
2173
 
2174
  *retp = classes;
2175
 
2176
  return TRUE;
2177
}
2178
 
2179
/* Read struct or class data fields.  They have the form:
2180
 
2181
        NAME : [VISIBILITY] TYPENUM , BITPOS , BITSIZE ;
2182
 
2183
   At the end, we see a semicolon instead of a field.
2184
 
2185
   In C++, this may wind up being NAME:?TYPENUM:PHYSNAME; for
2186
   a static field.
2187
 
2188
   The optional VISIBILITY is one of:
2189
 
2190
        '/0'    (VISIBILITY_PRIVATE)
2191
        '/1'    (VISIBILITY_PROTECTED)
2192
        '/2'    (VISIBILITY_PUBLIC)
2193
        '/9'    (VISIBILITY_IGNORE)
2194
 
2195
   or nothing, for C style fields with public visibility.
2196
 
2197
   Returns 1 for success, 0 for failure.  */
2198
 
2199
static bfd_boolean
2200
parse_stab_struct_fields (void *dhandle, struct stab_handle *info,
2201
                          const char **pp, debug_field **retp,
2202
                          bfd_boolean *staticsp)
2203
{
2204
  const char *orig;
2205
  const char *p;
2206
  debug_field *fields;
2207
  unsigned int c;
2208
  unsigned int alloc;
2209
 
2210
  *retp = NULL;
2211
  *staticsp = FALSE;
2212
 
2213
  orig = *pp;
2214
 
2215
  c = 0;
2216
  alloc = 10;
2217
  fields = (debug_field *) xmalloc (alloc * sizeof *fields);
2218
  while (**pp != ';')
2219
    {
2220
      /* FIXME: gdb checks os9k_stabs here.  */
2221
 
2222
      p = *pp;
2223
 
2224
      /* Add 1 to c to leave room for NULL pointer at end.  */
2225
      if (c + 1 >= alloc)
2226
        {
2227
          alloc += 10;
2228
          fields = ((debug_field *)
2229
                    xrealloc (fields, alloc * sizeof *fields));
2230
        }
2231
 
2232
      /* If it starts with CPLUS_MARKER it is a special abbreviation,
2233
         unless the CPLUS_MARKER is followed by an underscore, in
2234
         which case it is just the name of an anonymous type, which we
2235
         should handle like any other type name.  We accept either '$'
2236
         or '.', because a field name can never contain one of these
2237
         characters except as a CPLUS_MARKER.  */
2238
 
2239
      if ((*p == '$' || *p == '.') && p[1] != '_')
2240
        {
2241
          ++*pp;
2242
          if (! parse_stab_cpp_abbrev (dhandle, info, pp, fields + c))
2243
            return FALSE;
2244
          ++c;
2245
          continue;
2246
        }
2247
 
2248
      /* Look for the ':' that separates the field name from the field
2249
         values.  Data members are delimited by a single ':', while member
2250
         functions are delimited by a pair of ':'s.  When we hit the member
2251
         functions (if any), terminate scan loop and return.  */
2252
 
2253
      p = strchr (p, ':');
2254
      if (p == NULL)
2255
        {
2256
          bad_stab (orig);
2257
          return FALSE;
2258
        }
2259
 
2260
      if (p[1] == ':')
2261
        break;
2262
 
2263
      if (! parse_stab_one_struct_field (dhandle, info, pp, p, fields + c,
2264
                                         staticsp))
2265
        return FALSE;
2266
 
2267
      ++c;
2268
    }
2269
 
2270
  fields[c] = DEBUG_FIELD_NULL;
2271
 
2272
  *retp = fields;
2273
 
2274
  return TRUE;
2275
}
2276
 
2277
/* Special GNU C++ name.  */
2278
 
2279
static bfd_boolean
2280
parse_stab_cpp_abbrev (void *dhandle, struct stab_handle *info,
2281
                       const char **pp, debug_field *retp)
2282
{
2283
  const char *orig;
2284
  int cpp_abbrev;
2285
  debug_type context;
2286
  const char *name;
2287
  const char *type_name;
2288
  debug_type type;
2289
  bfd_vma bitpos;
2290
 
2291
  *retp = DEBUG_FIELD_NULL;
2292
 
2293
  orig = *pp;
2294
 
2295
  if (**pp != 'v')
2296
    {
2297
      bad_stab (*pp);
2298
      return FALSE;
2299
    }
2300
  ++*pp;
2301
 
2302
  cpp_abbrev = **pp;
2303
  ++*pp;
2304
 
2305
  /* At this point, *pp points to something like "22:23=*22...", where
2306
     the type number before the ':' is the "context" and everything
2307
     after is a regular type definition.  Lookup the type, find it's
2308
     name, and construct the field name.  */
2309
 
2310
  context = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2311
                             (debug_type **) NULL);
2312
  if (context == DEBUG_TYPE_NULL)
2313
    return FALSE;
2314
 
2315
  switch (cpp_abbrev)
2316
    {
2317
    case 'f':
2318
      /* $vf -- a virtual function table pointer.  */
2319
      name = "_vptr$";
2320
      break;
2321
    case 'b':
2322
      /* $vb -- a virtual bsomethingorother */
2323
      type_name = debug_get_type_name (dhandle, context);
2324
      if (type_name == NULL)
2325
        {
2326
          warn_stab (orig, _("unnamed $vb type"));
2327
          type_name = "FOO";
2328
        }
2329
      name = concat ("_vb$", type_name, (const char *) NULL);
2330
      break;
2331
    default:
2332
      warn_stab (orig, _("unrecognized C++ abbreviation"));
2333
      name = "INVALID_CPLUSPLUS_ABBREV";
2334
      break;
2335
    }
2336
 
2337
  if (**pp != ':')
2338
    {
2339
      bad_stab (orig);
2340
      return FALSE;
2341
    }
2342
  ++*pp;
2343
 
2344
  type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2345
                          (debug_type **) NULL);
2346
  if (**pp != ',')
2347
    {
2348
      bad_stab (orig);
2349
      return FALSE;
2350
    }
2351
  ++*pp;
2352
 
2353
  bitpos = parse_number (pp, (bfd_boolean *) NULL);
2354
  if (**pp != ';')
2355
    {
2356
      bad_stab (orig);
2357
      return FALSE;
2358
    }
2359
  ++*pp;
2360
 
2361
  *retp = debug_make_field (dhandle, name, type, bitpos, 0,
2362
                            DEBUG_VISIBILITY_PRIVATE);
2363
  if (*retp == DEBUG_FIELD_NULL)
2364
    return FALSE;
2365
 
2366
  return TRUE;
2367
}
2368
 
2369
/* Parse a single field in a struct or union.  */
2370
 
2371
static bfd_boolean
2372
parse_stab_one_struct_field (void *dhandle, struct stab_handle *info,
2373
                             const char **pp, const char *p,
2374
                             debug_field *retp, bfd_boolean *staticsp)
2375
{
2376
  const char *orig;
2377
  char *name;
2378
  enum debug_visibility visibility;
2379
  debug_type type;
2380
  bfd_vma bitpos;
2381
  bfd_vma bitsize;
2382
 
2383
  orig = *pp;
2384
 
2385
  /* FIXME: gdb checks ARM_DEMANGLING here.  */
2386
 
2387
  name = savestring (*pp, p - *pp);
2388
 
2389
  *pp = p + 1;
2390
 
2391
  if (**pp != '/')
2392
    visibility = DEBUG_VISIBILITY_PUBLIC;
2393
  else
2394
    {
2395
      ++*pp;
2396
      switch (**pp)
2397
        {
2398
        case '0':
2399
          visibility = DEBUG_VISIBILITY_PRIVATE;
2400
          break;
2401
        case '1':
2402
          visibility = DEBUG_VISIBILITY_PROTECTED;
2403
          break;
2404
        case '2':
2405
          visibility = DEBUG_VISIBILITY_PUBLIC;
2406
          break;
2407
        default:
2408
          warn_stab (orig, _("unknown visibility character for field"));
2409
          visibility = DEBUG_VISIBILITY_PUBLIC;
2410
          break;
2411
        }
2412
      ++*pp;
2413
    }
2414
 
2415
  type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2416
                          (debug_type **) NULL);
2417
  if (type == DEBUG_TYPE_NULL)
2418
    return FALSE;
2419
 
2420
  if (**pp == ':')
2421
    {
2422
      char *varname;
2423
 
2424
      /* This is a static class member.  */
2425
      ++*pp;
2426
      p = strchr (*pp, ';');
2427
      if (p == NULL)
2428
        {
2429
          bad_stab (orig);
2430
          return FALSE;
2431
        }
2432
 
2433
      varname = savestring (*pp, p - *pp);
2434
 
2435
      *pp = p + 1;
2436
 
2437
      *retp = debug_make_static_member (dhandle, name, type, varname,
2438
                                        visibility);
2439
      *staticsp = TRUE;
2440
 
2441
      return TRUE;
2442
    }
2443
 
2444
  if (**pp != ',')
2445
    {
2446
      bad_stab (orig);
2447
      return FALSE;
2448
    }
2449
  ++*pp;
2450
 
2451
  bitpos = parse_number (pp, (bfd_boolean *) NULL);
2452
  if (**pp != ',')
2453
    {
2454
      bad_stab (orig);
2455
      return FALSE;
2456
    }
2457
  ++*pp;
2458
 
2459
  bitsize = parse_number (pp, (bfd_boolean *) NULL);
2460
  if (**pp != ';')
2461
    {
2462
      bad_stab (orig);
2463
      return FALSE;
2464
    }
2465
  ++*pp;
2466
 
2467
  if (bitpos == 0 && bitsize == 0)
2468
    {
2469
      /* This can happen in two cases: (1) at least for gcc 2.4.5 or
2470
         so, it is a field which has been optimized out.  The correct
2471
         stab for this case is to use VISIBILITY_IGNORE, but that is a
2472
         recent invention.  (2) It is a 0-size array.  For example
2473
         union { int num; char str[0]; } foo.  Printing "<no value>"
2474
         for str in "p foo" is OK, since foo.str (and thus foo.str[3])
2475
         will continue to work, and a 0-size array as a whole doesn't
2476
         have any contents to print.
2477
 
2478
         I suspect this probably could also happen with gcc -gstabs
2479
         (not -gstabs+) for static fields, and perhaps other C++
2480
         extensions.  Hopefully few people use -gstabs with gdb, since
2481
         it is intended for dbx compatibility.  */
2482
      visibility = DEBUG_VISIBILITY_IGNORE;
2483
    }
2484
 
2485
  /* FIXME: gdb does some stuff here to mark fields as unpacked.  */
2486
 
2487
  *retp = debug_make_field (dhandle, name, type, bitpos, bitsize, visibility);
2488
 
2489
  return TRUE;
2490
}
2491
 
2492
/* Read member function stabs info for C++ classes.  The form of each member
2493
   function data is:
2494
 
2495
        NAME :: TYPENUM[=type definition] ARGS : PHYSNAME ;
2496
 
2497
   An example with two member functions is:
2498
 
2499
        afunc1::20=##15;:i;2A.;afunc2::20:i;2A.;
2500
 
2501
   For the case of overloaded operators, the format is op$::*.funcs, where
2502
   $ is the CPLUS_MARKER (usually '$'), `*' holds the place for an operator
2503
   name (such as `+=') and `.' marks the end of the operator name.  */
2504
 
2505
static bfd_boolean
2506
parse_stab_members (void *dhandle, struct stab_handle *info,
2507
                    const char *tagname, const char **pp,
2508
                    const int *typenums, debug_method **retp)
2509
{
2510
  const char *orig;
2511
  debug_method *methods;
2512
  unsigned int c;
2513
  unsigned int alloc;
2514
 
2515
  *retp = NULL;
2516
 
2517
  orig = *pp;
2518
 
2519
  alloc = 0;
2520
  methods = NULL;
2521
  c = 0;
2522
 
2523
  while (**pp != ';')
2524
    {
2525
      const char *p;
2526
      char *name;
2527
      debug_method_variant *variants;
2528
      unsigned int cvars;
2529
      unsigned int allocvars;
2530
      debug_type look_ahead_type;
2531
 
2532
      p = strchr (*pp, ':');
2533
      if (p == NULL || p[1] != ':')
2534
        break;
2535
 
2536
      /* FIXME: Some systems use something other than '$' here.  */
2537
      if ((*pp)[0] != 'o' || (*pp)[1] != 'p' || (*pp)[2] != '$')
2538
        {
2539
          name = savestring (*pp, p - *pp);
2540
          *pp = p + 2;
2541
        }
2542
      else
2543
        {
2544
          /* This is a completely weird case.  In order to stuff in the
2545
             names that might contain colons (the usual name delimiter),
2546
             Mike Tiemann defined a different name format which is
2547
             signalled if the identifier is "op$".  In that case, the
2548
             format is "op$::XXXX." where XXXX is the name.  This is
2549
             used for names like "+" or "=".  YUUUUUUUK!  FIXME!  */
2550
          *pp = p + 2;
2551
          for (p = *pp; *p != '.' && *p != '\0'; p++)
2552
            ;
2553
          if (*p != '.')
2554
            {
2555
              bad_stab (orig);
2556
              return FALSE;
2557
            }
2558
          name = savestring (*pp, p - *pp);
2559
          *pp = p + 1;
2560
        }
2561
 
2562
      allocvars = 10;
2563
      variants = ((debug_method_variant *)
2564
                  xmalloc (allocvars * sizeof *variants));
2565
      cvars = 0;
2566
 
2567
      look_ahead_type = DEBUG_TYPE_NULL;
2568
 
2569
      do
2570
        {
2571
          debug_type type;
2572
          bfd_boolean stub;
2573
          char *argtypes;
2574
          enum debug_visibility visibility;
2575
          bfd_boolean constp, volatilep, staticp;
2576
          bfd_vma voffset;
2577
          debug_type context;
2578
          const char *physname;
2579
          bfd_boolean varargs;
2580
 
2581
          if (look_ahead_type != DEBUG_TYPE_NULL)
2582
            {
2583
              /* g++ version 1 kludge */
2584
              type = look_ahead_type;
2585
              look_ahead_type = DEBUG_TYPE_NULL;
2586
            }
2587
          else
2588
            {
2589
              type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2590
                                      (debug_type **) NULL);
2591
              if (type == DEBUG_TYPE_NULL)
2592
                return FALSE;
2593
              if (**pp != ':')
2594
                {
2595
                  bad_stab (orig);
2596
                  return FALSE;
2597
                }
2598
            }
2599
 
2600
          ++*pp;
2601
          p = strchr (*pp, ';');
2602
          if (p == NULL)
2603
            {
2604
              bad_stab (orig);
2605
              return FALSE;
2606
            }
2607
 
2608
          stub = FALSE;
2609
          if (debug_get_type_kind (dhandle, type) == DEBUG_KIND_METHOD
2610
              && debug_get_parameter_types (dhandle, type, &varargs) == NULL)
2611
            stub = TRUE;
2612
 
2613
          argtypes = savestring (*pp, p - *pp);
2614
          *pp = p + 1;
2615
 
2616
          switch (**pp)
2617
            {
2618
            case '0':
2619
              visibility = DEBUG_VISIBILITY_PRIVATE;
2620
              break;
2621
            case '1':
2622
              visibility = DEBUG_VISIBILITY_PROTECTED;
2623
              break;
2624
            default:
2625
              visibility = DEBUG_VISIBILITY_PUBLIC;
2626
              break;
2627
            }
2628
          ++*pp;
2629
 
2630
          constp = FALSE;
2631
          volatilep = FALSE;
2632
          switch (**pp)
2633
            {
2634
            case 'A':
2635
              /* Normal function.  */
2636
              ++*pp;
2637
              break;
2638
            case 'B':
2639
              /* const member function.  */
2640
              constp = TRUE;
2641
              ++*pp;
2642
              break;
2643
            case 'C':
2644
              /* volatile member function.  */
2645
              volatilep = TRUE;
2646
              ++*pp;
2647
              break;
2648
            case 'D':
2649
              /* const volatile member function.  */
2650
              constp = TRUE;
2651
              volatilep = TRUE;
2652
              ++*pp;
2653
              break;
2654
            case '*':
2655
            case '?':
2656
            case '.':
2657
              /* File compiled with g++ version 1; no information.  */
2658
              break;
2659
            default:
2660
              warn_stab (orig, _("const/volatile indicator missing"));
2661
              break;
2662
            }
2663
 
2664
          staticp = FALSE;
2665
          switch (**pp)
2666
            {
2667
            case '*':
2668
              /* virtual member function, followed by index.  The sign
2669
                 bit is supposedly set to distinguish
2670
                 pointers-to-methods from virtual function indicies.  */
2671
              ++*pp;
2672
              voffset = parse_number (pp, (bfd_boolean *) NULL);
2673
              if (**pp != ';')
2674
                {
2675
                  bad_stab (orig);
2676
                  return FALSE;
2677
                }
2678
              ++*pp;
2679
              voffset &= 0x7fffffff;
2680
 
2681
              if (**pp == ';' || *pp == '\0')
2682
                {
2683
                  /* Must be g++ version 1.  */
2684
                  context = DEBUG_TYPE_NULL;
2685
                }
2686
              else
2687
                {
2688
                  /* Figure out from whence this virtual function
2689
                     came.  It may belong to virtual function table of
2690
                     one of its baseclasses.  */
2691
                  look_ahead_type = parse_stab_type (dhandle, info,
2692
                                                     (const char *) NULL,
2693
                                                     pp,
2694
                                                     (debug_type **) NULL);
2695
                  if (**pp == ':')
2696
                    {
2697
                      /* g++ version 1 overloaded methods.  */
2698
                      context = DEBUG_TYPE_NULL;
2699
                    }
2700
                  else
2701
                    {
2702
                      context = look_ahead_type;
2703
                      look_ahead_type = DEBUG_TYPE_NULL;
2704
                      if (**pp != ';')
2705
                        {
2706
                          bad_stab (orig);
2707
                          return FALSE;
2708
                        }
2709
                      ++*pp;
2710
                    }
2711
                }
2712
              break;
2713
 
2714
            case '?':
2715
              /* static member function.  */
2716
              ++*pp;
2717
              staticp = TRUE;
2718
              voffset = 0;
2719
              context = DEBUG_TYPE_NULL;
2720
              if (strncmp (argtypes, name, strlen (name)) != 0)
2721
                stub = TRUE;
2722
              break;
2723
 
2724
            default:
2725
              warn_stab (orig, "member function type missing");
2726
              voffset = 0;
2727
              context = DEBUG_TYPE_NULL;
2728
              break;
2729
 
2730
            case '.':
2731
              ++*pp;
2732
              voffset = 0;
2733
              context = DEBUG_TYPE_NULL;
2734
              break;
2735
            }
2736
 
2737
          /* If the type is not a stub, then the argtypes string is
2738
             the physical name of the function.  Otherwise the
2739
             argtypes string is the mangled form of the argument
2740
             types, and the full type and the physical name must be
2741
             extracted from them.  */
2742
          if (! stub)
2743
            physname = argtypes;
2744
          else
2745
            {
2746
              debug_type class_type, return_type;
2747
 
2748
              class_type = stab_find_type (dhandle, info, typenums);
2749
              if (class_type == DEBUG_TYPE_NULL)
2750
                return FALSE;
2751
              return_type = debug_get_return_type (dhandle, type);
2752
              if (return_type == DEBUG_TYPE_NULL)
2753
                {
2754
                  bad_stab (orig);
2755
                  return FALSE;
2756
                }
2757
              type = parse_stab_argtypes (dhandle, info, class_type, name,
2758
                                          tagname, return_type, argtypes,
2759
                                          constp, volatilep, &physname);
2760
              if (type == DEBUG_TYPE_NULL)
2761
                return FALSE;
2762
            }
2763
 
2764
          if (cvars + 1 >= allocvars)
2765
            {
2766
              allocvars += 10;
2767
              variants = ((debug_method_variant *)
2768
                          xrealloc (variants,
2769
                                    allocvars * sizeof *variants));
2770
            }
2771
 
2772
          if (! staticp)
2773
            variants[cvars] = debug_make_method_variant (dhandle, physname,
2774
                                                         type, visibility,
2775
                                                         constp, volatilep,
2776
                                                         voffset, context);
2777
          else
2778
            variants[cvars] = debug_make_static_method_variant (dhandle,
2779
                                                                physname,
2780
                                                                type,
2781
                                                                visibility,
2782
                                                                constp,
2783
                                                                volatilep);
2784
          if (variants[cvars] == DEBUG_METHOD_VARIANT_NULL)
2785
            return FALSE;
2786
 
2787
          ++cvars;
2788
        }
2789
      while (**pp != ';' && **pp != '\0');
2790
 
2791
      variants[cvars] = DEBUG_METHOD_VARIANT_NULL;
2792
 
2793
      if (**pp != '\0')
2794
        ++*pp;
2795
 
2796
      if (c + 1 >= alloc)
2797
        {
2798
          alloc += 10;
2799
          methods = ((debug_method *)
2800
                     xrealloc (methods, alloc * sizeof *methods));
2801
        }
2802
 
2803
      methods[c] = debug_make_method (dhandle, name, variants);
2804
 
2805
      ++c;
2806
    }
2807
 
2808
  if (methods != NULL)
2809
    methods[c] = DEBUG_METHOD_NULL;
2810
 
2811
  *retp = methods;
2812
 
2813
  return TRUE;
2814
}
2815
 
2816
/* Parse a string representing argument types for a method.  Stabs
2817
   tries to save space by packing argument types into a mangled
2818
   string.  This string should give us enough information to extract
2819
   both argument types and the physical name of the function, given
2820
   the tag name.  */
2821
 
2822
static debug_type
2823
parse_stab_argtypes (void *dhandle, struct stab_handle *info,
2824
                     debug_type class_type, const char *fieldname,
2825
                     const char *tagname, debug_type return_type,
2826
                     const char *argtypes, bfd_boolean constp,
2827
                     bfd_boolean volatilep, const char **pphysname)
2828
{
2829
  bfd_boolean is_full_physname_constructor;
2830
  bfd_boolean is_constructor;
2831
  bfd_boolean is_destructor;
2832
  bfd_boolean is_v3;
2833
  debug_type *args;
2834
  bfd_boolean varargs;
2835
  unsigned int physname_len = 0;
2836
 
2837
  /* Constructors are sometimes handled specially.  */
2838
  is_full_physname_constructor = ((argtypes[0] == '_'
2839
                                   && argtypes[1] == '_'
2840
                                   && (ISDIGIT (argtypes[2])
2841
                                       || argtypes[2] == 'Q'
2842
                                       || argtypes[2] == 't'))
2843
                                  || CONST_STRNEQ (argtypes, "__ct"));
2844
 
2845
  is_constructor = (is_full_physname_constructor
2846
                    || (tagname != NULL
2847
                        && strcmp (fieldname, tagname) == 0));
2848
  is_destructor = ((argtypes[0] == '_'
2849
                    && (argtypes[1] == '$' || argtypes[1] == '.')
2850
                    && argtypes[2] == '_')
2851
                   || CONST_STRNEQ (argtypes, "__dt"));
2852
  is_v3 = argtypes[0] == '_' && argtypes[1] == 'Z';
2853
 
2854
  if (is_destructor || is_full_physname_constructor || is_v3)
2855
    *pphysname = argtypes;
2856
  else
2857
    {
2858
      unsigned int len;
2859
      const char *const_prefix;
2860
      const char *volatile_prefix;
2861
      char buf[20];
2862
      unsigned int mangled_name_len;
2863
      char *physname;
2864
 
2865
      len = tagname == NULL ? 0 : strlen (tagname);
2866
      const_prefix = constp ? "C" : "";
2867
      volatile_prefix = volatilep ? "V" : "";
2868
 
2869
      if (len == 0)
2870
        sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
2871
      else if (tagname != NULL && strchr (tagname, '<') != NULL)
2872
        {
2873
          /* Template methods are fully mangled.  */
2874
          sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
2875
          tagname = NULL;
2876
          len = 0;
2877
        }
2878
      else
2879
        sprintf (buf, "__%s%s%d", const_prefix, volatile_prefix, len);
2880
 
2881
      mangled_name_len = ((is_constructor ? 0 : strlen (fieldname))
2882
                          + strlen (buf)
2883
                          + len
2884
                          + strlen (argtypes)
2885
                          + 1);
2886
 
2887
      if (fieldname[0] == 'o'
2888
          && fieldname[1] == 'p'
2889
          && (fieldname[2] == '$' || fieldname[2] == '.'))
2890
        {
2891
          const char *opname;
2892
 
2893
          opname = cplus_mangle_opname (fieldname + 3, 0);
2894
          if (opname == NULL)
2895
            {
2896
              fprintf (stderr, _("No mangling for \"%s\"\n"), fieldname);
2897
              return DEBUG_TYPE_NULL;
2898
            }
2899
          mangled_name_len += strlen (opname);
2900
          physname = (char *) xmalloc (mangled_name_len);
2901
          strncpy (physname, fieldname, 3);
2902
          strcpy (physname + 3, opname);
2903
        }
2904
      else
2905
        {
2906
          physname = (char *) xmalloc (mangled_name_len);
2907
          if (is_constructor)
2908
            physname[0] = '\0';
2909
          else
2910
            strcpy (physname, fieldname);
2911
        }
2912
 
2913
      physname_len = strlen (physname);
2914
      strcat (physname, buf);
2915
      if (tagname != NULL)
2916
        strcat (physname, tagname);
2917
      strcat (physname, argtypes);
2918
 
2919
      *pphysname = physname;
2920
    }
2921
 
2922
  if (*argtypes == '\0' || is_destructor)
2923
    {
2924
      args = (debug_type *) xmalloc (sizeof *args);
2925
      *args = NULL;
2926
      return debug_make_method_type (dhandle, return_type, class_type, args,
2927
                                     FALSE);
2928
    }
2929
 
2930
  args = stab_demangle_argtypes (dhandle, info, *pphysname, &varargs, physname_len);
2931
  if (args == NULL)
2932
    return DEBUG_TYPE_NULL;
2933
 
2934
  return debug_make_method_type (dhandle, return_type, class_type, args,
2935
                                 varargs);
2936
}
2937
 
2938
/* The tail end of stabs for C++ classes that contain a virtual function
2939
   pointer contains a tilde, a %, and a type number.
2940
   The type number refers to the base class (possibly this class itself) which
2941
   contains the vtable pointer for the current class.
2942
 
2943
   This function is called when we have parsed all the method declarations,
2944
   so we can look for the vptr base class info.  */
2945
 
2946
static bfd_boolean
2947
parse_stab_tilde_field (void *dhandle, struct stab_handle *info,
2948
                        const char **pp, const int *typenums,
2949
                        debug_type *retvptrbase, bfd_boolean *retownvptr)
2950
{
2951
  const char *orig;
2952
  const char *hold;
2953
  int vtypenums[2];
2954
 
2955
  *retvptrbase = DEBUG_TYPE_NULL;
2956
  *retownvptr = FALSE;
2957
 
2958
  orig = *pp;
2959
 
2960
  /* If we are positioned at a ';', then skip it.  */
2961
  if (**pp == ';')
2962
    ++*pp;
2963
 
2964
  if (**pp != '~')
2965
    return TRUE;
2966
 
2967
  ++*pp;
2968
 
2969
  if (**pp == '=' || **pp == '+' || **pp == '-')
2970
    {
2971
      /* Obsolete flags that used to indicate the presence of
2972
         constructors and/or destructors.  */
2973
      ++*pp;
2974
    }
2975
 
2976
  if (**pp != '%')
2977
    return TRUE;
2978
 
2979
  ++*pp;
2980
 
2981
  hold = *pp;
2982
 
2983
  /* The next number is the type number of the base class (possibly
2984
     our own class) which supplies the vtable for this class.  */
2985
  if (! parse_stab_type_number (pp, vtypenums))
2986
    return FALSE;
2987
 
2988
  if (vtypenums[0] == typenums[0]
2989
      && vtypenums[1] == typenums[1])
2990
    *retownvptr = TRUE;
2991
  else
2992
    {
2993
      debug_type vtype;
2994
      const char *p;
2995
 
2996
      *pp = hold;
2997
 
2998
      vtype = parse_stab_type (dhandle, info, (const char *) NULL, pp,
2999
                               (debug_type **) NULL);
3000
      for (p = *pp; *p != ';' && *p != '\0'; p++)
3001
        ;
3002
      if (*p != ';')
3003
        {
3004
          bad_stab (orig);
3005
          return FALSE;
3006
        }
3007
 
3008
      *retvptrbase = vtype;
3009
 
3010
      *pp = p + 1;
3011
    }
3012
 
3013
  return TRUE;
3014
}
3015
 
3016
/* Read a definition of an array type.  */
3017
 
3018
static debug_type
3019
parse_stab_array_type (void *dhandle, struct stab_handle *info,
3020
                       const char **pp, bfd_boolean stringp)
3021
{
3022
  const char *orig;
3023
  const char *p;
3024
  int typenums[2];
3025
  debug_type index_type;
3026
  bfd_boolean adjustable;
3027
  bfd_signed_vma lower, upper;
3028
  debug_type element_type;
3029
 
3030
  /* Format of an array type:
3031
     "ar<index type>;lower;upper;<array_contents_type>".
3032
     OS9000: "arlower,upper;<array_contents_type>".
3033
 
3034
     Fortran adjustable arrays use Adigits or Tdigits for lower or upper;
3035
     for these, produce a type like float[][].  */
3036
 
3037
  orig = *pp;
3038
 
3039
  /* FIXME: gdb checks os9k_stabs here.  */
3040
 
3041
  /* If the index type is type 0, we take it as int.  */
3042
  p = *pp;
3043
  if (! parse_stab_type_number (&p, typenums))
3044
    return DEBUG_TYPE_NULL;
3045
  if (typenums[0] == 0 && typenums[1] == 0 && **pp != '=')
3046
    {
3047
      index_type = debug_find_named_type (dhandle, "int");
3048
      if (index_type == DEBUG_TYPE_NULL)
3049
        {
3050
          index_type = debug_make_int_type (dhandle, 4, FALSE);
3051
          if (index_type == DEBUG_TYPE_NULL)
3052
            return DEBUG_TYPE_NULL;
3053
        }
3054
      *pp = p;
3055
    }
3056
  else
3057
    {
3058
      index_type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
3059
                                    (debug_type **) NULL);
3060
    }
3061
 
3062
  if (**pp != ';')
3063
    {
3064
      bad_stab (orig);
3065
      return DEBUG_TYPE_NULL;
3066
    }
3067
  ++*pp;
3068
 
3069
  adjustable = FALSE;
3070
 
3071
  if (! ISDIGIT (**pp) && **pp != '-')
3072
    {
3073
      ++*pp;
3074
      adjustable = TRUE;
3075
    }
3076
 
3077
  lower = (bfd_signed_vma) parse_number (pp, (bfd_boolean *) NULL);
3078
  if (**pp != ';')
3079
    {
3080
      bad_stab (orig);
3081
      return DEBUG_TYPE_NULL;
3082
    }
3083
  ++*pp;
3084
 
3085
  if (! ISDIGIT (**pp) && **pp != '-')
3086
    {
3087
      ++*pp;
3088
      adjustable = TRUE;
3089
    }
3090
 
3091
  upper = (bfd_signed_vma) parse_number (pp, (bfd_boolean *) NULL);
3092
  if (**pp != ';')
3093
    {
3094
      bad_stab (orig);
3095
      return DEBUG_TYPE_NULL;
3096
    }
3097
  ++*pp;
3098
 
3099
  element_type = parse_stab_type (dhandle, info, (const char *) NULL, pp,
3100
                                  (debug_type **) NULL);
3101
  if (element_type == DEBUG_TYPE_NULL)
3102
    return DEBUG_TYPE_NULL;
3103
 
3104
  if (adjustable)
3105
    {
3106
      lower = 0;
3107
      upper = -1;
3108
    }
3109
 
3110
  return debug_make_array_type (dhandle, element_type, index_type, lower,
3111
                                upper, stringp);
3112
}
3113
 
3114
/* This struct holds information about files we have seen using
3115
   N_BINCL.  */
3116
 
3117
struct bincl_file
3118
{
3119
  /* The next N_BINCL file.  */
3120
  struct bincl_file *next;
3121
  /* The next N_BINCL on the stack.  */
3122
  struct bincl_file *next_stack;
3123
  /* The file name.  */
3124
  const char *name;
3125
  /* The hash value.  */
3126
  bfd_vma hash;
3127
  /* The file index.  */
3128
  unsigned int file;
3129
  /* The list of types defined in this file.  */
3130
  struct stab_types *file_types;
3131
};
3132
 
3133
/* Start a new N_BINCL file, pushing it onto the stack.  */
3134
 
3135
static void
3136
push_bincl (struct stab_handle *info, const char *name, bfd_vma hash)
3137
{
3138
  struct bincl_file *n;
3139
 
3140
  n = (struct bincl_file *) xmalloc (sizeof *n);
3141
  n->next = info->bincl_list;
3142
  n->next_stack = info->bincl_stack;
3143
  n->name = name;
3144
  n->hash = hash;
3145
  n->file = info->files;
3146
  n->file_types = NULL;
3147
  info->bincl_list = n;
3148
  info->bincl_stack = n;
3149
 
3150
  ++info->files;
3151
  info->file_types = ((struct stab_types **)
3152
                      xrealloc (info->file_types,
3153
                                (info->files
3154
                                 * sizeof *info->file_types)));
3155
  info->file_types[n->file] = NULL;
3156
}
3157
 
3158
/* Finish an N_BINCL file, at an N_EINCL, popping the name off the
3159
   stack.  */
3160
 
3161
static const char *
3162
pop_bincl (struct stab_handle *info)
3163
{
3164
  struct bincl_file *o;
3165
 
3166
  o = info->bincl_stack;
3167
  if (o == NULL)
3168
    return info->main_filename;
3169
  info->bincl_stack = o->next_stack;
3170
 
3171
  o->file_types = info->file_types[o->file];
3172
 
3173
  if (info->bincl_stack == NULL)
3174
    return info->main_filename;
3175
  return info->bincl_stack->name;
3176
}
3177
 
3178
/* Handle an N_EXCL: get the types from the corresponding N_BINCL.  */
3179
 
3180
static bfd_boolean
3181
find_excl (struct stab_handle *info, const char *name, bfd_vma hash)
3182
{
3183
  struct bincl_file *l;
3184
 
3185
  ++info->files;
3186
  info->file_types = ((struct stab_types **)
3187
                      xrealloc (info->file_types,
3188
                                (info->files
3189
                                 * sizeof *info->file_types)));
3190
 
3191
  for (l = info->bincl_list; l != NULL; l = l->next)
3192
    if (l->hash == hash && strcmp (l->name, name) == 0)
3193
      break;
3194
  if (l == NULL)
3195
    {
3196
      warn_stab (name, _("Undefined N_EXCL"));
3197
      info->file_types[info->files - 1] = NULL;
3198
      return TRUE;
3199
    }
3200
 
3201
  info->file_types[info->files - 1] = l->file_types;
3202
 
3203
  return TRUE;
3204
}
3205
 
3206
/* Handle a variable definition.  gcc emits variable definitions for a
3207
   block before the N_LBRAC, so we must hold onto them until we see
3208
   it.  The SunPRO compiler emits variable definitions after the
3209
   N_LBRAC, so we can call debug_record_variable immediately.  */
3210
 
3211
static bfd_boolean
3212
stab_record_variable (void *dhandle, struct stab_handle *info,
3213
                      const char *name, debug_type type,
3214
                      enum debug_var_kind kind, bfd_vma val)
3215
{
3216
  struct stab_pending_var *v;
3217
 
3218
  if ((kind == DEBUG_GLOBAL || kind == DEBUG_STATIC)
3219
      || ! info->within_function
3220
      || (info->gcc_compiled == 0 && info->n_opt_found))
3221
    return debug_record_variable (dhandle, name, type, kind, val);
3222
 
3223
  v = (struct stab_pending_var *) xmalloc (sizeof *v);
3224
  memset (v, 0, sizeof *v);
3225
 
3226
  v->next = info->pending;
3227
  v->name = name;
3228
  v->type = type;
3229
  v->kind = kind;
3230
  v->val = val;
3231
  info->pending = v;
3232
 
3233
  return TRUE;
3234
}
3235
 
3236
/* Emit pending variable definitions.  This is called after we see the
3237
   N_LBRAC that starts the block.  */
3238
 
3239
static bfd_boolean
3240
stab_emit_pending_vars (void *dhandle, struct stab_handle *info)
3241
{
3242
  struct stab_pending_var *v;
3243
 
3244
  v = info->pending;
3245
  while (v != NULL)
3246
    {
3247
      struct stab_pending_var *next;
3248
 
3249
      if (! debug_record_variable (dhandle, v->name, v->type, v->kind, v->val))
3250
        return FALSE;
3251
 
3252
      next = v->next;
3253
      free (v);
3254
      v = next;
3255
    }
3256
 
3257
  info->pending = NULL;
3258
 
3259
  return TRUE;
3260
}
3261
 
3262
/* Find the slot for a type in the database.  */
3263
 
3264
static debug_type *
3265
stab_find_slot (struct stab_handle *info, const int *typenums)
3266
{
3267
  int filenum;
3268
  int index;
3269
  struct stab_types **ps;
3270
 
3271
  filenum = typenums[0];
3272
  index = typenums[1];
3273
 
3274
  if (filenum < 0 || (unsigned int) filenum >= info->files)
3275
    {
3276
      fprintf (stderr, _("Type file number %d out of range\n"), filenum);
3277
      return NULL;
3278
    }
3279
  if (index < 0)
3280
    {
3281
      fprintf (stderr, _("Type index number %d out of range\n"), index);
3282
      return NULL;
3283
    }
3284
 
3285
  ps = info->file_types + filenum;
3286
 
3287
  while (index >= STAB_TYPES_SLOTS)
3288
    {
3289
      if (*ps == NULL)
3290
        {
3291
          *ps = (struct stab_types *) xmalloc (sizeof **ps);
3292
          memset (*ps, 0, sizeof **ps);
3293
        }
3294
      ps = &(*ps)->next;
3295
      index -= STAB_TYPES_SLOTS;
3296
    }
3297
  if (*ps == NULL)
3298
    {
3299
      *ps = (struct stab_types *) xmalloc (sizeof **ps);
3300
      memset (*ps, 0, sizeof **ps);
3301
    }
3302
 
3303
  return (*ps)->types + index;
3304
}
3305
 
3306
/* Find a type given a type number.  If the type has not been
3307
   allocated yet, create an indirect type.  */
3308
 
3309
static debug_type
3310
stab_find_type (void *dhandle, struct stab_handle *info, const int *typenums)
3311
{
3312
  debug_type *slot;
3313
 
3314
  if (typenums[0] == 0 && typenums[1] < 0)
3315
    {
3316
      /* A negative type number indicates an XCOFF builtin type.  */
3317
      return stab_xcoff_builtin_type (dhandle, info, typenums[1]);
3318
    }
3319
 
3320
  slot = stab_find_slot (info, typenums);
3321
  if (slot == NULL)
3322
    return DEBUG_TYPE_NULL;
3323
 
3324
  if (*slot == DEBUG_TYPE_NULL)
3325
    return debug_make_indirect_type (dhandle, slot, (const char *) NULL);
3326
 
3327
  return *slot;
3328
}
3329
 
3330
/* Record that a given type number refers to a given type.  */
3331
 
3332
static bfd_boolean
3333
stab_record_type (void *dhandle ATTRIBUTE_UNUSED, struct stab_handle *info,
3334
                  const int *typenums, debug_type type)
3335
{
3336
  debug_type *slot;
3337
 
3338
  slot = stab_find_slot (info, typenums);
3339
  if (slot == NULL)
3340
    return FALSE;
3341
 
3342
  /* gdb appears to ignore type redefinitions, so we do as well.  */
3343
 
3344
  *slot = type;
3345
 
3346
  return TRUE;
3347
}
3348
 
3349
/* Return an XCOFF builtin type.  */
3350
 
3351
static debug_type
3352
stab_xcoff_builtin_type (void *dhandle, struct stab_handle *info,
3353
                         int typenum)
3354
{
3355
  debug_type rettype;
3356
  const char *name;
3357
 
3358
  if (typenum >= 0 || typenum < -XCOFF_TYPE_COUNT)
3359
    {
3360
      fprintf (stderr, _("Unrecognized XCOFF type %d\n"), typenum);
3361
      return DEBUG_TYPE_NULL;
3362
    }
3363
  if (info->xcoff_types[-typenum] != NULL)
3364
    return info->xcoff_types[-typenum];
3365
 
3366
  switch (-typenum)
3367
    {
3368
    case 1:
3369
      /* The size of this and all the other types are fixed, defined
3370
         by the debugging format.  */
3371
      name = "int";
3372
      rettype = debug_make_int_type (dhandle, 4, FALSE);
3373
      break;
3374
    case 2:
3375
      name = "char";
3376
      rettype = debug_make_int_type (dhandle, 1, FALSE);
3377
      break;
3378
    case 3:
3379
      name = "short";
3380
      rettype = debug_make_int_type (dhandle, 2, FALSE);
3381
      break;
3382
    case 4:
3383
      name = "long";
3384
      rettype = debug_make_int_type (dhandle, 4, FALSE);
3385
      break;
3386
    case 5:
3387
      name = "unsigned char";
3388
      rettype = debug_make_int_type (dhandle, 1, TRUE);
3389
      break;
3390
    case 6:
3391
      name = "signed char";
3392
      rettype = debug_make_int_type (dhandle, 1, FALSE);
3393
      break;
3394
    case 7:
3395
      name = "unsigned short";
3396
      rettype = debug_make_int_type (dhandle, 2, TRUE);
3397
      break;
3398
    case 8:
3399
      name = "unsigned int";
3400
      rettype = debug_make_int_type (dhandle, 4, TRUE);
3401
      break;
3402
    case 9:
3403
      name = "unsigned";
3404
      rettype = debug_make_int_type (dhandle, 4, TRUE);
3405
    case 10:
3406
      name = "unsigned long";
3407
      rettype = debug_make_int_type (dhandle, 4, TRUE);
3408
      break;
3409
    case 11:
3410
      name = "void";
3411
      rettype = debug_make_void_type (dhandle);
3412
      break;
3413
    case 12:
3414
      /* IEEE single precision (32 bit).  */
3415
      name = "float";
3416
      rettype = debug_make_float_type (dhandle, 4);
3417
      break;
3418
    case 13:
3419
      /* IEEE double precision (64 bit).  */
3420
      name = "double";
3421
      rettype = debug_make_float_type (dhandle, 8);
3422
      break;
3423
    case 14:
3424
      /* This is an IEEE double on the RS/6000, and different machines
3425
         with different sizes for "long double" should use different
3426
         negative type numbers.  See stabs.texinfo.  */
3427
      name = "long double";
3428
      rettype = debug_make_float_type (dhandle, 8);
3429
      break;
3430
    case 15:
3431
      name = "integer";
3432
      rettype = debug_make_int_type (dhandle, 4, FALSE);
3433
      break;
3434
    case 16:
3435
      name = "boolean";
3436
      rettype = debug_make_bool_type (dhandle, 4);
3437
      break;
3438
    case 17:
3439
      name = "short real";
3440
      rettype = debug_make_float_type (dhandle, 4);
3441
      break;
3442
    case 18:
3443
      name = "real";
3444
      rettype = debug_make_float_type (dhandle, 8);
3445
      break;
3446
    case 19:
3447
      /* FIXME */
3448
      name = "stringptr";
3449
      rettype = NULL;
3450
      break;
3451
    case 20:
3452
      /* FIXME */
3453
      name = "character";
3454
      rettype = debug_make_int_type (dhandle, 1, TRUE);
3455
      break;
3456
    case 21:
3457
      name = "logical*1";
3458
      rettype = debug_make_bool_type (dhandle, 1);
3459
      break;
3460
    case 22:
3461
      name = "logical*2";
3462
      rettype = debug_make_bool_type (dhandle, 2);
3463
      break;
3464
    case 23:
3465
      name = "logical*4";
3466
      rettype = debug_make_bool_type (dhandle, 4);
3467
      break;
3468
    case 24:
3469
      name = "logical";
3470
      rettype = debug_make_bool_type (dhandle, 4);
3471
      break;
3472
    case 25:
3473
      /* Complex type consisting of two IEEE single precision values.  */
3474
      name = "complex";
3475
      rettype = debug_make_complex_type (dhandle, 8);
3476
      break;
3477
    case 26:
3478
      /* Complex type consisting of two IEEE double precision values.  */
3479
      name = "double complex";
3480
      rettype = debug_make_complex_type (dhandle, 16);
3481
      break;
3482
    case 27:
3483
      name = "integer*1";
3484
      rettype = debug_make_int_type (dhandle, 1, FALSE);
3485
      break;
3486
    case 28:
3487
      name = "integer*2";
3488
      rettype = debug_make_int_type (dhandle, 2, FALSE);
3489
      break;
3490
    case 29:
3491
      name = "integer*4";
3492
      rettype = debug_make_int_type (dhandle, 4, FALSE);
3493
      break;
3494
    case 30:
3495
      /* FIXME */
3496
      name = "wchar";
3497
      rettype = debug_make_int_type (dhandle, 2, FALSE);
3498
      break;
3499
    case 31:
3500
      name = "long long";
3501
      rettype = debug_make_int_type (dhandle, 8, FALSE);
3502
      break;
3503
    case 32:
3504
      name = "unsigned long long";
3505
      rettype = debug_make_int_type (dhandle, 8, TRUE);
3506
      break;
3507
    case 33:
3508
      name = "logical*8";
3509
      rettype = debug_make_bool_type (dhandle, 8);
3510
      break;
3511
    case 34:
3512
      name = "integer*8";
3513
      rettype = debug_make_int_type (dhandle, 8, FALSE);
3514
      break;
3515
    default:
3516
      abort ();
3517
    }
3518
 
3519
  rettype = debug_name_type (dhandle, name, rettype);
3520
 
3521
  info->xcoff_types[-typenum] = rettype;
3522
 
3523
  return rettype;
3524
}
3525
 
3526
/* Find or create a tagged type.  */
3527
 
3528
static debug_type
3529
stab_find_tagged_type (void *dhandle, struct stab_handle *info,
3530
                       const char *p, int len, enum debug_type_kind kind)
3531
{
3532
  char *name;
3533
  debug_type dtype;
3534
  struct stab_tag *st;
3535
 
3536
  name = savestring (p, len);
3537
 
3538
  /* We pass DEBUG_KIND_ILLEGAL because we want all tags in the same
3539
     namespace.  This is right for C, and I don't know how to handle
3540
     other languages.  FIXME.  */
3541
  dtype = debug_find_tagged_type (dhandle, name, DEBUG_KIND_ILLEGAL);
3542
  if (dtype != DEBUG_TYPE_NULL)
3543
    {
3544
      free (name);
3545
      return dtype;
3546
    }
3547
 
3548
  /* We need to allocate an entry on the undefined tag list.  */
3549
  for (st = info->tags; st != NULL; st = st->next)
3550
    {
3551
      if (st->name[0] == name[0]
3552
          && strcmp (st->name, name) == 0)
3553
        {
3554
          if (st->kind == DEBUG_KIND_ILLEGAL)
3555
            st->kind = kind;
3556
          free (name);
3557
          break;
3558
        }
3559
    }
3560
  if (st == NULL)
3561
    {
3562
      st = (struct stab_tag *) xmalloc (sizeof *st);
3563
      memset (st, 0, sizeof *st);
3564
 
3565
      st->next = info->tags;
3566
      st->name = name;
3567
      st->kind = kind;
3568
      st->slot = DEBUG_TYPE_NULL;
3569
      st->type = debug_make_indirect_type (dhandle, &st->slot, name);
3570
      info->tags = st;
3571
    }
3572
 
3573
  return st->type;
3574
}
3575
 
3576
/* In order to get the correct argument types for a stubbed method, we
3577
   need to extract the argument types from a C++ mangled string.
3578
   Since the argument types can refer back to the return type, this
3579
   means that we must demangle the entire physical name.  In gdb this
3580
   is done by calling cplus_demangle and running the results back
3581
   through the C++ expression parser.  Since we have no expression
3582
   parser, we must duplicate much of the work of cplus_demangle here.
3583
 
3584
   We assume that GNU style demangling is used, since this is only
3585
   done for method stubs, and only g++ should output that form of
3586
   debugging information.  */
3587
 
3588
/* This structure is used to hold a pointer to type information which
3589
   demangling a string.  */
3590
 
3591
struct stab_demangle_typestring
3592
{
3593
  /* The start of the type.  This is not null terminated.  */
3594
  const char *typestring;
3595
  /* The length of the type.  */
3596
  unsigned int len;
3597
};
3598
 
3599
/* This structure is used to hold information while demangling a
3600
   string.  */
3601
 
3602
struct stab_demangle_info
3603
{
3604
  /* The debugging information handle.  */
3605
  void *dhandle;
3606
  /* The stab information handle.  */
3607
  struct stab_handle *info;
3608
  /* The array of arguments we are building.  */
3609
  debug_type *args;
3610
  /* Whether the method takes a variable number of arguments.  */
3611
  bfd_boolean varargs;
3612
  /* The array of types we have remembered.  */
3613
  struct stab_demangle_typestring *typestrings;
3614
  /* The number of typestrings.  */
3615
  unsigned int typestring_count;
3616
  /* The number of typestring slots we have allocated.  */
3617
  unsigned int typestring_alloc;
3618
};
3619
 
3620
static void stab_bad_demangle (const char *);
3621
static unsigned int stab_demangle_count (const char **);
3622
static bfd_boolean stab_demangle_get_count (const char **, unsigned int *);
3623
static bfd_boolean stab_demangle_prefix
3624
  (struct stab_demangle_info *, const char **, unsigned int);
3625
static bfd_boolean stab_demangle_function_name
3626
  (struct stab_demangle_info *, const char **, const char *);
3627
static bfd_boolean stab_demangle_signature
3628
  (struct stab_demangle_info *, const char **);
3629
static bfd_boolean stab_demangle_qualified
3630
  (struct stab_demangle_info *, const char **, debug_type *);
3631
static bfd_boolean stab_demangle_template
3632
  (struct stab_demangle_info *, const char **, char **);
3633
static bfd_boolean stab_demangle_class
3634
  (struct stab_demangle_info *, const char **, const char **);
3635
static bfd_boolean stab_demangle_args
3636
  (struct stab_demangle_info *, const char **, debug_type **, bfd_boolean *);
3637
static bfd_boolean stab_demangle_arg
3638
  (struct stab_demangle_info *, const char **, debug_type **,
3639
   unsigned int *, unsigned int *);
3640
static bfd_boolean stab_demangle_type
3641
  (struct stab_demangle_info *, const char **, debug_type *);
3642
static bfd_boolean stab_demangle_fund_type
3643
  (struct stab_demangle_info *, const char **, debug_type *);
3644
static bfd_boolean stab_demangle_remember_type
3645
  (struct stab_demangle_info *, const char *, int);
3646
 
3647
/* Warn about a bad demangling.  */
3648
 
3649
static void
3650
stab_bad_demangle (const char *s)
3651
{
3652
  fprintf (stderr, _("bad mangled name `%s'\n"), s);
3653
}
3654
 
3655
/* Get a count from a stab string.  */
3656
 
3657
static unsigned int
3658
stab_demangle_count (const char **pp)
3659
{
3660
  unsigned int count;
3661
 
3662
  count = 0;
3663
  while (ISDIGIT (**pp))
3664
    {
3665
      count *= 10;
3666
      count += **pp - '0';
3667
      ++*pp;
3668
    }
3669
  return count;
3670
}
3671
 
3672
/* Require a count in a string.  The count may be multiple digits, in
3673
   which case it must end in an underscore.  */
3674
 
3675
static bfd_boolean
3676
stab_demangle_get_count (const char **pp, unsigned int *pi)
3677
{
3678
  if (! ISDIGIT (**pp))
3679
    return FALSE;
3680
 
3681
  *pi = **pp - '0';
3682
  ++*pp;
3683
  if (ISDIGIT (**pp))
3684
    {
3685
      unsigned int count;
3686
      const char *p;
3687
 
3688
      count = *pi;
3689
      p = *pp;
3690
      do
3691
        {
3692
          count *= 10;
3693
          count += *p - '0';
3694
          ++p;
3695
        }
3696
      while (ISDIGIT (*p));
3697
      if (*p == '_')
3698
        {
3699
          *pp = p + 1;
3700
          *pi = count;
3701
        }
3702
    }
3703
 
3704
  return TRUE;
3705
}
3706
 
3707
/* This function demangles a physical name, returning a NULL
3708
   terminated array of argument types.  */
3709
 
3710
static debug_type *
3711
stab_demangle_argtypes (void *dhandle, struct stab_handle *info,
3712
                        const char *physname, bfd_boolean *pvarargs,
3713
                        unsigned int physname_len)
3714
{
3715
  struct stab_demangle_info minfo;
3716
 
3717
  /* Check for the g++ V3 ABI.  */
3718
  if (physname[0] == '_' && physname[1] == 'Z')
3719
    return stab_demangle_v3_argtypes (dhandle, info, physname, pvarargs);
3720
 
3721
  minfo.dhandle = dhandle;
3722
  minfo.info = info;
3723
  minfo.args = NULL;
3724
  minfo.varargs = FALSE;
3725
  minfo.typestring_alloc = 10;
3726
  minfo.typestrings = ((struct stab_demangle_typestring *)
3727
                       xmalloc (minfo.typestring_alloc
3728
                                * sizeof *minfo.typestrings));
3729
  minfo.typestring_count = 0;
3730
 
3731
  /* cplus_demangle checks for special GNU mangled forms, but we can't
3732
     see any of them in mangled method argument types.  */
3733
 
3734
  if (! stab_demangle_prefix (&minfo, &physname, physname_len))
3735
    goto error_return;
3736
 
3737
  if (*physname != '\0')
3738
    {
3739
      if (! stab_demangle_signature (&minfo, &physname))
3740
        goto error_return;
3741
    }
3742
 
3743
  free (minfo.typestrings);
3744
  minfo.typestrings = NULL;
3745
 
3746
  if (minfo.args == NULL)
3747
    fprintf (stderr, _("no argument types in mangled string\n"));
3748
 
3749
  *pvarargs = minfo.varargs;
3750
  return minfo.args;
3751
 
3752
 error_return:
3753
  if (minfo.typestrings != NULL)
3754
    free (minfo.typestrings);
3755
  return NULL;
3756
}
3757
 
3758
/* Demangle the prefix of the mangled name.  */
3759
 
3760
static bfd_boolean
3761
stab_demangle_prefix (struct stab_demangle_info *minfo, const char **pp,
3762
                      unsigned int physname_len)
3763
{
3764
  const char *scan;
3765
  unsigned int i;
3766
 
3767
  /* cplus_demangle checks for global constructors and destructors,
3768
     but we can't see them in mangled argument types.  */
3769
 
3770
  if (physname_len)
3771
    scan = *pp + physname_len;
3772
  else
3773
    {
3774
      /* Look for `__'.  */
3775
      scan = *pp;
3776
      do
3777
        scan = strchr (scan, '_');
3778
      while (scan != NULL && *++scan != '_');
3779
 
3780
      if (scan == NULL)
3781
        {
3782
          stab_bad_demangle (*pp);
3783
          return FALSE;
3784
        }
3785
 
3786
      --scan;
3787
 
3788
      /* We found `__'; move ahead to the last contiguous `__' pair.  */
3789
      i = strspn (scan, "_");
3790
      if (i > 2)
3791
        scan += i - 2;
3792
    }
3793
 
3794
  if (scan == *pp
3795
      && (ISDIGIT (scan[2])
3796
          || scan[2] == 'Q'
3797
          || scan[2] == 't'))
3798
    {
3799
      /* This is a GNU style constructor name.  */
3800
      *pp = scan + 2;
3801
      return TRUE;
3802
    }
3803
  else if (scan == *pp
3804
           && ! ISDIGIT (scan[2])
3805
           && scan[2] != 't')
3806
    {
3807
      /* Look for the `__' that separates the prefix from the
3808
         signature.  */
3809
      while (*scan == '_')
3810
        ++scan;
3811
      scan = strstr (scan, "__");
3812
      if (scan == NULL || scan[2] == '\0')
3813
        {
3814
          stab_bad_demangle (*pp);
3815
          return FALSE;
3816
        }
3817
 
3818
      return stab_demangle_function_name (minfo, pp, scan);
3819
    }
3820
  else if (scan[2] != '\0')
3821
    {
3822
      /* The name doesn't start with `__', but it does contain `__'.  */
3823
      return stab_demangle_function_name (minfo, pp, scan);
3824
    }
3825
  else
3826
    {
3827
      stab_bad_demangle (*pp);
3828
      return FALSE;
3829
    }
3830
  /*NOTREACHED*/
3831
}
3832
 
3833
/* Demangle a function name prefix.  The scan argument points to the
3834
   double underscore which separates the function name from the
3835
   signature.  */
3836
 
3837
static bfd_boolean
3838
stab_demangle_function_name (struct stab_demangle_info *minfo,
3839
                             const char **pp, const char *scan)
3840
{
3841
  const char *name;
3842
 
3843
  /* The string from *pp to scan is the name of the function.  We
3844
     don't care about the name, since we just looking for argument
3845
     types.  However, for conversion operators, the name may include a
3846
     type which we must remember in order to handle backreferences.  */
3847
 
3848
  name = *pp;
3849
  *pp = scan + 2;
3850
 
3851
  if (*pp - name >= 5
3852
           && CONST_STRNEQ (name, "type")
3853
           && (name[4] == '$' || name[4] == '.'))
3854
    {
3855
      const char *tem;
3856
 
3857
      /* This is a type conversion operator.  */
3858
      tem = name + 5;
3859
      if (! stab_demangle_type (minfo, &tem, (debug_type *) NULL))
3860
        return FALSE;
3861
    }
3862
  else if (name[0] == '_'
3863
           && name[1] == '_'
3864
           && name[2] == 'o'
3865
           && name[3] == 'p')
3866
    {
3867
      const char *tem;
3868
 
3869
      /* This is a type conversion operator.  */
3870
      tem = name + 4;
3871
      if (! stab_demangle_type (minfo, &tem, (debug_type *) NULL))
3872
        return FALSE;
3873
    }
3874
 
3875
  return TRUE;
3876
}
3877
 
3878
/* Demangle the signature.  This is where the argument types are
3879
   found.  */
3880
 
3881
static bfd_boolean
3882
stab_demangle_signature (struct stab_demangle_info *minfo, const char **pp)
3883
{
3884
  const char *orig;
3885
  bfd_boolean expect_func, func_done;
3886
  const char *hold;
3887
 
3888
  orig = *pp;
3889
 
3890
  expect_func = FALSE;
3891
  func_done = FALSE;
3892
  hold = NULL;
3893
 
3894
  while (**pp != '\0')
3895
    {
3896
      switch (**pp)
3897
        {
3898
        case 'Q':
3899
          hold = *pp;
3900
          if (! stab_demangle_qualified (minfo, pp, (debug_type *) NULL)
3901
              || ! stab_demangle_remember_type (minfo, hold, *pp - hold))
3902
            return FALSE;
3903
          expect_func = TRUE;
3904
          hold = NULL;
3905
          break;
3906
 
3907
        case 'S':
3908
          /* Static member function.  FIXME: Can this happen?  */
3909
          if (hold == NULL)
3910
            hold = *pp;
3911
          ++*pp;
3912
          break;
3913
 
3914
        case 'C':
3915
          /* Const member function.  */
3916
          if (hold == NULL)
3917
            hold = *pp;
3918
          ++*pp;
3919
          break;
3920
 
3921
        case '0': case '1': case '2': case '3': case '4':
3922
        case '5': case '6': case '7': case '8': case '9':
3923
          if (hold == NULL)
3924
            hold = *pp;
3925
          if (! stab_demangle_class (minfo, pp, (const char **) NULL)
3926
              || ! stab_demangle_remember_type (minfo, hold, *pp - hold))
3927
            return FALSE;
3928
          expect_func = TRUE;
3929
          hold = NULL;
3930
          break;
3931
 
3932
        case 'F':
3933
          /* Function.  I don't know if this actually happens with g++
3934
             output.  */
3935
          hold = NULL;
3936
          func_done = TRUE;
3937
          ++*pp;
3938
          if (! stab_demangle_args (minfo, pp, &minfo->args, &minfo->varargs))
3939
            return FALSE;
3940
          break;
3941
 
3942
        case 't':
3943
          /* Template.  */
3944
          if (hold == NULL)
3945
            hold = *pp;
3946
          if (! stab_demangle_template (minfo, pp, (char **) NULL)
3947
              || ! stab_demangle_remember_type (minfo, hold, *pp - hold))
3948
            return FALSE;
3949
          hold = NULL;
3950
          expect_func = TRUE;
3951
          break;
3952
 
3953
        case '_':
3954
          /* At the outermost level, we cannot have a return type
3955
             specified, so if we run into another '_' at this point we
3956
             are dealing with a mangled name that is either bogus, or
3957
             has been mangled by some algorithm we don't know how to
3958
             deal with.  So just reject the entire demangling.  */
3959
          stab_bad_demangle (orig);
3960
          return FALSE;
3961
 
3962
        default:
3963
          /* Assume we have stumbled onto the first outermost function
3964
             argument token, and start processing args.  */
3965
          func_done = TRUE;
3966
          if (! stab_demangle_args (minfo, pp, &minfo->args, &minfo->varargs))
3967
            return FALSE;
3968
          break;
3969
        }
3970
 
3971
      if (expect_func)
3972
        {
3973
          func_done = TRUE;
3974
          if (! stab_demangle_args (minfo, pp, &minfo->args, &minfo->varargs))
3975
            return FALSE;
3976
        }
3977
    }
3978
 
3979
  if (! func_done)
3980
    {
3981
      /* With GNU style demangling, bar__3foo is 'foo::bar(void)', and
3982
         bar__3fooi is 'foo::bar(int)'.  We get here when we find the
3983
         first case, and need to ensure that the '(void)' gets added
3984
         to the current declp.  */
3985
      if (! stab_demangle_args (minfo, pp, &minfo->args, &minfo->varargs))
3986
        return FALSE;
3987
    }
3988
 
3989
  return TRUE;
3990
}
3991
 
3992
/* Demangle a qualified name, such as "Q25Outer5Inner" which is the
3993
   mangled form of "Outer::Inner".  */
3994
 
3995
static bfd_boolean
3996
stab_demangle_qualified (struct stab_demangle_info *minfo, const char **pp,
3997
                         debug_type *ptype)
3998
{
3999
  const char *orig;
4000
  const char *p;
4001
  unsigned int qualifiers;
4002
  debug_type context;
4003
 
4004
  orig = *pp;
4005
 
4006
  switch ((*pp)[1])
4007
    {
4008
    case '_':
4009
      /* GNU mangled name with more than 9 classes.  The count is
4010
         preceded by an underscore (to distinguish it from the <= 9
4011
         case) and followed by an underscore.  */
4012
      p = *pp + 2;
4013
      if (! ISDIGIT (*p) || *p == '0')
4014
        {
4015
          stab_bad_demangle (orig);
4016
          return FALSE;
4017
        }
4018
      qualifiers = atoi (p);
4019
      while (ISDIGIT (*p))
4020
        ++p;
4021
      if (*p != '_')
4022
        {
4023
          stab_bad_demangle (orig);
4024
          return FALSE;
4025
        }
4026
      *pp = p + 1;
4027
      break;
4028
 
4029
    case '1': case '2': case '3': case '4': case '5':
4030
    case '6': case '7': case '8': case '9':
4031
      qualifiers = (*pp)[1] - '0';
4032
      /* Skip an optional underscore after the count.  */
4033
      if ((*pp)[2] == '_')
4034
        ++*pp;
4035
      *pp += 2;
4036
      break;
4037
 
4038
    case '0':
4039
    default:
4040
      stab_bad_demangle (orig);
4041
      return FALSE;
4042
    }
4043
 
4044
  context = DEBUG_TYPE_NULL;
4045
 
4046
  /* Pick off the names.  */
4047
  while (qualifiers-- > 0)
4048
    {
4049
      if (**pp == '_')
4050
        ++*pp;
4051
      if (**pp == 't')
4052
        {
4053
          char *name;
4054
 
4055
          if (! stab_demangle_template (minfo, pp,
4056
                                        ptype != NULL ? &name : NULL))
4057
            return FALSE;
4058
 
4059
          if (ptype != NULL)
4060
            {
4061
              context = stab_find_tagged_type (minfo->dhandle, minfo->info,
4062
                                               name, strlen (name),
4063
                                               DEBUG_KIND_CLASS);
4064
              free (name);
4065
              if (context == DEBUG_TYPE_NULL)
4066
                return FALSE;
4067
            }
4068
        }
4069
      else
4070
        {
4071
          unsigned int len;
4072
 
4073
          len = stab_demangle_count (pp);
4074
          if (strlen (*pp) < len)
4075
            {
4076
              stab_bad_demangle (orig);
4077
              return FALSE;
4078
            }
4079
 
4080
          if (ptype != NULL)
4081
            {
4082
              const debug_field *fields;
4083
 
4084
              fields = NULL;
4085
              if (context != DEBUG_TYPE_NULL)
4086
                fields = debug_get_fields (minfo->dhandle, context);
4087
 
4088
              context = DEBUG_TYPE_NULL;
4089
 
4090
              if (fields != NULL)
4091
                {
4092
                  char *name;
4093
 
4094
                  /* Try to find the type by looking through the
4095
                     fields of context until we find a field with the
4096
                     same type.  This ought to work for a class
4097
                     defined within a class, but it won't work for,
4098
                     e.g., an enum defined within a class.  stabs does
4099
                     not give us enough information to figure out the
4100
                     latter case.  */
4101
 
4102
                  name = savestring (*pp, len);
4103
 
4104
                  for (; *fields != DEBUG_FIELD_NULL; fields++)
4105
                    {
4106
                      debug_type ft;
4107
                      const char *dn;
4108
 
4109
                      ft = debug_get_field_type (minfo->dhandle, *fields);
4110
                      if (ft == NULL)
4111
                        return FALSE;
4112
                      dn = debug_get_type_name (minfo->dhandle, ft);
4113
                      if (dn != NULL && strcmp (dn, name) == 0)
4114
                        {
4115
                          context = ft;
4116
                          break;
4117
                        }
4118
                    }
4119
 
4120
                  free (name);
4121
                }
4122
 
4123
              if (context == DEBUG_TYPE_NULL)
4124
                {
4125
                  /* We have to fall back on finding the type by name.
4126
                     If there are more types to come, then this must
4127
                     be a class.  Otherwise, it could be anything.  */
4128
 
4129
                  if (qualifiers == 0)
4130
                    {
4131
                      char *name;
4132
 
4133
                      name = savestring (*pp, len);
4134
                      context = debug_find_named_type (minfo->dhandle,
4135
                                                       name);
4136
                      free (name);
4137
                    }
4138
 
4139
                  if (context == DEBUG_TYPE_NULL)
4140
                    {
4141
                      context = stab_find_tagged_type (minfo->dhandle,
4142
                                                       minfo->info,
4143
                                                       *pp, len,
4144
                                                       (qualifiers == 0
4145
                                                        ? DEBUG_KIND_ILLEGAL
4146
                                                        : DEBUG_KIND_CLASS));
4147
                      if (context == DEBUG_TYPE_NULL)
4148
                        return FALSE;
4149
                    }
4150
                }
4151
            }
4152
 
4153
          *pp += len;
4154
        }
4155
    }
4156
 
4157
  if (ptype != NULL)
4158
    *ptype = context;
4159
 
4160
  return TRUE;
4161
}
4162
 
4163
/* Demangle a template.  If PNAME is not NULL, this sets *PNAME to a
4164
   string representation of the template.  */
4165
 
4166
static bfd_boolean
4167
stab_demangle_template (struct stab_demangle_info *minfo, const char **pp,
4168
                        char **pname)
4169
{
4170
  const char *orig;
4171
  unsigned int r, i;
4172
 
4173
  orig = *pp;
4174
 
4175
  ++*pp;
4176
 
4177
  /* Skip the template name.  */
4178
  r = stab_demangle_count (pp);
4179
  if (r == 0 || strlen (*pp) < r)
4180
    {
4181
      stab_bad_demangle (orig);
4182
      return FALSE;
4183
    }
4184
  *pp += r;
4185
 
4186
  /* Get the size of the parameter list.  */
4187
  if (stab_demangle_get_count (pp, &r) == 0)
4188
    {
4189
      stab_bad_demangle (orig);
4190
      return FALSE;
4191
    }
4192
 
4193
  for (i = 0; i < r; i++)
4194
    {
4195
      if (**pp == 'Z')
4196
        {
4197
          /* This is a type parameter.  */
4198
          ++*pp;
4199
          if (! stab_demangle_type (minfo, pp, (debug_type *) NULL))
4200
            return FALSE;
4201
        }
4202
      else
4203
        {
4204
          const char *old_p;
4205
          bfd_boolean pointerp, realp, integralp, charp, boolp;
4206
          bfd_boolean done;
4207
 
4208
          old_p = *pp;
4209
          pointerp = FALSE;
4210
          realp = FALSE;
4211
          integralp = FALSE;
4212
          charp = FALSE;
4213
          boolp = FALSE;
4214
          done = FALSE;
4215
 
4216
          /* This is a value parameter.  */
4217
 
4218
          if (! stab_demangle_type (minfo, pp, (debug_type *) NULL))
4219
            return FALSE;
4220
 
4221
          while (*old_p != '\0' && ! done)
4222
            {
4223
              switch (*old_p)
4224
                {
4225
                case 'P':
4226
                case 'p':
4227
                case 'R':
4228
                  pointerp = TRUE;
4229
                  done = TRUE;
4230
                  break;
4231
                case 'C':       /* Const.  */
4232
                case 'S':       /* Signed.  */
4233
                case 'U':       /* Unsigned.  */
4234
                case 'V':       /* Volatile.  */
4235
                case 'F':       /* Function.  */
4236
                case 'M':       /* Member function.  */
4237
                case 'O':       /* ??? */
4238
                  ++old_p;
4239
                  break;
4240
                case 'Q':       /* Qualified name.  */
4241
                  integralp = TRUE;
4242
                  done = TRUE;
4243
                  break;
4244
                case 'T':       /* Remembered type.  */
4245
                  abort ();
4246
                case 'v':       /* Void.  */
4247
                  abort ();
4248
                case 'x':       /* Long long.  */
4249
                case 'l':       /* Long.  */
4250
                case 'i':       /* Int.  */
4251
                case 's':       /* Short.  */
4252
                case 'w':       /* Wchar_t.  */
4253
                  integralp = TRUE;
4254
                  done = TRUE;
4255
                  break;
4256
                case 'b':       /* Bool.  */
4257
                  boolp = TRUE;
4258
                  done = TRUE;
4259
                  break;
4260
                case 'c':       /* Char.  */
4261
                  charp = TRUE;
4262
                  done = TRUE;
4263
                  break;
4264
                case 'r':       /* Long double.  */
4265
                case 'd':       /* Double.  */
4266
                case 'f':       /* Float.  */
4267
                  realp = TRUE;
4268
                  done = TRUE;
4269
                  break;
4270
                default:
4271
                  /* Assume it's a user defined integral type.  */
4272
                  integralp = TRUE;
4273
                  done = TRUE;
4274
                  break;
4275
                }
4276
            }
4277
 
4278
          if (integralp)
4279
            {
4280
              if (**pp == 'm')
4281
                ++*pp;
4282
              while (ISDIGIT (**pp))
4283
                ++*pp;
4284
            }
4285
          else if (charp)
4286
            {
4287
              unsigned int val;
4288
 
4289
              if (**pp == 'm')
4290
                ++*pp;
4291
              val = stab_demangle_count (pp);
4292
              if (val == 0)
4293
                {
4294
                  stab_bad_demangle (orig);
4295
                  return FALSE;
4296
                }
4297
            }
4298
          else if (boolp)
4299
            {
4300
              unsigned int val;
4301
 
4302
              val = stab_demangle_count (pp);
4303
              if (val != 0 && val != 1)
4304
                {
4305
                  stab_bad_demangle (orig);
4306
                  return FALSE;
4307
                }
4308
            }
4309
          else if (realp)
4310
            {
4311
              if (**pp == 'm')
4312
                ++*pp;
4313
              while (ISDIGIT (**pp))
4314
                ++*pp;
4315
              if (**pp == '.')
4316
                {
4317
                  ++*pp;
4318
                  while (ISDIGIT (**pp))
4319
                    ++*pp;
4320
                }
4321
              if (**pp == 'e')
4322
                {
4323
                  ++*pp;
4324
                  while (ISDIGIT (**pp))
4325
                    ++*pp;
4326
                }
4327
            }
4328
          else if (pointerp)
4329
            {
4330
              unsigned int len;
4331
 
4332
              len = stab_demangle_count (pp);
4333
              if (len == 0)
4334
                {
4335
                  stab_bad_demangle (orig);
4336
                  return FALSE;
4337
                }
4338
              *pp += len;
4339
            }
4340
        }
4341
    }
4342
 
4343
  /* We can translate this to a string fairly easily by invoking the
4344
     regular demangling routine.  */
4345
  if (pname != NULL)
4346
    {
4347
      char *s1, *s2, *s3, *s4 = NULL;
4348
      char *from, *to;
4349
 
4350
      s1 = savestring (orig, *pp - orig);
4351
 
4352
      s2 = concat ("NoSuchStrinG__", s1, (const char *) NULL);
4353
 
4354
      free (s1);
4355
 
4356
      s3 = cplus_demangle (s2, DMGL_ANSI);
4357
 
4358
      free (s2);
4359
 
4360
      if (s3 != NULL)
4361
        s4 = strstr (s3, "::NoSuchStrinG");
4362
      if (s3 == NULL || s4 == NULL)
4363
        {
4364
          stab_bad_demangle (orig);
4365
          if (s3 != NULL)
4366
            free (s3);
4367
          return FALSE;
4368
        }
4369
 
4370
      /* Eliminating all spaces, except those between > characters,
4371
         makes it more likely that the demangled name will match the
4372
         name which g++ used as the structure name.  */
4373
      for (from = to = s3; from != s4; ++from)
4374
        if (*from != ' '
4375
            || (from[1] == '>' && from > s3 && from[-1] == '>'))
4376
          *to++ = *from;
4377
 
4378
      *pname = savestring (s3, to - s3);
4379
 
4380
      free (s3);
4381
    }
4382
 
4383
  return TRUE;
4384
}
4385
 
4386
/* Demangle a class name.  */
4387
 
4388
static bfd_boolean
4389
stab_demangle_class (struct stab_demangle_info *minfo ATTRIBUTE_UNUSED,
4390
                     const char **pp, const char **pstart)
4391
{
4392
  const char *orig;
4393
  unsigned int n;
4394
 
4395
  orig = *pp;
4396
 
4397
  n = stab_demangle_count (pp);
4398
  if (strlen (*pp) < n)
4399
    {
4400
      stab_bad_demangle (orig);
4401
      return FALSE;
4402
    }
4403
 
4404
  if (pstart != NULL)
4405
    *pstart = *pp;
4406
 
4407
  *pp += n;
4408
 
4409
  return TRUE;
4410
}
4411
 
4412
/* Demangle function arguments.  If the pargs argument is not NULL, it
4413
   is set to a NULL terminated array holding the arguments.  */
4414
 
4415
static bfd_boolean
4416
stab_demangle_args (struct stab_demangle_info *minfo, const char **pp,
4417
                    debug_type **pargs, bfd_boolean *pvarargs)
4418
{
4419
  const char *orig;
4420
  unsigned int alloc, count;
4421
 
4422
  orig = *pp;
4423
 
4424
  alloc = 10;
4425
  if (pargs != NULL)
4426
    {
4427
      *pargs = (debug_type *) xmalloc (alloc * sizeof **pargs);
4428
      *pvarargs = FALSE;
4429
    }
4430
  count = 0;
4431
 
4432
  while (**pp != '_' && **pp != '\0' && **pp != 'e')
4433
    {
4434
      if (**pp == 'N' || **pp == 'T')
4435
        {
4436
          char temptype;
4437
          unsigned int r, t;
4438
 
4439
          temptype = **pp;
4440
          ++*pp;
4441
 
4442
          if (temptype == 'T')
4443
            r = 1;
4444
          else
4445
            {
4446
              if (! stab_demangle_get_count (pp, &r))
4447
                {
4448
                  stab_bad_demangle (orig);
4449
                  return FALSE;
4450
                }
4451
            }
4452
 
4453
          if (! stab_demangle_get_count (pp, &t))
4454
            {
4455
              stab_bad_demangle (orig);
4456
              return FALSE;
4457
            }
4458
 
4459
          if (t >= minfo->typestring_count)
4460
            {
4461
              stab_bad_demangle (orig);
4462
              return FALSE;
4463
            }
4464
          while (r-- > 0)
4465
            {
4466
              const char *tem;
4467
 
4468
              tem = minfo->typestrings[t].typestring;
4469
              if (! stab_demangle_arg (minfo, &tem, pargs, &count, &alloc))
4470
                return FALSE;
4471
            }
4472
        }
4473
      else
4474
        {
4475
          if (! stab_demangle_arg (minfo, pp, pargs, &count, &alloc))
4476
            return FALSE;
4477
        }
4478
    }
4479
 
4480
  if (pargs != NULL)
4481
    (*pargs)[count] = DEBUG_TYPE_NULL;
4482
 
4483
  if (**pp == 'e')
4484
    {
4485
      if (pargs != NULL)
4486
        *pvarargs = TRUE;
4487
      ++*pp;
4488
    }
4489
 
4490
  return TRUE;
4491
}
4492
 
4493
/* Demangle a single argument.  */
4494
 
4495
static bfd_boolean
4496
stab_demangle_arg (struct stab_demangle_info *minfo, const char **pp,
4497
                   debug_type **pargs, unsigned int *pcount,
4498
                   unsigned int *palloc)
4499
{
4500
  const char *start;
4501
  debug_type type;
4502
 
4503
  start = *pp;
4504
  if (! stab_demangle_type (minfo, pp,
4505
                            pargs == NULL ? (debug_type *) NULL : &type)
4506
      || ! stab_demangle_remember_type (minfo, start, *pp - start))
4507
    return FALSE;
4508
 
4509
  if (pargs != NULL)
4510
    {
4511
      if (type == DEBUG_TYPE_NULL)
4512
        return FALSE;
4513
 
4514
      if (*pcount + 1 >= *palloc)
4515
        {
4516
          *palloc += 10;
4517
          *pargs = ((debug_type *)
4518
                    xrealloc (*pargs, *palloc * sizeof **pargs));
4519
        }
4520
      (*pargs)[*pcount] = type;
4521
      ++*pcount;
4522
    }
4523
 
4524
  return TRUE;
4525
}
4526
 
4527
/* Demangle a type.  If the ptype argument is not NULL, *ptype is set
4528
   to the newly allocated type.  */
4529
 
4530
static bfd_boolean
4531
stab_demangle_type (struct stab_demangle_info *minfo, const char **pp,
4532
                    debug_type *ptype)
4533
{
4534
  const char *orig;
4535
 
4536
  orig = *pp;
4537
 
4538
  switch (**pp)
4539
    {
4540
    case 'P':
4541
    case 'p':
4542
      /* A pointer type.  */
4543
      ++*pp;
4544
      if (! stab_demangle_type (minfo, pp, ptype))
4545
        return FALSE;
4546
      if (ptype != NULL)
4547
        *ptype = debug_make_pointer_type (minfo->dhandle, *ptype);
4548
      break;
4549
 
4550
    case 'R':
4551
      /* A reference type.  */
4552
      ++*pp;
4553
      if (! stab_demangle_type (minfo, pp, ptype))
4554
        return FALSE;
4555
      if (ptype != NULL)
4556
        *ptype = debug_make_reference_type (minfo->dhandle, *ptype);
4557
      break;
4558
 
4559
    case 'A':
4560
      /* An array.  */
4561
      {
4562
        unsigned long high;
4563
 
4564
        ++*pp;
4565
        high = 0;
4566
        while (**pp != '\0' && **pp != '_')
4567
          {
4568
            if (! ISDIGIT (**pp))
4569
              {
4570
                stab_bad_demangle (orig);
4571
                return FALSE;
4572
              }
4573
            high *= 10;
4574
            high += **pp - '0';
4575
            ++*pp;
4576
          }
4577
        if (**pp != '_')
4578
          {
4579
            stab_bad_demangle (orig);
4580
            return FALSE;
4581
          }
4582
        ++*pp;
4583
 
4584
        if (! stab_demangle_type (minfo, pp, ptype))
4585
          return FALSE;
4586
        if (ptype != NULL)
4587
          {
4588
            debug_type int_type;
4589
 
4590
            int_type = debug_find_named_type (minfo->dhandle, "int");
4591
            if (int_type == NULL)
4592
              int_type = debug_make_int_type (minfo->dhandle, 4, FALSE);
4593
            *ptype = debug_make_array_type (minfo->dhandle, *ptype, int_type,
4594
                                            0, high, FALSE);
4595
          }
4596
      }
4597
      break;
4598
 
4599
    case 'T':
4600
      /* A back reference to a remembered type.  */
4601
      {
4602
        unsigned int i;
4603
        const char *p;
4604
 
4605
        ++*pp;
4606
        if (! stab_demangle_get_count (pp, &i))
4607
          {
4608
            stab_bad_demangle (orig);
4609
            return FALSE;
4610
          }
4611
        if (i >= minfo->typestring_count)
4612
          {
4613
            stab_bad_demangle (orig);
4614
            return FALSE;
4615
          }
4616
        p = minfo->typestrings[i].typestring;
4617
        if (! stab_demangle_type (minfo, &p, ptype))
4618
          return FALSE;
4619
      }
4620
      break;
4621
 
4622
    case 'F':
4623
      /* A function.  */
4624
      {
4625
        debug_type *args;
4626
        bfd_boolean varargs;
4627
 
4628
        ++*pp;
4629
        if (! stab_demangle_args (minfo, pp,
4630
                                  (ptype == NULL
4631
                                   ? (debug_type **) NULL
4632
                                   : &args),
4633
                                  (ptype == NULL
4634
                                   ? (bfd_boolean *) NULL
4635
                                   : &varargs)))
4636
          return FALSE;
4637
        if (**pp != '_')
4638
          {
4639
            /* cplus_demangle will accept a function without a return
4640
               type, but I don't know when that will happen, or what
4641
               to do if it does.  */
4642
            stab_bad_demangle (orig);
4643
            return FALSE;
4644
          }
4645
        ++*pp;
4646
        if (! stab_demangle_type (minfo, pp, ptype))
4647
          return FALSE;
4648
        if (ptype != NULL)
4649
          *ptype = debug_make_function_type (minfo->dhandle, *ptype, args,
4650
                                             varargs);
4651
 
4652
      }
4653
      break;
4654
 
4655
    case 'M':
4656
    case 'O':
4657
      {
4658 663 jeremybenn
        bfd_boolean memberp;
4659 205 julius
        debug_type class_type = DEBUG_TYPE_NULL;
4660
        debug_type *args;
4661
        bfd_boolean varargs;
4662
        unsigned int n;
4663
        const char *name;
4664
 
4665
        memberp = **pp == 'M';
4666
        args = NULL;
4667
        varargs = FALSE;
4668
 
4669
        ++*pp;
4670
        if (ISDIGIT (**pp))
4671
          {
4672
            n = stab_demangle_count (pp);
4673
            if (strlen (*pp) < n)
4674
              {
4675
                stab_bad_demangle (orig);
4676
                return FALSE;
4677
              }
4678
            name = *pp;
4679
            *pp += n;
4680
 
4681
            if (ptype != NULL)
4682
              {
4683
                class_type = stab_find_tagged_type (minfo->dhandle,
4684
                                                    minfo->info,
4685
                                                    name, (int) n,
4686
                                                    DEBUG_KIND_CLASS);
4687
                if (class_type == DEBUG_TYPE_NULL)
4688
                  return FALSE;
4689
              }
4690
          }
4691
        else if (**pp == 'Q')
4692
          {
4693
            if (! stab_demangle_qualified (minfo, pp,
4694
                                           (ptype == NULL
4695
                                            ? (debug_type *) NULL
4696
                                            : &class_type)))
4697
              return FALSE;
4698
          }
4699
        else
4700
          {
4701
            stab_bad_demangle (orig);
4702
            return FALSE;
4703
          }
4704
 
4705
        if (memberp)
4706
          {
4707
            if (**pp == 'C')
4708
              {
4709
                ++*pp;
4710
              }
4711
            else if (**pp == 'V')
4712
              {
4713
                ++*pp;
4714
              }
4715
            if (**pp != 'F')
4716
              {
4717
                stab_bad_demangle (orig);
4718
                return FALSE;
4719
              }
4720
            ++*pp;
4721
            if (! stab_demangle_args (minfo, pp,
4722
                                      (ptype == NULL
4723
                                       ? (debug_type **) NULL
4724
                                       : &args),
4725
                                      (ptype == NULL
4726
                                       ? (bfd_boolean *) NULL
4727
                                       : &varargs)))
4728
              return FALSE;
4729
          }
4730
 
4731
        if (**pp != '_')
4732
          {
4733
            stab_bad_demangle (orig);
4734
            return FALSE;
4735
          }
4736
        ++*pp;
4737
 
4738
        if (! stab_demangle_type (minfo, pp, ptype))
4739
          return FALSE;
4740
 
4741
        if (ptype != NULL)
4742
          {
4743
            if (! memberp)
4744
              *ptype = debug_make_offset_type (minfo->dhandle, class_type,
4745
                                               *ptype);
4746
            else
4747
              {
4748
                /* FIXME: We have no way to record constp or
4749
                   volatilep.  */
4750
                *ptype = debug_make_method_type (minfo->dhandle, *ptype,
4751
                                                 class_type, args, varargs);
4752
              }
4753
          }
4754
      }
4755
      break;
4756
 
4757
    case 'G':
4758
      ++*pp;
4759
      if (! stab_demangle_type (minfo, pp, ptype))
4760
        return FALSE;
4761
      break;
4762
 
4763
    case 'C':
4764
      ++*pp;
4765
      if (! stab_demangle_type (minfo, pp, ptype))
4766
        return FALSE;
4767
      if (ptype != NULL)
4768
        *ptype = debug_make_const_type (minfo->dhandle, *ptype);
4769
      break;
4770
 
4771
    case 'Q':
4772
      {
4773
        if (! stab_demangle_qualified (minfo, pp, ptype))
4774
          return FALSE;
4775
      }
4776
      break;
4777
 
4778
    default:
4779
      if (! stab_demangle_fund_type (minfo, pp, ptype))
4780
        return FALSE;
4781
      break;
4782
    }
4783
 
4784
  return TRUE;
4785
}
4786
 
4787
/* Demangle a fundamental type.  If the ptype argument is not NULL,
4788
   *ptype is set to the newly allocated type.  */
4789
 
4790
static bfd_boolean
4791
stab_demangle_fund_type (struct stab_demangle_info *minfo, const char **pp,
4792
                         debug_type *ptype)
4793
{
4794
  const char *orig;
4795
  bfd_boolean constp, volatilep, unsignedp, signedp;
4796
  bfd_boolean done;
4797
 
4798
  orig = *pp;
4799
 
4800
  constp = FALSE;
4801
  volatilep = FALSE;
4802
  unsignedp = FALSE;
4803
  signedp = FALSE;
4804
 
4805
  done = FALSE;
4806
  while (! done)
4807
    {
4808
      switch (**pp)
4809
        {
4810
        case 'C':
4811
          constp = TRUE;
4812
          ++*pp;
4813
          break;
4814
 
4815
        case 'U':
4816
          unsignedp = TRUE;
4817
          ++*pp;
4818
          break;
4819
 
4820
        case 'S':
4821
          signedp = TRUE;
4822
          ++*pp;
4823
          break;
4824
 
4825
        case 'V':
4826
          volatilep = TRUE;
4827
          ++*pp;
4828
          break;
4829
 
4830
        default:
4831
          done = TRUE;
4832
          break;
4833
        }
4834
    }
4835
 
4836
  switch (**pp)
4837
    {
4838
    case '\0':
4839
    case '_':
4840
      /* cplus_demangle permits this, but I don't know what it means.  */
4841
      stab_bad_demangle (orig);
4842
      break;
4843
 
4844
    case 'v': /* void */
4845
      if (ptype != NULL)
4846
        {
4847
          *ptype = debug_find_named_type (minfo->dhandle, "void");
4848
          if (*ptype == DEBUG_TYPE_NULL)
4849
            *ptype = debug_make_void_type (minfo->dhandle);
4850
        }
4851
      ++*pp;
4852
      break;
4853
 
4854
    case 'x': /* long long */
4855
      if (ptype != NULL)
4856
        {
4857
          *ptype = debug_find_named_type (minfo->dhandle,
4858
                                          (unsignedp
4859
                                           ? "long long unsigned int"
4860
                                           : "long long int"));
4861
          if (*ptype == DEBUG_TYPE_NULL)
4862
            *ptype = debug_make_int_type (minfo->dhandle, 8, unsignedp);
4863
        }
4864
      ++*pp;
4865
      break;
4866
 
4867
    case 'l': /* long */
4868
      if (ptype != NULL)
4869
        {
4870
          *ptype = debug_find_named_type (minfo->dhandle,
4871
                                          (unsignedp
4872
                                           ? "long unsigned int"
4873
                                           : "long int"));
4874
          if (*ptype == DEBUG_TYPE_NULL)
4875
            *ptype = debug_make_int_type (minfo->dhandle, 4, unsignedp);
4876
        }
4877
      ++*pp;
4878
      break;
4879
 
4880
    case 'i': /* int */
4881
      if (ptype != NULL)
4882
        {
4883
          *ptype = debug_find_named_type (minfo->dhandle,
4884
                                          (unsignedp
4885
                                           ? "unsigned int"
4886
                                           : "int"));
4887
          if (*ptype == DEBUG_TYPE_NULL)
4888
            *ptype = debug_make_int_type (minfo->dhandle, 4, unsignedp);
4889
        }
4890
      ++*pp;
4891
      break;
4892
 
4893
    case 's': /* short */
4894
      if (ptype != NULL)
4895
        {
4896
          *ptype = debug_find_named_type (minfo->dhandle,
4897
                                          (unsignedp
4898
                                           ? "short unsigned int"
4899
                                           : "short int"));
4900
          if (*ptype == DEBUG_TYPE_NULL)
4901
            *ptype = debug_make_int_type (minfo->dhandle, 2, unsignedp);
4902
        }
4903
      ++*pp;
4904
      break;
4905
 
4906
    case 'b': /* bool */
4907
      if (ptype != NULL)
4908
        {
4909
          *ptype = debug_find_named_type (minfo->dhandle, "bool");
4910
          if (*ptype == DEBUG_TYPE_NULL)
4911
            *ptype = debug_make_bool_type (minfo->dhandle, 4);
4912
        }
4913
      ++*pp;
4914
      break;
4915
 
4916
    case 'c': /* char */
4917
      if (ptype != NULL)
4918
        {
4919
          *ptype = debug_find_named_type (minfo->dhandle,
4920
                                          (unsignedp
4921
                                           ? "unsigned char"
4922
                                           : (signedp
4923
                                              ? "signed char"
4924
                                              : "char")));
4925
          if (*ptype == DEBUG_TYPE_NULL)
4926
            *ptype = debug_make_int_type (minfo->dhandle, 1, unsignedp);
4927
        }
4928
      ++*pp;
4929
      break;
4930
 
4931
    case 'w': /* wchar_t */
4932
      if (ptype != NULL)
4933
        {
4934
          *ptype = debug_find_named_type (minfo->dhandle, "__wchar_t");
4935
          if (*ptype == DEBUG_TYPE_NULL)
4936
            *ptype = debug_make_int_type (minfo->dhandle, 2, TRUE);
4937
        }
4938
      ++*pp;
4939
      break;
4940
 
4941
    case 'r': /* long double */
4942
      if (ptype != NULL)
4943
        {
4944
          *ptype = debug_find_named_type (minfo->dhandle, "long double");
4945
          if (*ptype == DEBUG_TYPE_NULL)
4946
            *ptype = debug_make_float_type (minfo->dhandle, 8);
4947
        }
4948
      ++*pp;
4949
      break;
4950
 
4951
    case 'd': /* double */
4952
      if (ptype != NULL)
4953
        {
4954
          *ptype = debug_find_named_type (minfo->dhandle, "double");
4955
          if (*ptype == DEBUG_TYPE_NULL)
4956
            *ptype = debug_make_float_type (minfo->dhandle, 8);
4957
        }
4958
      ++*pp;
4959
      break;
4960
 
4961
    case 'f': /* float */
4962
      if (ptype != NULL)
4963
        {
4964
          *ptype = debug_find_named_type (minfo->dhandle, "float");
4965
          if (*ptype == DEBUG_TYPE_NULL)
4966
            *ptype = debug_make_float_type (minfo->dhandle, 4);
4967
        }
4968
      ++*pp;
4969
      break;
4970
 
4971
    case 'G':
4972
      ++*pp;
4973
      if (! ISDIGIT (**pp))
4974
        {
4975
          stab_bad_demangle (orig);
4976
          return FALSE;
4977
        }
4978
      /* Fall through.  */
4979
    case '0': case '1': case '2': case '3': case '4':
4980
    case '5': case '6': case '7': case '8': case '9':
4981
      {
4982
        const char *hold;
4983
 
4984
        if (! stab_demangle_class (minfo, pp, &hold))
4985
          return FALSE;
4986
        if (ptype != NULL)
4987
          {
4988
            char *name;
4989
 
4990
            name = savestring (hold, *pp - hold);
4991
            *ptype = debug_find_named_type (minfo->dhandle, name);
4992
            free (name);
4993
            if (*ptype == DEBUG_TYPE_NULL)
4994
              {
4995
                /* FIXME: It is probably incorrect to assume that
4996
                   undefined types are tagged types.  */
4997
                *ptype = stab_find_tagged_type (minfo->dhandle, minfo->info,
4998
                                                hold, *pp - hold,
4999
                                                DEBUG_KIND_ILLEGAL);
5000
                if (*ptype == DEBUG_TYPE_NULL)
5001
                  return FALSE;
5002
              }
5003
          }
5004
      }
5005
      break;
5006
 
5007
    case 't':
5008
      {
5009
        char *name;
5010
 
5011
        if (! stab_demangle_template (minfo, pp,
5012
                                      ptype != NULL ? &name : NULL))
5013
          return FALSE;
5014
        if (ptype != NULL)
5015
          {
5016
            *ptype = stab_find_tagged_type (minfo->dhandle, minfo->info,
5017
                                            name, strlen (name),
5018
                                            DEBUG_KIND_CLASS);
5019
            free (name);
5020
            if (*ptype == DEBUG_TYPE_NULL)
5021
              return FALSE;
5022
          }
5023
      }
5024
      break;
5025
 
5026
    default:
5027
      stab_bad_demangle (orig);
5028
      return FALSE;
5029
    }
5030
 
5031
  if (ptype != NULL)
5032
    {
5033
      if (constp)
5034
        *ptype = debug_make_const_type (minfo->dhandle, *ptype);
5035
      if (volatilep)
5036
        *ptype = debug_make_volatile_type (minfo->dhandle, *ptype);
5037
    }
5038
 
5039
  return TRUE;
5040
}
5041
 
5042
/* Remember a type string in a demangled string.  */
5043
 
5044
static bfd_boolean
5045
stab_demangle_remember_type (struct stab_demangle_info *minfo,
5046
                             const char *p, int len)
5047
{
5048
  if (minfo->typestring_count >= minfo->typestring_alloc)
5049
    {
5050
      minfo->typestring_alloc += 10;
5051
      minfo->typestrings = ((struct stab_demangle_typestring *)
5052
                            xrealloc (minfo->typestrings,
5053
                                      (minfo->typestring_alloc
5054
                                       * sizeof *minfo->typestrings)));
5055
    }
5056
 
5057
  minfo->typestrings[minfo->typestring_count].typestring = p;
5058
  minfo->typestrings[minfo->typestring_count].len = (unsigned int) len;
5059
  ++minfo->typestring_count;
5060
 
5061
  return TRUE;
5062
}
5063
 
5064
/* Demangle names encoded using the g++ V3 ABI.  The newer versions of
5065
   g++ which use this ABI do not encode ordinary method argument types
5066
   in a mangled name; they simply output the argument types.  However,
5067
   for a static method, g++ simply outputs the return type and the
5068
   physical name.  So in that case we need to demangle the name here.
5069
   Here PHYSNAME is the physical name of the function, and we set the
5070
   variable pointed at by PVARARGS to indicate whether this function
5071
   is varargs.  This returns NULL, or a NULL terminated array of
5072
   argument types.  */
5073
 
5074
static debug_type *
5075
stab_demangle_v3_argtypes (void *dhandle, struct stab_handle *info,
5076
                           const char *physname, bfd_boolean *pvarargs)
5077
{
5078
  struct demangle_component *dc;
5079
  void *mem;
5080
  debug_type *pargs;
5081
 
5082
  dc = cplus_demangle_v3_components (physname, DMGL_PARAMS | DMGL_ANSI, &mem);
5083
  if (dc == NULL)
5084
    {
5085
      stab_bad_demangle (physname);
5086
      return NULL;
5087
    }
5088
 
5089
  /* We expect to see TYPED_NAME, and the right subtree describes the
5090
     function type.  */
5091
  if (dc->type != DEMANGLE_COMPONENT_TYPED_NAME
5092
      || dc->u.s_binary.right->type != DEMANGLE_COMPONENT_FUNCTION_TYPE)
5093
    {
5094
      fprintf (stderr, _("Demangled name is not a function\n"));
5095
      free (mem);
5096
      return NULL;
5097
    }
5098
 
5099
  pargs = stab_demangle_v3_arglist (dhandle, info,
5100
                                    dc->u.s_binary.right->u.s_binary.right,
5101
                                    pvarargs);
5102
 
5103
  free (mem);
5104
 
5105
  return pargs;
5106
}
5107
 
5108
/* Demangle an argument list in a struct demangle_component tree.
5109
   Returns a DEBUG_TYPE_NULL terminated array of argument types, and
5110
   sets *PVARARGS to indicate whether this is a varargs function.  */
5111
 
5112
static debug_type *
5113
stab_demangle_v3_arglist (void *dhandle, struct stab_handle *info,
5114
                          struct demangle_component *arglist,
5115
                          bfd_boolean *pvarargs)
5116
{
5117
  struct demangle_component *dc;
5118
  unsigned int alloc, count;
5119
  debug_type *pargs;
5120
 
5121
  alloc = 10;
5122
  pargs = (debug_type *) xmalloc (alloc * sizeof *pargs);
5123
  *pvarargs = FALSE;
5124
 
5125
  count = 0;
5126
 
5127
  for (dc = arglist;
5128
       dc != NULL;
5129
       dc = dc->u.s_binary.right)
5130
    {
5131
      debug_type arg;
5132
      bfd_boolean varargs;
5133
 
5134
      if (dc->type != DEMANGLE_COMPONENT_ARGLIST)
5135
        {
5136
          fprintf (stderr, _("Unexpected type in v3 arglist demangling\n"));
5137
          free (pargs);
5138
          return NULL;
5139
        }
5140
 
5141
      arg = stab_demangle_v3_arg (dhandle, info, dc->u.s_binary.left,
5142
                                  NULL, &varargs);
5143
      if (arg == NULL)
5144
        {
5145
          if (varargs)
5146
            {
5147
              *pvarargs = TRUE;
5148
              continue;
5149
            }
5150
          free (pargs);
5151
          return NULL;
5152
        }
5153
 
5154
      if (count + 1 >= alloc)
5155
        {
5156
          alloc += 10;
5157
          pargs = (debug_type *) xrealloc (pargs, alloc * sizeof *pargs);
5158
        }
5159
 
5160
      pargs[count] = arg;
5161
      ++count;
5162
    }
5163
 
5164
  pargs[count] = DEBUG_TYPE_NULL;
5165
 
5166
  return pargs;
5167
}
5168
 
5169
/* Convert a struct demangle_component tree describing an argument
5170
   type into a debug_type.  */
5171
 
5172
static debug_type
5173
stab_demangle_v3_arg (void *dhandle, struct stab_handle *info,
5174
                      struct demangle_component *dc, debug_type context,
5175
                      bfd_boolean *pvarargs)
5176
{
5177
  debug_type dt;
5178
 
5179
  if (pvarargs != NULL)
5180
    *pvarargs = FALSE;
5181
 
5182
  switch (dc->type)
5183
    {
5184
      /* FIXME: These are demangle component types which we probably
5185
         need to handle one way or another.  */
5186
    case DEMANGLE_COMPONENT_LOCAL_NAME:
5187
    case DEMANGLE_COMPONENT_TYPED_NAME:
5188
    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
5189
    case DEMANGLE_COMPONENT_CTOR:
5190
    case DEMANGLE_COMPONENT_DTOR:
5191
    case DEMANGLE_COMPONENT_JAVA_CLASS:
5192
    case DEMANGLE_COMPONENT_RESTRICT_THIS:
5193
    case DEMANGLE_COMPONENT_VOLATILE_THIS:
5194
    case DEMANGLE_COMPONENT_CONST_THIS:
5195
    case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
5196
    case DEMANGLE_COMPONENT_COMPLEX:
5197
    case DEMANGLE_COMPONENT_IMAGINARY:
5198
    case DEMANGLE_COMPONENT_VENDOR_TYPE:
5199
    case DEMANGLE_COMPONENT_ARRAY_TYPE:
5200
    case DEMANGLE_COMPONENT_PTRMEM_TYPE:
5201
    case DEMANGLE_COMPONENT_ARGLIST:
5202
    default:
5203
      fprintf (stderr, _("Unrecognized demangle component %d\n"),
5204
               (int) dc->type);
5205
      return NULL;
5206
 
5207
    case DEMANGLE_COMPONENT_NAME:
5208
      if (context != NULL)
5209
        {
5210
          const debug_field *fields;
5211
 
5212
          fields = debug_get_fields (dhandle, context);
5213
          if (fields != NULL)
5214
            {
5215
              /* Try to find this type by looking through the context
5216
                 class.  */
5217
              for (; *fields != DEBUG_FIELD_NULL; fields++)
5218
                {
5219
                  debug_type ft;
5220
                  const char *dn;
5221
 
5222
                  ft = debug_get_field_type (dhandle, *fields);
5223
                  if (ft == NULL)
5224
                    return NULL;
5225
                  dn = debug_get_type_name (dhandle, ft);
5226
                  if (dn != NULL
5227
                      && (int) strlen (dn) == dc->u.s_name.len
5228
                      && strncmp (dn, dc->u.s_name.s, dc->u.s_name.len) == 0)
5229
                    return ft;
5230
                }
5231
            }
5232
        }
5233
      return stab_find_tagged_type (dhandle, info, dc->u.s_name.s,
5234
                                    dc->u.s_name.len, DEBUG_KIND_ILLEGAL);
5235
 
5236
    case DEMANGLE_COMPONENT_QUAL_NAME:
5237
      context = stab_demangle_v3_arg (dhandle, info, dc->u.s_binary.left,
5238
                                      context, NULL);
5239
      if (context == NULL)
5240
        return NULL;
5241
      return stab_demangle_v3_arg (dhandle, info, dc->u.s_binary.right,
5242
                                   context, NULL);
5243
 
5244
    case DEMANGLE_COMPONENT_TEMPLATE:
5245
      {
5246
        char *p;
5247
        size_t alc;
5248
 
5249
        /* We print this component to get a class name which we can
5250
           use.  FIXME: This probably won't work if the template uses
5251
           template parameters which refer to an outer template.  */
5252
        p = cplus_demangle_print (DMGL_PARAMS | DMGL_ANSI, dc, 20, &alc);
5253
        if (p == NULL)
5254
          {
5255
            fprintf (stderr, _("Failed to print demangled template\n"));
5256
            return NULL;
5257
          }
5258
        dt = stab_find_tagged_type (dhandle, info, p, strlen (p),
5259
                                    DEBUG_KIND_CLASS);
5260
        free (p);
5261
        return dt;
5262
      }
5263
 
5264
    case DEMANGLE_COMPONENT_SUB_STD:
5265
      return stab_find_tagged_type (dhandle, info, dc->u.s_string.string,
5266
                                    dc->u.s_string.len, DEBUG_KIND_ILLEGAL);
5267
 
5268
    case DEMANGLE_COMPONENT_RESTRICT:
5269
    case DEMANGLE_COMPONENT_VOLATILE:
5270
    case DEMANGLE_COMPONENT_CONST:
5271
    case DEMANGLE_COMPONENT_POINTER:
5272
    case DEMANGLE_COMPONENT_REFERENCE:
5273
      dt = stab_demangle_v3_arg (dhandle, info, dc->u.s_binary.left, NULL,
5274
                                 NULL);
5275
      if (dt == NULL)
5276
        return NULL;
5277
 
5278
      switch (dc->type)
5279
        {
5280
        default:
5281
          abort ();
5282
        case DEMANGLE_COMPONENT_RESTRICT:
5283
          /* FIXME: We have no way to represent restrict.  */
5284
          return dt;
5285
        case DEMANGLE_COMPONENT_VOLATILE:
5286
          return debug_make_volatile_type (dhandle, dt);
5287
        case DEMANGLE_COMPONENT_CONST:
5288
          return debug_make_const_type (dhandle, dt);
5289
        case DEMANGLE_COMPONENT_POINTER:
5290
          return debug_make_pointer_type (dhandle, dt);
5291
        case DEMANGLE_COMPONENT_REFERENCE:
5292
          return debug_make_reference_type (dhandle, dt);
5293
        }
5294
 
5295
    case DEMANGLE_COMPONENT_FUNCTION_TYPE:
5296
      {
5297
        debug_type *pargs;
5298
        bfd_boolean varargs;
5299
 
5300
        if (dc->u.s_binary.left == NULL)
5301
          {
5302
            /* In this case the return type is actually unknown.
5303
               However, I'm not sure this will ever arise in practice;
5304
               normally an unknown return type would only appear at
5305
               the top level, which is handled above.  */
5306
            dt = debug_make_void_type (dhandle);
5307
          }
5308
        else
5309
          dt = stab_demangle_v3_arg (dhandle, info, dc->u.s_binary.left, NULL,
5310
                                     NULL);
5311
        if (dt == NULL)
5312
          return NULL;
5313
 
5314
        pargs = stab_demangle_v3_arglist (dhandle, info,
5315
                                          dc->u.s_binary.right,
5316
                                          &varargs);
5317
        if (pargs == NULL)
5318
          return NULL;
5319
 
5320
        return debug_make_function_type (dhandle, dt, pargs, varargs);
5321
      }
5322
 
5323
    case DEMANGLE_COMPONENT_BUILTIN_TYPE:
5324
      {
5325
        char *p;
5326
        size_t alc;
5327
        debug_type ret;
5328
 
5329
        /* We print this component in order to find out the type name.
5330
           FIXME: Should we instead expose the
5331
           demangle_builtin_type_info structure?  */
5332
        p = cplus_demangle_print (DMGL_PARAMS | DMGL_ANSI, dc, 20, &alc);
5333
        if (p == NULL)
5334
          {
5335
            fprintf (stderr, _("Couldn't get demangled builtin type\n"));
5336
            return NULL;
5337
          }
5338
 
5339
        /* The mangling is based on the type, but does not itself
5340
           indicate what the sizes are.  So we have to guess.  */
5341
        if (strcmp (p, "signed char") == 0)
5342
          ret = debug_make_int_type (dhandle, 1, FALSE);
5343
        else if (strcmp (p, "bool") == 0)
5344
          ret = debug_make_bool_type (dhandle, 1);
5345
        else if (strcmp (p, "char") == 0)
5346
          ret = debug_make_int_type (dhandle, 1, FALSE);
5347
        else if (strcmp (p, "double") == 0)
5348
          ret = debug_make_float_type (dhandle, 8);
5349
        else if (strcmp (p, "long double") == 0)
5350
          ret = debug_make_float_type (dhandle, 8);
5351
        else if (strcmp (p, "float") == 0)
5352
          ret = debug_make_float_type (dhandle, 4);
5353
        else if (strcmp (p, "__float128") == 0)
5354
          ret = debug_make_float_type (dhandle, 16);
5355
        else if (strcmp (p, "unsigned char") == 0)
5356
          ret = debug_make_int_type (dhandle, 1, TRUE);
5357
        else if (strcmp (p, "int") == 0)
5358
          ret = debug_make_int_type (dhandle, 4, FALSE);
5359
        else if (strcmp (p, "unsigned int") == 0)
5360
          ret = debug_make_int_type (dhandle, 4, TRUE);
5361
        else if (strcmp (p, "long") == 0)
5362
          ret = debug_make_int_type (dhandle, 4, FALSE);
5363
        else if (strcmp (p, "unsigned long") == 0)
5364
          ret = debug_make_int_type (dhandle, 4, TRUE);
5365
        else if (strcmp (p, "__int128") == 0)
5366
          ret = debug_make_int_type (dhandle, 16, FALSE);
5367
        else if (strcmp (p, "unsigned __int128") == 0)
5368
          ret = debug_make_int_type (dhandle, 16, TRUE);
5369
        else if (strcmp (p, "short") == 0)
5370
          ret = debug_make_int_type (dhandle, 2, FALSE);
5371
        else if (strcmp (p, "unsigned short") == 0)
5372
          ret = debug_make_int_type (dhandle, 2, TRUE);
5373
        else if (strcmp (p, "void") == 0)
5374
          ret = debug_make_void_type (dhandle);
5375
        else if (strcmp (p, "wchar_t") == 0)
5376
          ret = debug_make_int_type (dhandle, 4, TRUE);
5377
        else if (strcmp (p, "long long") == 0)
5378
          ret = debug_make_int_type (dhandle, 8, FALSE);
5379
        else if (strcmp (p, "unsigned long long") == 0)
5380
          ret = debug_make_int_type (dhandle, 8, TRUE);
5381
        else if (strcmp (p, "...") == 0)
5382
          {
5383
            if (pvarargs == NULL)
5384
              fprintf (stderr, _("Unexpected demangled varargs\n"));
5385
            else
5386
              *pvarargs = TRUE;
5387
            ret = NULL;
5388
          }
5389
        else
5390
          {
5391
            fprintf (stderr, _("Unrecognized demangled builtin type\n"));
5392
            ret = NULL;
5393
          }
5394
 
5395
        free (p);
5396
 
5397
        return ret;
5398
      }
5399
    }
5400
}

powered by: WebSVN 2.1.0

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