~ubuntu-branches/ubuntu/hoary/binutils/hoary

« back to all changes in this revision

Viewing changes to binutils/stabs.c

  • Committer: Bazaar Package Importer
  • Author(s): James Troup
  • Date: 2004-05-19 10:35:44 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20040519103544-17h3o6e8pwndydrg
Tags: 2.14.90.0.7-8
debian/rules: don't use gcc-2.95 on m68k.  Thanks to Adam Conrad for
pointing this out.

Show diffs side-by-side

added added

removed removed

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