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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gdb/] [gdb-6.8/] [gdb/] [mdebugread.c] - Blame information for rev 25

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 25 jlechner
/* Read a symbol table in ECOFF format (Third-Eye).
2
 
3
   Copyright (C) 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
4
   1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007, 2008
5
   Free Software Foundation, Inc.
6
 
7
   Original version contributed by Alessandro Forin (af@cs.cmu.edu) at
8
   CMU.  Major work by Per Bothner, John Gilmore and Ian Lance Taylor
9
   at Cygnus Support.
10
 
11
   This file is part of GDB.
12
 
13
   This program is free software; you can redistribute it and/or modify
14
   it under the terms of the GNU General Public License as published by
15
   the Free Software Foundation; either version 3 of the License, or
16
   (at your option) any later version.
17
 
18
   This program is distributed in the hope that it will be useful,
19
   but WITHOUT ANY WARRANTY; without even the implied warranty of
20
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21
   GNU General Public License for more details.
22
 
23
   You should have received a copy of the GNU General Public License
24
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
25
 
26
/* This module provides the function mdebug_build_psymtabs.  It reads
27
   ECOFF debugging information into partial symbol tables.  The
28
   debugging information is read from two structures.  A struct
29
   ecoff_debug_swap includes the sizes of each ECOFF structure and
30
   swapping routines; these are fixed for a particular target.  A
31
   struct ecoff_debug_info points to the debugging information for a
32
   particular object file.
33
 
34
   ECOFF symbol tables are mostly written in the byte order of the
35
   target machine.  However, one section of the table (the auxiliary
36
   symbol information) is written in the host byte order.  There is a
37
   bit in the other symbol info which describes which host byte order
38
   was used.  ECOFF thereby takes the trophy from Intel `b.out' for
39
   the most brain-dead adaptation of a file format to byte order.
40
 
41
   This module can read all four of the known byte-order combinations,
42
   on any type of host.  */
43
 
44
#include "defs.h"
45
#include "symtab.h"
46
#include "gdbtypes.h"
47
#include "gdbcore.h"
48
#include "objfiles.h"
49
#include "gdb_obstack.h"
50
#include "buildsym.h"
51
#include "stabsread.h"
52
#include "complaints.h"
53
#include "demangle.h"
54
#include "gdb_assert.h"
55
#include "block.h"
56
#include "dictionary.h"
57
#include "mdebugread.h"
58
#include "gdb_stat.h"
59
#include "gdb_string.h"
60
 
61
#include "bfd.h"
62
 
63
#include "coff/ecoff.h"         /* COFF-like aspects of ecoff files */
64
 
65
#include "libaout.h"            /* Private BFD a.out information.  */
66
#include "aout/aout64.h"
67
#include "aout/stab_gnu.h"      /* STABS information */
68
 
69
#include "expression.h"
70
 
71
extern void _initialize_mdebugread (void);
72
 
73
/* Provide a way to test if we have both ECOFF and ELF symbol tables.
74
   We use this define in order to know whether we should override a
75
   symbol's ECOFF section with its ELF section.  This is necessary in
76
   case the symbol's ELF section could not be represented in ECOFF.  */
77
#define ECOFF_IN_ELF(bfd) (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
78
                           && bfd_get_section_by_name (bfd, ".mdebug") != NULL)
79
 
80
 
81
/* We put a pointer to this structure in the read_symtab_private field
82
   of the psymtab.  */
83
 
84
struct symloc
85
  {
86
    /* Index of the FDR that this psymtab represents.  */
87
    int fdr_idx;
88
    /* The BFD that the psymtab was created from.  */
89
    bfd *cur_bfd;
90
    const struct ecoff_debug_swap *debug_swap;
91
    struct ecoff_debug_info *debug_info;
92
    struct mdebug_pending **pending_list;
93
    /* Pointer to external symbols for this file.  */
94
    EXTR *extern_tab;
95
    /* Size of extern_tab.  */
96
    int extern_count;
97
    enum language pst_language;
98
  };
99
 
100
#define PST_PRIVATE(p) ((struct symloc *)(p)->read_symtab_private)
101
#define FDR_IDX(p) (PST_PRIVATE(p)->fdr_idx)
102
#define CUR_BFD(p) (PST_PRIVATE(p)->cur_bfd)
103
#define DEBUG_SWAP(p) (PST_PRIVATE(p)->debug_swap)
104
#define DEBUG_INFO(p) (PST_PRIVATE(p)->debug_info)
105
#define PENDING_LIST(p) (PST_PRIVATE(p)->pending_list)
106
 
107
#define SC_IS_TEXT(sc) ((sc) == scText \
108
                   || (sc) == scRConst \
109
                   || (sc) == scInit \
110
                   || (sc) == scFini)
111
#define SC_IS_DATA(sc) ((sc) == scData \
112
                   || (sc) == scSData \
113
                   || (sc) == scRData \
114
                   || (sc) == scPData \
115
                   || (sc) == scXData)
116
#define SC_IS_COMMON(sc) ((sc) == scCommon || (sc) == scSCommon)
117
#define SC_IS_BSS(sc) ((sc) == scBss)
118
#define SC_IS_SBSS(sc) ((sc) == scSBss)
119
#define SC_IS_UNDEF(sc) ((sc) == scUndefined || (sc) == scSUndefined)
120
 
121
/* Various complaints about symbol reading that don't abort the process */
122
static void
123
index_complaint (const char *arg1)
124
{
125
  complaint (&symfile_complaints, _("bad aux index at symbol %s"), arg1);
126
}
127
 
128
static void
129
unknown_ext_complaint (const char *arg1)
130
{
131
  complaint (&symfile_complaints, _("unknown external symbol %s"), arg1);
132
}
133
 
134
static void
135
basic_type_complaint (int arg1, const char *arg2)
136
{
137
  complaint (&symfile_complaints, _("cannot map ECOFF basic type 0x%x for %s"),
138
             arg1, arg2);
139
}
140
 
141
static void
142
bad_tag_guess_complaint (const char *arg1)
143
{
144
  complaint (&symfile_complaints, _("guessed tag type of %s incorrectly"), arg1);
145
}
146
 
147
static void
148
bad_rfd_entry_complaint (const char *arg1, int arg2, int arg3)
149
{
150
  complaint (&symfile_complaints, _("bad rfd entry for %s: file %d, index %d"),
151
             arg1, arg2, arg3);
152
}
153
 
154
static void
155
unexpected_type_code_complaint (const char *arg1)
156
{
157
  complaint (&symfile_complaints, _("unexpected type code for %s"), arg1);
158
}
159
 
160
/* Macros and extra defs */
161
 
162
/* Puns: hard to find whether -g was used and how */
163
 
164
#define MIN_GLEVEL GLEVEL_0
165
#define compare_glevel(a,b)                                     \
166
        (((a) == GLEVEL_3) ? ((b) < GLEVEL_3) :                 \
167
         ((b) == GLEVEL_3) ? -1 : (int)((b) - (a)))
168
 
169
/* Things that really are local to this module */
170
 
171
/* Remember what we deduced to be the source language of this psymtab. */
172
 
173
static enum language psymtab_language = language_unknown;
174
 
175
/* Current BFD.  */
176
 
177
static bfd *cur_bfd;
178
 
179
/* How to parse debugging information for CUR_BFD.  */
180
 
181
static const struct ecoff_debug_swap *debug_swap;
182
 
183
/* Pointers to debugging information for CUR_BFD.  */
184
 
185
static struct ecoff_debug_info *debug_info;
186
 
187
/* Pointer to current file decriptor record, and its index */
188
 
189
static FDR *cur_fdr;
190
static int cur_fd;
191
 
192
/* Index of current symbol */
193
 
194
static int cur_sdx;
195
 
196
/* Note how much "debuggable" this image is.  We would like
197
   to see at least one FDR with full symbols */
198
 
199
static int max_gdbinfo;
200
static int max_glevel;
201
 
202
/* When examining .o files, report on undefined symbols */
203
 
204
static int n_undef_symbols, n_undef_labels, n_undef_vars, n_undef_procs;
205
 
206
/* Pseudo symbol to use when putting stabs into the symbol table.  */
207
 
208
static char stabs_symbol[] = STABS_SYMBOL;
209
 
210
/* Types corresponding to mdebug format bt* basic types.  */
211
 
212
static struct type *mdebug_type_void;
213
static struct type *mdebug_type_char;
214
static struct type *mdebug_type_short;
215
static struct type *mdebug_type_int_32;
216
#define mdebug_type_int mdebug_type_int_32
217
static struct type *mdebug_type_int_64;
218
static struct type *mdebug_type_long_32;
219
static struct type *mdebug_type_long_64;
220
static struct type *mdebug_type_long_long_64;
221
static struct type *mdebug_type_unsigned_char;
222
static struct type *mdebug_type_unsigned_short;
223
static struct type *mdebug_type_unsigned_int_32;
224
static struct type *mdebug_type_unsigned_int_64;
225
static struct type *mdebug_type_unsigned_long_32;
226
static struct type *mdebug_type_unsigned_long_64;
227
static struct type *mdebug_type_unsigned_long_long_64;
228
static struct type *mdebug_type_adr_32;
229
static struct type *mdebug_type_adr_64;
230
static struct type *mdebug_type_float;
231
static struct type *mdebug_type_double;
232
static struct type *mdebug_type_complex;
233
static struct type *mdebug_type_double_complex;
234
static struct type *mdebug_type_fixed_dec;
235
static struct type *mdebug_type_float_dec;
236
static struct type *mdebug_type_string;
237
 
238
/* Nonzero if we have seen ecoff debugging info for a file.  */
239
 
240
static int found_ecoff_debugging_info;
241
 
242
/* Forward declarations */
243
 
244
static int upgrade_type (int, struct type **, int, union aux_ext *,
245
                         int, char *);
246
 
247
static void parse_partial_symbols (struct objfile *);
248
 
249
static int has_opaque_xref (FDR *, SYMR *);
250
 
251
static int cross_ref (int, union aux_ext *, struct type **, enum type_code,
252
                      char **, int, char *);
253
 
254
static struct symbol *new_symbol (char *);
255
 
256
static struct type *new_type (char *);
257
 
258
enum block_type { FUNCTION_BLOCK, NON_FUNCTION_BLOCK };
259
 
260
static struct block *new_block (enum block_type);
261
 
262
static struct symtab *new_symtab (char *, int, struct objfile *);
263
 
264
static struct linetable *new_linetable (int);
265
 
266
static struct blockvector *new_bvect (int);
267
 
268
static struct type *parse_type (int, union aux_ext *, unsigned int, int *,
269
                                int, char *);
270
 
271
static struct symbol *mylookup_symbol (char *, struct block *, domain_enum,
272
                                       enum address_class);
273
 
274
static void sort_blocks (struct symtab *);
275
 
276
static struct partial_symtab *new_psymtab (char *, struct objfile *);
277
 
278
static void psymtab_to_symtab_1 (struct partial_symtab *, char *);
279
 
280
static void add_block (struct block *, struct symtab *);
281
 
282
static void add_symbol (struct symbol *, struct block *);
283
 
284
static int add_line (struct linetable *, int, CORE_ADDR, int);
285
 
286
static struct linetable *shrink_linetable (struct linetable *);
287
 
288
static void handle_psymbol_enumerators (struct objfile *, FDR *, int,
289
                                        CORE_ADDR);
290
 
291
static char *mdebug_next_symbol_text (struct objfile *);
292
 
293
/* Exported procedure: Builds a symtab from the PST partial one.
294
   Restores the environment in effect when PST was created, delegates
295
   most of the work to an ancillary procedure, and sorts
296
   and reorders the symtab list at the end */
297
 
298
static void
299
mdebug_psymtab_to_symtab (struct partial_symtab *pst)
300
{
301
 
302
  if (!pst)
303
    return;
304
 
305
  if (info_verbose)
306
    {
307
      printf_filtered (_("Reading in symbols for %s..."), pst->filename);
308
      gdb_flush (gdb_stdout);
309
    }
310
 
311
  next_symbol_text_func = mdebug_next_symbol_text;
312
 
313
  psymtab_to_symtab_1 (pst, pst->filename);
314
 
315
  /* Match with global symbols.  This only needs to be done once,
316
     after all of the symtabs and dependencies have been read in.   */
317
  scan_file_globals (pst->objfile);
318
 
319
  if (info_verbose)
320
    printf_filtered (_("done.\n"));
321
}
322
 
323
/* File-level interface functions */
324
 
325
/* Find a file descriptor given its index RF relative to a file CF */
326
 
327
static FDR *
328
get_rfd (int cf, int rf)
329
{
330
  FDR *fdrs;
331
  FDR *f;
332
  RFDT rfd;
333
 
334
  fdrs = debug_info->fdr;
335
  f = fdrs + cf;
336
  /* Object files do not have the RFD table, all refs are absolute */
337
  if (f->rfdBase == 0)
338
    return fdrs + rf;
339
  (*debug_swap->swap_rfd_in) (cur_bfd,
340
                              ((char *) debug_info->external_rfd
341
                               + ((f->rfdBase + rf)
342
                                  * debug_swap->external_rfd_size)),
343
                              &rfd);
344
  return fdrs + rfd;
345
}
346
 
347
/* Return a safer print NAME for a file descriptor */
348
 
349
static char *
350
fdr_name (FDR *f)
351
{
352
  if (f->rss == -1)
353
    return "<stripped file>";
354
  if (f->rss == 0)
355
    return "<NFY>";
356
  return debug_info->ss + f->issBase + f->rss;
357
}
358
 
359
 
360
/* Read in and parse the symtab of the file OBJFILE.  Symbols from
361
   different sections are relocated via the SECTION_OFFSETS.  */
362
 
363
void
364
mdebug_build_psymtabs (struct objfile *objfile,
365
                       const struct ecoff_debug_swap *swap,
366
                       struct ecoff_debug_info *info)
367
{
368
  cur_bfd = objfile->obfd;
369
  debug_swap = swap;
370
  debug_info = info;
371
 
372
  stabsread_new_init ();
373
  buildsym_new_init ();
374
  free_header_files ();
375
  init_header_files ();
376
 
377
  /* Make sure all the FDR information is swapped in.  */
378
  if (info->fdr == (FDR *) NULL)
379
    {
380
      char *fdr_src;
381
      char *fdr_end;
382
      FDR *fdr_ptr;
383
 
384
      info->fdr = (FDR *) obstack_alloc (&objfile->objfile_obstack,
385
                                         (info->symbolic_header.ifdMax
386
                                          * sizeof (FDR)));
387
      fdr_src = info->external_fdr;
388
      fdr_end = (fdr_src
389
                 + info->symbolic_header.ifdMax * swap->external_fdr_size);
390
      fdr_ptr = info->fdr;
391
      for (; fdr_src < fdr_end; fdr_src += swap->external_fdr_size, fdr_ptr++)
392
        (*swap->swap_fdr_in) (objfile->obfd, fdr_src, fdr_ptr);
393
    }
394
 
395
  parse_partial_symbols (objfile);
396
 
397
#if 0
398
  /* Check to make sure file was compiled with -g.  If not, warn the
399
     user of this limitation.  */
400
  if (compare_glevel (max_glevel, GLEVEL_2) < 0)
401
    {
402
      if (max_gdbinfo == 0)
403
        printf_unfiltered (_("\n%s not compiled with -g, debugging support is limited.\n"),
404
                           objfile->name);
405
      printf_unfiltered (_("You should compile with -g2 or -g3 for best debugging support.\n"));
406
      gdb_flush (gdb_stdout);
407
    }
408
#endif
409
}
410
 
411
/* Local utilities */
412
 
413
/* Map of FDR indexes to partial symtabs */
414
 
415
struct pst_map
416
{
417
  struct partial_symtab *pst;   /* the psymtab proper */
418
  long n_globals;               /* exported globals (external symbols) */
419
  long globals_offset;          /* cumulative */
420
};
421
 
422
 
423
/* Utility stack, used to nest procedures and blocks properly.
424
   It is a doubly linked list, to avoid too many alloc/free.
425
   Since we might need it quite a few times it is NOT deallocated
426
   after use. */
427
 
428
static struct parse_stack
429
  {
430
    struct parse_stack *next, *prev;
431
    struct symtab *cur_st;      /* Current symtab. */
432
    struct block *cur_block;    /* Block in it. */
433
 
434
    /* What are we parsing.  stFile, or stBlock are for files and
435
       blocks.  stProc or stStaticProc means we have seen the start of a
436
       procedure, but not the start of the block within in.  When we see
437
       the start of that block, we change it to stNil, without pushing a
438
       new block, i.e. stNil means both a procedure and a block.  */
439
 
440
    int blocktype;
441
 
442
    struct type *cur_type;      /* Type we parse fields for. */
443
    int cur_field;              /* Field number in cur_type. */
444
    CORE_ADDR procadr;          /* Start addres of this procedure */
445
    int numargs;                /* Its argument count */
446
  }
447
 
448
 *top_stack;                    /* Top stack ptr */
449
 
450
 
451
/* Enter a new lexical context */
452
 
453
static void
454
push_parse_stack (void)
455
{
456
  struct parse_stack *new;
457
 
458
  /* Reuse frames if possible */
459
  if (top_stack && top_stack->prev)
460
    new = top_stack->prev;
461
  else
462
    new = (struct parse_stack *) xzalloc (sizeof (struct parse_stack));
463
  /* Initialize new frame with previous content */
464
  if (top_stack)
465
    {
466
      struct parse_stack *prev = new->prev;
467
 
468
      *new = *top_stack;
469
      top_stack->prev = new;
470
      new->prev = prev;
471
      new->next = top_stack;
472
    }
473
  top_stack = new;
474
}
475
 
476
/* Exit a lexical context */
477
 
478
static void
479
pop_parse_stack (void)
480
{
481
  if (!top_stack)
482
    return;
483
  if (top_stack->next)
484
    top_stack = top_stack->next;
485
}
486
 
487
 
488
/* Cross-references might be to things we haven't looked at
489
   yet, e.g. type references.  To avoid too many type
490
   duplications we keep a quick fixup table, an array
491
   of lists of references indexed by file descriptor */
492
 
493
struct mdebug_pending
494
{
495
  struct mdebug_pending *next;  /* link */
496
  char *s;                      /* the unswapped symbol */
497
  struct type *t;               /* its partial type descriptor */
498
};
499
 
500
 
501
/* The pending information is kept for an entire object file, and used
502
   to be in the deprecated_sym_private field.  I took it out when I
503
   split mdebugread from mipsread, because this might not be the only
504
   type of symbols read from an object file.  Instead, we allocate the
505
   pending information table when we create the partial symbols, and
506
   we store a pointer to the single table in each psymtab.  */
507
 
508
static struct mdebug_pending **pending_list;
509
 
510
/* Check whether we already saw symbol SH in file FH */
511
 
512
static struct mdebug_pending *
513
is_pending_symbol (FDR *fh, char *sh)
514
{
515
  int f_idx = fh - debug_info->fdr;
516
  struct mdebug_pending *p;
517
 
518
  /* Linear search is ok, list is typically no more than 10 deep */
519
  for (p = pending_list[f_idx]; p; p = p->next)
520
    if (p->s == sh)
521
      break;
522
  return p;
523
}
524
 
525
/* Add a new symbol SH of type T */
526
 
527
static void
528
add_pending (FDR *fh, char *sh, struct type *t)
529
{
530
  int f_idx = fh - debug_info->fdr;
531
  struct mdebug_pending *p = is_pending_symbol (fh, sh);
532
 
533
  /* Make sure we do not make duplicates */
534
  if (!p)
535
    {
536
      p = ((struct mdebug_pending *)
537
           obstack_alloc (&current_objfile->objfile_obstack,
538
                          sizeof (struct mdebug_pending)));
539
      p->s = sh;
540
      p->t = t;
541
      p->next = pending_list[f_idx];
542
      pending_list[f_idx] = p;
543
    }
544
}
545
 
546
 
547
/* Parsing Routines proper. */
548
 
549
/* Parse a single symbol. Mostly just make up a GDB symbol for it.
550
   For blocks, procedures and types we open a new lexical context.
551
   This is basically just a big switch on the symbol's type.  Argument
552
   AX is the base pointer of aux symbols for this file (fh->iauxBase).
553
   EXT_SH points to the unswapped symbol, which is needed for struct,
554
   union, etc., types; it is NULL for an EXTR.  BIGEND says whether
555
   aux symbols are big-endian or little-endian.  Return count of
556
   SYMR's handled (normally one).  */
557
 
558
static int
559
parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
560
              struct section_offsets *section_offsets, struct objfile *objfile)
561
{
562
  const bfd_size_type external_sym_size = debug_swap->external_sym_size;
563
  void (*const swap_sym_in) (bfd *, void *, SYMR *) = debug_swap->swap_sym_in;
564
  char *name;
565
  struct symbol *s;
566
  struct block *b;
567
  struct mdebug_pending *pend;
568
  struct type *t;
569
  struct field *f;
570
  int count = 1;
571
  enum address_class class;
572
  TIR tir;
573
  long svalue = sh->value;
574
  int bitsize;
575
 
576
  if (ext_sh == (char *) NULL)
577
    name = debug_info->ssext + sh->iss;
578
  else
579
    name = debug_info->ss + cur_fdr->issBase + sh->iss;
580
 
581
  switch (sh->sc)
582
    {
583
    case scText:
584
    case scRConst:
585
      /* Do not relocate relative values.
586
         The value of a stEnd symbol is the displacement from the
587
         corresponding start symbol value.
588
         The value of a stBlock symbol is the displacement from the
589
         procedure address.  */
590
      if (sh->st != stEnd && sh->st != stBlock)
591
        sh->value += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
592
      break;
593
    case scData:
594
    case scSData:
595
    case scRData:
596
    case scPData:
597
    case scXData:
598
      sh->value += ANOFFSET (section_offsets, SECT_OFF_DATA (objfile));
599
      break;
600
    case scBss:
601
    case scSBss:
602
      sh->value += ANOFFSET (section_offsets, SECT_OFF_BSS (objfile));
603
      break;
604
    }
605
 
606
  switch (sh->st)
607
    {
608
    case stNil:
609
      break;
610
 
611
    case stGlobal:              /* external symbol, goes into global block */
612
      class = LOC_STATIC;
613
      b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (top_stack->cur_st),
614
                             GLOBAL_BLOCK);
615
      s = new_symbol (name);
616
      SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
617
      goto data;
618
 
619
    case stStatic:              /* static data, goes into current block. */
620
      class = LOC_STATIC;
621
      b = top_stack->cur_block;
622
      s = new_symbol (name);
623
      if (SC_IS_COMMON (sh->sc))
624
        {
625
          /* It is a FORTRAN common block.  At least for SGI Fortran the
626
             address is not in the symbol; we need to fix it later in
627
             scan_file_globals.  */
628
          int bucket = hashname (DEPRECATED_SYMBOL_NAME (s));
629
          SYMBOL_VALUE_CHAIN (s) = global_sym_chain[bucket];
630
          global_sym_chain[bucket] = s;
631
        }
632
      else
633
        SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
634
      goto data;
635
 
636
    case stLocal:               /* local variable, goes into current block */
637
      if (sh->sc == scRegister)
638
        {
639
          class = LOC_REGISTER;
640
          svalue = gdbarch_ecoff_reg_to_regnum (current_gdbarch, svalue);
641
        }
642
      else
643
        class = LOC_LOCAL;
644
      b = top_stack->cur_block;
645
      s = new_symbol (name);
646
      SYMBOL_VALUE (s) = svalue;
647
 
648
    data:                       /* Common code for symbols describing data */
649
      SYMBOL_DOMAIN (s) = VAR_DOMAIN;
650
      SYMBOL_CLASS (s) = class;
651
      add_symbol (s, b);
652
 
653
      /* Type could be missing if file is compiled without debugging info.  */
654
      if (SC_IS_UNDEF (sh->sc)
655
          || sh->sc == scNil || sh->index == indexNil)
656
        SYMBOL_TYPE (s) = builtin_type (current_gdbarch)->nodebug_data_symbol;
657
      else
658
        SYMBOL_TYPE (s) = parse_type (cur_fd, ax, sh->index, 0, bigend, name);
659
      /* Value of a data symbol is its memory address */
660
      break;
661
 
662
    case stParam:               /* arg to procedure, goes into current block */
663
      max_gdbinfo++;
664
      found_ecoff_debugging_info = 1;
665
      top_stack->numargs++;
666
 
667
      /* Special GNU C++ name.  */
668
      if (is_cplus_marker (name[0]) && name[1] == 't' && name[2] == 0)
669
        name = "this";          /* FIXME, not alloc'd in obstack */
670
      s = new_symbol (name);
671
 
672
      SYMBOL_DOMAIN (s) = VAR_DOMAIN;
673
      switch (sh->sc)
674
        {
675
        case scRegister:
676
          /* Pass by value in register.  */
677
          SYMBOL_CLASS (s) = LOC_REGPARM;
678
          svalue = gdbarch_ecoff_reg_to_regnum (current_gdbarch, svalue);
679
          break;
680
        case scVar:
681
          /* Pass by reference on stack.  */
682
          SYMBOL_CLASS (s) = LOC_REF_ARG;
683
          break;
684
        case scVarRegister:
685
          /* Pass by reference in register.  */
686
          SYMBOL_CLASS (s) = LOC_REGPARM_ADDR;
687
          svalue = gdbarch_ecoff_reg_to_regnum (current_gdbarch, svalue);
688
          break;
689
        default:
690
          /* Pass by value on stack.  */
691
          SYMBOL_CLASS (s) = LOC_ARG;
692
          break;
693
        }
694
      SYMBOL_VALUE (s) = svalue;
695
      SYMBOL_TYPE (s) = parse_type (cur_fd, ax, sh->index, 0, bigend, name);
696
      add_symbol (s, top_stack->cur_block);
697
      break;
698
 
699
    case stLabel:               /* label, goes into current block */
700
      s = new_symbol (name);
701
      SYMBOL_DOMAIN (s) = VAR_DOMAIN;   /* so that it can be used */
702
      SYMBOL_CLASS (s) = LOC_LABEL;     /* but not misused */
703
      SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
704
      SYMBOL_TYPE (s) = mdebug_type_int;
705
      add_symbol (s, top_stack->cur_block);
706
      break;
707
 
708
    case stProc:                /* Procedure, usually goes into global block */
709
    case stStaticProc:          /* Static procedure, goes into current block */
710
      /* For stProc symbol records, we need to check the storage class
711
         as well, as only (stProc, scText) entries represent "real"
712
         procedures - See the Compaq document titled "Object File /
713
         Symbol Table Format Specification" for more information.
714
         If the storage class is not scText, we discard the whole block
715
         of symbol records for this stProc.  */
716
      if (sh->st == stProc && sh->sc != scText)
717
        {
718
          char *ext_tsym = ext_sh;
719
          int keep_counting = 1;
720
          SYMR tsym;
721
 
722
          while (keep_counting)
723
            {
724
              ext_tsym += external_sym_size;
725
              (*swap_sym_in) (cur_bfd, ext_tsym, &tsym);
726
              count++;
727
              switch (tsym.st)
728
                {
729
                  case stParam:
730
                    break;
731
                  case stEnd:
732
                    keep_counting = 0;
733
                    break;
734
                  default:
735
                    complaint (&symfile_complaints,
736
                               _("unknown symbol type 0x%x"), sh->st);
737
                    break;
738
                }
739
            }
740
          break;
741
        }
742
      s = new_symbol (name);
743
      SYMBOL_DOMAIN (s) = VAR_DOMAIN;
744
      SYMBOL_CLASS (s) = LOC_BLOCK;
745
      /* Type of the return value */
746
      if (SC_IS_UNDEF (sh->sc) || sh->sc == scNil)
747
        t = mdebug_type_int;
748
      else
749
        {
750
          t = parse_type (cur_fd, ax, sh->index + 1, 0, bigend, name);
751
          if (strcmp (name, "malloc") == 0
752
              && TYPE_CODE (t) == TYPE_CODE_VOID)
753
            {
754
              /* I don't know why, but, at least under Alpha GNU/Linux,
755
                 when linking against a malloc without debugging
756
                 symbols, its read as a function returning void---this
757
                 is bad because it means we cannot call functions with
758
                 string arguments interactively; i.e., "call
759
                 printf("howdy\n")" would fail with the error message
760
                 "program has no memory available".  To avoid this, we
761
                 patch up the type and make it void*
762
                 instead. (davidm@azstarnet.com)
763
               */
764
              t = make_pointer_type (t, NULL);
765
            }
766
        }
767
      b = top_stack->cur_block;
768
      if (sh->st == stProc)
769
        {
770
          struct blockvector *bv = BLOCKVECTOR (top_stack->cur_st);
771
          /* The next test should normally be true, but provides a
772
             hook for nested functions (which we don't want to make
773
             global).  */
774
          if (b == BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK))
775
            b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
776
          /* Irix 5 sometimes has duplicate names for the same
777
             function.  We want to add such names up at the global
778
             level, not as a nested function.  */
779
          else if (sh->value == top_stack->procadr)
780
            b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
781
        }
782
      add_symbol (s, b);
783
 
784
      /* Make a type for the procedure itself */
785
      SYMBOL_TYPE (s) = lookup_function_type (t);
786
 
787
      /* All functions in C++ have prototypes.  For C we don't have enough
788
         information in the debug info.  */
789
      if (SYMBOL_LANGUAGE (s) == language_cplus)
790
        TYPE_FLAGS (SYMBOL_TYPE (s)) |= TYPE_FLAG_PROTOTYPED;
791
 
792
      /* Create and enter a new lexical context */
793
      b = new_block (FUNCTION_BLOCK);
794
      SYMBOL_BLOCK_VALUE (s) = b;
795
      BLOCK_FUNCTION (b) = s;
796
      BLOCK_START (b) = BLOCK_END (b) = sh->value;
797
      BLOCK_SUPERBLOCK (b) = top_stack->cur_block;
798
      add_block (b, top_stack->cur_st);
799
 
800
      /* Not if we only have partial info */
801
      if (SC_IS_UNDEF (sh->sc) || sh->sc == scNil)
802
        break;
803
 
804
      push_parse_stack ();
805
      top_stack->cur_block = b;
806
      top_stack->blocktype = sh->st;
807
      top_stack->cur_type = SYMBOL_TYPE (s);
808
      top_stack->cur_field = -1;
809
      top_stack->procadr = sh->value;
810
      top_stack->numargs = 0;
811
      break;
812
 
813
      /* Beginning of code for structure, union, and enum definitions.
814
         They all share a common set of local variables, defined here.  */
815
      {
816
        enum type_code type_code;
817
        char *ext_tsym;
818
        int nfields;
819
        long max_value;
820
        struct field *f;
821
 
822
    case stStruct:              /* Start a block defining a struct type */
823
        type_code = TYPE_CODE_STRUCT;
824
        goto structured_common;
825
 
826
    case stUnion:               /* Start a block defining a union type */
827
        type_code = TYPE_CODE_UNION;
828
        goto structured_common;
829
 
830
    case stEnum:                /* Start a block defining an enum type */
831
        type_code = TYPE_CODE_ENUM;
832
        goto structured_common;
833
 
834
    case stBlock:               /* Either a lexical block, or some type */
835
        if (sh->sc != scInfo && !SC_IS_COMMON (sh->sc))
836
          goto case_stBlock_code;       /* Lexical block */
837
 
838
        type_code = TYPE_CODE_UNDEF;    /* We have a type.  */
839
 
840
        /* Common code for handling struct, union, enum, and/or as-yet-
841
           unknown-type blocks of info about structured data.  `type_code'
842
           has been set to the proper TYPE_CODE, if we know it.  */
843
      structured_common:
844
        found_ecoff_debugging_info = 1;
845
        push_parse_stack ();
846
        top_stack->blocktype = stBlock;
847
 
848
        /* First count the number of fields and the highest value. */
849
        nfields = 0;
850
        max_value = 0;
851
        for (ext_tsym = ext_sh + external_sym_size;
852
             ;
853
             ext_tsym += external_sym_size)
854
          {
855
            SYMR tsym;
856
 
857
            (*swap_sym_in) (cur_bfd, ext_tsym, &tsym);
858
 
859
            switch (tsym.st)
860
              {
861
              case stEnd:
862
                /* C++ encodes class types as structures where there the
863
                   methods are encoded as stProc. The scope of stProc
864
                   symbols also ends with stEnd, thus creating a risk of
865
                   taking the wrong stEnd symbol record as the end of
866
                   the current struct, which would cause GDB to undercount
867
                   the real number of fields in this struct.  To make sure
868
                   we really reached the right stEnd symbol record, we
869
                   check the associated name, and match it against the
870
                   struct name.  Since method names are mangled while
871
                   the class name is not, there is no risk of having a
872
                   method whose name is identical to the class name
873
                   (in particular constructor method names are different
874
                   from the class name).  There is therefore no risk that
875
                   this check stops the count on the StEnd of a method.
876
 
877
                   Also, assume that we're really at the end when tsym.iss
878
                   is 0 (issNull).  */
879
                if (tsym.iss == issNull
880
                    || strcmp (debug_info->ss + cur_fdr->issBase + tsym.iss,
881
                               name) == 0)
882
                  goto end_of_fields;
883
                break;
884
 
885
              case stMember:
886
                if (nfields == 0 && type_code == TYPE_CODE_UNDEF)
887
                  {
888
                    /* If the type of the member is Nil (or Void),
889
                       without qualifiers, assume the tag is an
890
                       enumeration.
891
                       Alpha cc -migrate enums are recognized by a zero
892
                       index and a zero symbol value.
893
                       DU 4.0 cc enums are recognized by a member type of
894
                       btEnum without qualifiers and a zero symbol value.  */
895
                    if (tsym.index == indexNil
896
                        || (tsym.index == 0 && sh->value == 0))
897
                      type_code = TYPE_CODE_ENUM;
898
                    else
899
                      {
900
                        (*debug_swap->swap_tir_in) (bigend,
901
                                                    &ax[tsym.index].a_ti,
902
                                                    &tir);
903
                        if ((tir.bt == btNil || tir.bt == btVoid
904
                             || (tir.bt == btEnum && sh->value == 0))
905
                            && tir.tq0 == tqNil)
906
                          type_code = TYPE_CODE_ENUM;
907
                      }
908
                  }
909
                nfields++;
910
                if (tsym.value > max_value)
911
                  max_value = tsym.value;
912
                break;
913
 
914
              case stBlock:
915
              case stUnion:
916
              case stEnum:
917
              case stStruct:
918
                {
919
#if 0
920
                  /* This is a no-op; is it trying to tell us something
921
                     we should be checking?  */
922
                  if (tsym.sc == scVariant);    /*UNIMPLEMENTED */
923
#endif
924
                  if (tsym.index != 0)
925
                    {
926
                      /* This is something like a struct within a
927
                         struct.  Skip over the fields of the inner
928
                         struct.  The -1 is because the for loop will
929
                         increment ext_tsym.  */
930
                      ext_tsym = ((char *) debug_info->external_sym
931
                                  + ((cur_fdr->isymBase + tsym.index - 1)
932
                                     * external_sym_size));
933
                    }
934
                }
935
                break;
936
 
937
              case stTypedef:
938
                /* mips cc puts out a typedef for struct x if it is not yet
939
                   defined when it encounters
940
                   struct y { struct x *xp; };
941
                   Just ignore it. */
942
                break;
943
 
944
              case stIndirect:
945
                /* Irix5 cc puts out a stIndirect for struct x if it is not
946
                   yet defined when it encounters
947
                   struct y { struct x *xp; };
948
                   Just ignore it. */
949
                break;
950
 
951
              default:
952
                complaint (&symfile_complaints,
953
                           _("declaration block contains unhandled symbol type %d"),
954
                           tsym.st);
955
              }
956
          }
957
      end_of_fields:;
958
 
959
        /* In an stBlock, there is no way to distinguish structs,
960
           unions, and enums at this point.  This is a bug in the
961
           original design (that has been fixed with the recent
962
           addition of the stStruct, stUnion, and stEnum symbol
963
           types.)  The way you can tell is if/when you see a variable
964
           or field of that type.  In that case the variable's type
965
           (in the AUX table) says if the type is struct, union, or
966
           enum, and points back to the stBlock here.  So you can
967
           patch the tag kind up later - but only if there actually is
968
           a variable or field of that type.
969
 
970
           So until we know for sure, we will guess at this point.
971
           The heuristic is:
972
           If the first member has index==indexNil or a void type,
973
           assume we have an enumeration.
974
           Otherwise, if there is more than one member, and all
975
           the members have offset 0, assume we have a union.
976
           Otherwise, assume we have a struct.
977
 
978
           The heuristic could guess wrong in the case of of an
979
           enumeration with no members or a union with one (or zero)
980
           members, or when all except the last field of a struct have
981
           width zero.  These are uncommon and/or illegal situations,
982
           and in any case guessing wrong probably doesn't matter
983
           much.
984
 
985
           But if we later do find out we were wrong, we fixup the tag
986
           kind.  Members of an enumeration must be handled
987
           differently from struct/union fields, and that is harder to
988
           patch up, but luckily we shouldn't need to.  (If there are
989
           any enumeration members, we can tell for sure it's an enum
990
           here.) */
991
 
992
        if (type_code == TYPE_CODE_UNDEF)
993
          {
994
            if (nfields > 1 && max_value == 0)
995
              type_code = TYPE_CODE_UNION;
996
            else
997
              type_code = TYPE_CODE_STRUCT;
998
          }
999
 
1000
        /* Create a new type or use the pending type.  */
1001
        pend = is_pending_symbol (cur_fdr, ext_sh);
1002
        if (pend == (struct mdebug_pending *) NULL)
1003
          {
1004
            t = new_type (NULL);
1005
            add_pending (cur_fdr, ext_sh, t);
1006
          }
1007
        else
1008
          t = pend->t;
1009
 
1010
        /* Do not set the tag name if it is a compiler generated tag name
1011
           (.Fxx or .xxfake or empty) for unnamed struct/union/enums.
1012
           Alpha cc puts out an sh->iss of zero for those.  */
1013
        if (sh->iss == 0 || name[0] == '.' || name[0] == '\0')
1014
          TYPE_TAG_NAME (t) = NULL;
1015
        else
1016
          TYPE_TAG_NAME (t) = obconcat (&current_objfile->objfile_obstack,
1017
                                        "", "", name);
1018
 
1019
        TYPE_CODE (t) = type_code;
1020
        TYPE_LENGTH (t) = sh->value;
1021
        TYPE_NFIELDS (t) = nfields;
1022
        TYPE_FIELDS (t) = f = ((struct field *)
1023
                               TYPE_ALLOC (t,
1024
                                           nfields * sizeof (struct field)));
1025
 
1026
        if (type_code == TYPE_CODE_ENUM)
1027
          {
1028
            int unsigned_enum = 1;
1029
 
1030
            /* This is a non-empty enum. */
1031
 
1032
            /* DEC c89 has the number of enumerators in the sh.value field,
1033
               not the type length, so we have to compensate for that
1034
               incompatibility quirk.
1035
               This might do the wrong thing for an enum with one or two
1036
               enumerators and gcc -gcoff -fshort-enums, but these cases
1037
               are hopefully rare enough.
1038
               Alpha cc -migrate has a sh.value field of zero, we adjust
1039
               that too.  */
1040
            if (TYPE_LENGTH (t) == TYPE_NFIELDS (t)
1041
                || TYPE_LENGTH (t) == 0)
1042
              TYPE_LENGTH (t) =
1043
                gdbarch_int_bit (current_gdbarch) / HOST_CHAR_BIT;
1044
            for (ext_tsym = ext_sh + external_sym_size;
1045
                 ;
1046
                 ext_tsym += external_sym_size)
1047
              {
1048
                SYMR tsym;
1049
                struct symbol *enum_sym;
1050
 
1051
                (*swap_sym_in) (cur_bfd, ext_tsym, &tsym);
1052
 
1053
                if (tsym.st != stMember)
1054
                  break;
1055
 
1056
                FIELD_BITPOS (*f) = tsym.value;
1057
                FIELD_TYPE (*f) = t;
1058
                FIELD_NAME (*f) = debug_info->ss + cur_fdr->issBase + tsym.iss;
1059
                FIELD_BITSIZE (*f) = 0;
1060
                FIELD_STATIC_KIND (*f) = 0;
1061
 
1062
                enum_sym = ((struct symbol *)
1063
                            obstack_alloc (&current_objfile->objfile_obstack,
1064
                                           sizeof (struct symbol)));
1065
                memset (enum_sym, 0, sizeof (struct symbol));
1066
                DEPRECATED_SYMBOL_NAME (enum_sym) =
1067
                  obsavestring (f->name, strlen (f->name),
1068
                                &current_objfile->objfile_obstack);
1069
                SYMBOL_CLASS (enum_sym) = LOC_CONST;
1070
                SYMBOL_TYPE (enum_sym) = t;
1071
                SYMBOL_DOMAIN (enum_sym) = VAR_DOMAIN;
1072
                SYMBOL_VALUE (enum_sym) = tsym.value;
1073
                if (SYMBOL_VALUE (enum_sym) < 0)
1074
                  unsigned_enum = 0;
1075
                add_symbol (enum_sym, top_stack->cur_block);
1076
 
1077
                /* Skip the stMembers that we've handled. */
1078
                count++;
1079
                f++;
1080
              }
1081
            if (unsigned_enum)
1082
              TYPE_FLAGS (t) |= TYPE_FLAG_UNSIGNED;
1083
          }
1084
        /* make this the current type */
1085
        top_stack->cur_type = t;
1086
        top_stack->cur_field = 0;
1087
 
1088
        /* Do not create a symbol for alpha cc unnamed structs.  */
1089
        if (sh->iss == 0)
1090
          break;
1091
 
1092
        /* gcc puts out an empty struct for an opaque struct definitions,
1093
           do not create a symbol for it either.  */
1094
        if (TYPE_NFIELDS (t) == 0)
1095
          {
1096
            TYPE_FLAGS (t) |= TYPE_FLAG_STUB;
1097
            break;
1098
          }
1099
 
1100
        s = new_symbol (name);
1101
        SYMBOL_DOMAIN (s) = STRUCT_DOMAIN;
1102
        SYMBOL_CLASS (s) = LOC_TYPEDEF;
1103
        SYMBOL_VALUE (s) = 0;
1104
        SYMBOL_TYPE (s) = t;
1105
        add_symbol (s, top_stack->cur_block);
1106
        break;
1107
 
1108
        /* End of local variables shared by struct, union, enum, and
1109
           block (as yet unknown struct/union/enum) processing.  */
1110
      }
1111
 
1112
    case_stBlock_code:
1113
      found_ecoff_debugging_info = 1;
1114
      /* beginnning of (code) block. Value of symbol
1115
         is the displacement from procedure start */
1116
      push_parse_stack ();
1117
 
1118
      /* Do not start a new block if this is the outermost block of a
1119
         procedure.  This allows the LOC_BLOCK symbol to point to the
1120
         block with the local variables, so funcname::var works.  */
1121
      if (top_stack->blocktype == stProc
1122
          || top_stack->blocktype == stStaticProc)
1123
        {
1124
          top_stack->blocktype = stNil;
1125
          break;
1126
        }
1127
 
1128
      top_stack->blocktype = stBlock;
1129
      b = new_block (NON_FUNCTION_BLOCK);
1130
      BLOCK_START (b) = sh->value + top_stack->procadr;
1131
      BLOCK_SUPERBLOCK (b) = top_stack->cur_block;
1132
      top_stack->cur_block = b;
1133
      add_block (b, top_stack->cur_st);
1134
      break;
1135
 
1136
    case stEnd:         /* end (of anything) */
1137
      if (sh->sc == scInfo || SC_IS_COMMON (sh->sc))
1138
        {
1139
          /* Finished with type */
1140
          top_stack->cur_type = 0;
1141
        }
1142
      else if (sh->sc == scText &&
1143
               (top_stack->blocktype == stProc ||
1144
                top_stack->blocktype == stStaticProc))
1145
        {
1146
          /* Finished with procedure */
1147
          struct blockvector *bv = BLOCKVECTOR (top_stack->cur_st);
1148
          struct mdebug_extra_func_info *e;
1149
          struct block *b = top_stack->cur_block;
1150
          struct type *ftype = top_stack->cur_type;
1151
          int i;
1152
 
1153
          BLOCK_END (top_stack->cur_block) += sh->value;        /* size */
1154
 
1155
          /* Make up special symbol to contain procedure specific info */
1156
          s = new_symbol (MDEBUG_EFI_SYMBOL_NAME);
1157
          SYMBOL_DOMAIN (s) = LABEL_DOMAIN;
1158
          SYMBOL_CLASS (s) = LOC_CONST;
1159
          SYMBOL_TYPE (s) = mdebug_type_void;
1160
          e = ((struct mdebug_extra_func_info *)
1161
               obstack_alloc (&current_objfile->objfile_obstack,
1162
                              sizeof (struct mdebug_extra_func_info)));
1163
          memset (e, 0, sizeof (struct mdebug_extra_func_info));
1164
          SYMBOL_VALUE (s) = (long) e;
1165
          e->numargs = top_stack->numargs;
1166
          e->pdr.framereg = -1;
1167
          add_symbol (s, top_stack->cur_block);
1168
 
1169
          /* f77 emits proc-level with address bounds==[0,0],
1170
             So look for such child blocks, and patch them.  */
1171
          for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); i++)
1172
            {
1173
              struct block *b_bad = BLOCKVECTOR_BLOCK (bv, i);
1174
              if (BLOCK_SUPERBLOCK (b_bad) == b
1175
                  && BLOCK_START (b_bad) == top_stack->procadr
1176
                  && BLOCK_END (b_bad) == top_stack->procadr)
1177
                {
1178
                  BLOCK_START (b_bad) = BLOCK_START (b);
1179
                  BLOCK_END (b_bad) = BLOCK_END (b);
1180
                }
1181
            }
1182
 
1183
          if (TYPE_NFIELDS (ftype) <= 0)
1184
            {
1185
              /* No parameter type information is recorded with the function's
1186
                 type.  Set that from the type of the parameter symbols. */
1187
              int nparams = top_stack->numargs;
1188
              int iparams;
1189
              struct symbol *sym;
1190
 
1191
              if (nparams > 0)
1192
                {
1193
                  struct dict_iterator iter;
1194
                  TYPE_NFIELDS (ftype) = nparams;
1195
                  TYPE_FIELDS (ftype) = (struct field *)
1196
                    TYPE_ALLOC (ftype, nparams * sizeof (struct field));
1197
 
1198
                  iparams = 0;
1199
                  ALL_BLOCK_SYMBOLS (b, iter, sym)
1200
                    {
1201
                      if (iparams == nparams)
1202
                        break;
1203
 
1204
                      switch (SYMBOL_CLASS (sym))
1205
                        {
1206
                        case LOC_ARG:
1207
                        case LOC_REF_ARG:
1208
                        case LOC_REGPARM:
1209
                        case LOC_REGPARM_ADDR:
1210
                          TYPE_FIELD_TYPE (ftype, iparams) = SYMBOL_TYPE (sym);
1211
                          TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
1212
                          iparams++;
1213
                          break;
1214
                        default:
1215
                          break;
1216
                        }
1217
                    }
1218
                }
1219
            }
1220
        }
1221
      else if (sh->sc == scText && top_stack->blocktype == stBlock)
1222
        {
1223
          /* End of (code) block. The value of the symbol is the
1224
             displacement from the procedure`s start address of the
1225
             end of this block. */
1226
          BLOCK_END (top_stack->cur_block) = sh->value + top_stack->procadr;
1227
        }
1228
      else if (sh->sc == scText && top_stack->blocktype == stNil)
1229
        {
1230
          /* End of outermost block.  Pop parse stack and ignore.  The
1231
             following stEnd of stProc will take care of the block.  */
1232
          ;
1233
        }
1234
      else if (sh->sc == scText && top_stack->blocktype == stFile)
1235
        {
1236
          /* End of file.  Pop parse stack and ignore.  Higher
1237
             level code deals with this.  */
1238
          ;
1239
        }
1240
      else
1241
        complaint (&symfile_complaints,
1242
                   _("stEnd with storage class %d not handled"), sh->sc);
1243
 
1244
      pop_parse_stack ();       /* restore previous lexical context */
1245
      break;
1246
 
1247
    case stMember:              /* member of struct or union */
1248
      f = &TYPE_FIELDS (top_stack->cur_type)[top_stack->cur_field++];
1249
      FIELD_NAME (*f) = name;
1250
      FIELD_BITPOS (*f) = sh->value;
1251
      bitsize = 0;
1252
      FIELD_TYPE (*f) = parse_type (cur_fd, ax, sh->index, &bitsize, bigend, name);
1253
      FIELD_BITSIZE (*f) = bitsize;
1254
      FIELD_STATIC_KIND (*f) = 0;
1255
      break;
1256
 
1257
    case stIndirect:            /* forward declaration on Irix5 */
1258
      /* Forward declarations from Irix5 cc are handled by cross_ref,
1259
         skip them.  */
1260
      break;
1261
 
1262
    case stTypedef:             /* type definition */
1263
      found_ecoff_debugging_info = 1;
1264
 
1265
      /* Typedefs for forward declarations and opaque structs from alpha cc
1266
         are handled by cross_ref, skip them.  */
1267
      if (sh->iss == 0)
1268
        break;
1269
 
1270
      /* Parse the type or use the pending type.  */
1271
      pend = is_pending_symbol (cur_fdr, ext_sh);
1272
      if (pend == (struct mdebug_pending *) NULL)
1273
        {
1274
          t = parse_type (cur_fd, ax, sh->index, (int *) NULL, bigend, name);
1275
          add_pending (cur_fdr, ext_sh, t);
1276
        }
1277
      else
1278
        t = pend->t;
1279
 
1280
      /* mips cc puts out a typedef with the name of the struct for forward
1281
         declarations. These should not go into the symbol table and
1282
         TYPE_NAME should not be set for them.
1283
         They can't be distinguished from an intentional typedef to
1284
         the same name however:
1285
         x.h:
1286
         struct x { int ix; int jx; };
1287
         struct xx;
1288
         x.c:
1289
         typedef struct x x;
1290
         struct xx {int ixx; int jxx; };
1291
         generates a cross referencing stTypedef for x and xx.
1292
         The user visible effect of this is that the type of a pointer
1293
         to struct foo sometimes is given as `foo *' instead of `struct foo *'.
1294
         The problem is fixed with alpha cc and Irix5 cc.  */
1295
 
1296
      /* However if the typedef cross references to an opaque aggregate, it
1297
         is safe to omit it from the symbol table.  */
1298
 
1299
      if (has_opaque_xref (cur_fdr, sh))
1300
        break;
1301
      s = new_symbol (name);
1302
      SYMBOL_DOMAIN (s) = VAR_DOMAIN;
1303
      SYMBOL_CLASS (s) = LOC_TYPEDEF;
1304
      SYMBOL_BLOCK_VALUE (s) = top_stack->cur_block;
1305
      SYMBOL_TYPE (s) = t;
1306
      add_symbol (s, top_stack->cur_block);
1307
 
1308
      /* Incomplete definitions of structs should not get a name.  */
1309
      if (TYPE_NAME (SYMBOL_TYPE (s)) == NULL
1310
          && (TYPE_NFIELDS (SYMBOL_TYPE (s)) != 0
1311
              || (TYPE_CODE (SYMBOL_TYPE (s)) != TYPE_CODE_STRUCT
1312
                  && TYPE_CODE (SYMBOL_TYPE (s)) != TYPE_CODE_UNION)))
1313
        {
1314
          if (TYPE_CODE (SYMBOL_TYPE (s)) == TYPE_CODE_PTR
1315
              || TYPE_CODE (SYMBOL_TYPE (s)) == TYPE_CODE_FUNC)
1316
            {
1317
              /* If we are giving a name to a type such as "pointer to
1318
                 foo" or "function returning foo", we better not set
1319
                 the TYPE_NAME.  If the program contains "typedef char
1320
                 *caddr_t;", we don't want all variables of type char
1321
                 * to print as caddr_t.  This is not just a
1322
                 consequence of GDB's type management; CC and GCC (at
1323
                 least through version 2.4) both output variables of
1324
                 either type char * or caddr_t with the type
1325
                 refering to the stTypedef symbol for caddr_t.  If a future
1326
                 compiler cleans this up it GDB is not ready for it
1327
                 yet, but if it becomes ready we somehow need to
1328
                 disable this check (without breaking the PCC/GCC2.4
1329
                 case).
1330
 
1331
                 Sigh.
1332
 
1333
                 Fortunately, this check seems not to be necessary
1334
                 for anything except pointers or functions.  */
1335
            }
1336
          else
1337
            TYPE_NAME (SYMBOL_TYPE (s)) = DEPRECATED_SYMBOL_NAME (s);
1338
        }
1339
      break;
1340
 
1341
    case stFile:                /* file name */
1342
      push_parse_stack ();
1343
      top_stack->blocktype = sh->st;
1344
      break;
1345
 
1346
      /* I`ve never seen these for C */
1347
    case stRegReloc:
1348
      break;                    /* register relocation */
1349
    case stForward:
1350
      break;                    /* forwarding address */
1351
    case stConstant:
1352
      break;                    /* constant */
1353
    default:
1354
      complaint (&symfile_complaints, _("unknown symbol type 0x%x"), sh->st);
1355
      break;
1356
    }
1357
 
1358
  return count;
1359
}
1360
 
1361
/* Parse the type information provided in the raw AX entries for
1362
   the symbol SH. Return the bitfield size in BS, in case.
1363
   We must byte-swap the AX entries before we use them; BIGEND says whether
1364
   they are big-endian or little-endian (from fh->fBigendian).  */
1365
 
1366
static struct type *
1367
parse_type (int fd, union aux_ext *ax, unsigned int aux_index, int *bs,
1368
            int bigend, char *sym_name)
1369
{
1370
  /* Null entries in this map are treated specially */
1371
  static struct type **map_bt[] =
1372
  {
1373
    &mdebug_type_void,          /* btNil */
1374
    &mdebug_type_adr_32,        /* btAdr */
1375
    &mdebug_type_char,          /* btChar */
1376
    &mdebug_type_unsigned_char, /* btUChar */
1377
    &mdebug_type_short,         /* btShort */
1378
    &mdebug_type_unsigned_short,        /* btUShort */
1379
    &mdebug_type_int_32,        /* btInt */
1380
    &mdebug_type_unsigned_int_32,       /* btUInt */
1381
    &mdebug_type_long_32,       /* btLong */
1382
    &mdebug_type_unsigned_long_32,      /* btULong */
1383
    &mdebug_type_float,         /* btFloat */
1384
    &mdebug_type_double,        /* btDouble */
1385
    0,                           /* btStruct */
1386
    0,                           /* btUnion */
1387
    0,                           /* btEnum */
1388
    0,                           /* btTypedef */
1389
    0,                           /* btRange */
1390
    0,                           /* btSet */
1391
    &mdebug_type_complex,       /* btComplex */
1392
    &mdebug_type_double_complex,        /* btDComplex */
1393
    0,                           /* btIndirect */
1394
    &mdebug_type_fixed_dec,     /* btFixedDec */
1395
    &mdebug_type_float_dec,     /* btFloatDec */
1396
    &mdebug_type_string,        /* btString */
1397
    0,                           /* btBit */
1398
    0,                           /* btPicture */
1399
    &mdebug_type_void,          /* btVoid */
1400
    0,                           /* DEC C++:  Pointer to member */
1401
    0,                           /* DEC C++:  Virtual function table */
1402
    0,                           /* DEC C++:  Class (Record) */
1403
    &mdebug_type_long_64,       /* btLong64  */
1404
    &mdebug_type_unsigned_long_64,      /* btULong64 */
1405
    &mdebug_type_long_long_64,  /* btLongLong64  */
1406
    &mdebug_type_unsigned_long_long_64,         /* btULongLong64 */
1407
    &mdebug_type_adr_64,        /* btAdr64 */
1408
    &mdebug_type_int_64,        /* btInt64  */
1409
    &mdebug_type_unsigned_int_64,       /* btUInt64 */
1410
  };
1411
 
1412
  TIR t[1];
1413
  struct type *tp = 0;
1414
  enum type_code type_code = TYPE_CODE_UNDEF;
1415
 
1416
  /* Handle undefined types, they have indexNil. */
1417
  if (aux_index == indexNil)
1418
    return mdebug_type_int;
1419
 
1420
  /* Handle corrupt aux indices.  */
1421
  if (aux_index >= (debug_info->fdr + fd)->caux)
1422
    {
1423
      index_complaint (sym_name);
1424
      return mdebug_type_int;
1425
    }
1426
  ax += aux_index;
1427
 
1428
  /* Use aux as a type information record, map its basic type.  */
1429
  (*debug_swap->swap_tir_in) (bigend, &ax->a_ti, t);
1430
  if (t->bt >= (sizeof (map_bt) / sizeof (*map_bt)))
1431
    {
1432
      basic_type_complaint (t->bt, sym_name);
1433
      return mdebug_type_int;
1434
    }
1435
  if (map_bt[t->bt])
1436
    {
1437
      tp = *map_bt[t->bt];
1438
    }
1439
  else
1440
    {
1441
      tp = NULL;
1442
      /* Cannot use builtin types -- build our own */
1443
      switch (t->bt)
1444
        {
1445
        case btStruct:
1446
          type_code = TYPE_CODE_STRUCT;
1447
          break;
1448
        case btUnion:
1449
          type_code = TYPE_CODE_UNION;
1450
          break;
1451
        case btEnum:
1452
          type_code = TYPE_CODE_ENUM;
1453
          break;
1454
        case btRange:
1455
          type_code = TYPE_CODE_RANGE;
1456
          break;
1457
        case btSet:
1458
          type_code = TYPE_CODE_SET;
1459
          break;
1460
        case btIndirect:
1461
          /* alpha cc -migrate uses this for typedefs. The true type will
1462
             be obtained by crossreferencing below.  */
1463
          type_code = TYPE_CODE_ERROR;
1464
          break;
1465
        case btTypedef:
1466
          /* alpha cc uses this for typedefs. The true type will be
1467
             obtained by crossreferencing below.  */
1468
          type_code = TYPE_CODE_ERROR;
1469
          break;
1470
        default:
1471
          basic_type_complaint (t->bt, sym_name);
1472
          return mdebug_type_int;
1473
        }
1474
    }
1475
 
1476
  /* Move on to next aux */
1477
  ax++;
1478
 
1479
  if (t->fBitfield)
1480
    {
1481
      int width = AUX_GET_WIDTH (bigend, ax);
1482
      /* Inhibit core dumps if TIR is corrupted.  */
1483
      if (bs == (int *) NULL)
1484
        {
1485
          /* Alpha cc -migrate encodes char and unsigned char types
1486
             as short and unsigned short types with a field width of 8.
1487
             Enum types also have a field width which we ignore for now.  */
1488
          if (t->bt == btShort && width == 8)
1489
            tp = mdebug_type_char;
1490
          else if (t->bt == btUShort && width == 8)
1491
            tp = mdebug_type_unsigned_char;
1492
          else if (t->bt == btEnum)
1493
            ;
1494
          else
1495
            complaint (&symfile_complaints, _("can't handle TIR fBitfield for %s"),
1496
                       sym_name);
1497
        }
1498
      else
1499
        *bs = width;
1500
      ax++;
1501
    }
1502
 
1503
  /* A btIndirect entry cross references to an aux entry containing
1504
     the type.  */
1505
  if (t->bt == btIndirect)
1506
    {
1507
      RNDXR rn[1];
1508
      int rf;
1509
      FDR *xref_fh;
1510
      int xref_fd;
1511
 
1512
      (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, rn);
1513
      ax++;
1514
      if (rn->rfd == 0xfff)
1515
        {
1516
          rf = AUX_GET_ISYM (bigend, ax);
1517
          ax++;
1518
        }
1519
      else
1520
        rf = rn->rfd;
1521
 
1522
      if (rf == -1)
1523
        {
1524
          complaint (&symfile_complaints,
1525
                     _("unable to cross ref btIndirect for %s"), sym_name);
1526
          return mdebug_type_int;
1527
        }
1528
      xref_fh = get_rfd (fd, rf);
1529
      xref_fd = xref_fh - debug_info->fdr;
1530
      tp = parse_type (xref_fd, debug_info->external_aux + xref_fh->iauxBase,
1531
                    rn->index, (int *) NULL, xref_fh->fBigendian, sym_name);
1532
    }
1533
 
1534
  /* All these types really point to some (common) MIPS type
1535
     definition, and only the type-qualifiers fully identify
1536
     them.  We'll make the same effort at sharing. */
1537
  if (t->bt == btStruct ||
1538
      t->bt == btUnion ||
1539
      t->bt == btEnum ||
1540
 
1541
  /* btSet (I think) implies that the name is a tag name, not a typedef
1542
     name.  This apparently is a MIPS extension for C sets.  */
1543
      t->bt == btSet)
1544
    {
1545
      char *name;
1546
 
1547
      /* Try to cross reference this type, build new type on failure.  */
1548
      ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
1549
      if (tp == (struct type *) NULL)
1550
        tp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
1551
 
1552
      /* DEC c89 produces cross references to qualified aggregate types,
1553
         dereference them.  */
1554
      while (TYPE_CODE (tp) == TYPE_CODE_PTR
1555
             || TYPE_CODE (tp) == TYPE_CODE_ARRAY)
1556
        tp = TYPE_TARGET_TYPE (tp);
1557
 
1558
      /* Make sure that TYPE_CODE(tp) has an expected type code.
1559
         Any type may be returned from cross_ref if file indirect entries
1560
         are corrupted.  */
1561
      if (TYPE_CODE (tp) != TYPE_CODE_STRUCT
1562
          && TYPE_CODE (tp) != TYPE_CODE_UNION
1563
          && TYPE_CODE (tp) != TYPE_CODE_ENUM)
1564
        {
1565
          unexpected_type_code_complaint (sym_name);
1566
        }
1567
      else
1568
        {
1569
 
1570
          /* Usually, TYPE_CODE(tp) is already type_code.  The main
1571
             exception is if we guessed wrong re struct/union/enum.
1572
             But for struct vs. union a wrong guess is harmless, so
1573
             don't complain().  */
1574
          if ((TYPE_CODE (tp) == TYPE_CODE_ENUM
1575
               && type_code != TYPE_CODE_ENUM)
1576
              || (TYPE_CODE (tp) != TYPE_CODE_ENUM
1577
                  && type_code == TYPE_CODE_ENUM))
1578
            {
1579
              bad_tag_guess_complaint (sym_name);
1580
            }
1581
 
1582
          if (TYPE_CODE (tp) != type_code)
1583
            {
1584
              TYPE_CODE (tp) = type_code;
1585
            }
1586
 
1587
          /* Do not set the tag name if it is a compiler generated tag name
1588
             (.Fxx or .xxfake or empty) for unnamed struct/union/enums.  */
1589
          if (name[0] == '.' || name[0] == '\0')
1590
            TYPE_TAG_NAME (tp) = NULL;
1591
          else if (TYPE_TAG_NAME (tp) == NULL
1592
                   || strcmp (TYPE_TAG_NAME (tp), name) != 0)
1593
            TYPE_TAG_NAME (tp) = obsavestring (name, strlen (name),
1594
                                            &current_objfile->objfile_obstack);
1595
        }
1596
    }
1597
 
1598
  /* All these types really point to some (common) MIPS type
1599
     definition, and only the type-qualifiers fully identify
1600
     them.  We'll make the same effort at sharing.
1601
     FIXME: We are not doing any guessing on range types.  */
1602
  if (t->bt == btRange)
1603
    {
1604
      char *name;
1605
 
1606
      /* Try to cross reference this type, build new type on failure.  */
1607
      ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
1608
      if (tp == (struct type *) NULL)
1609
        tp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
1610
 
1611
      /* Make sure that TYPE_CODE(tp) has an expected type code.
1612
         Any type may be returned from cross_ref if file indirect entries
1613
         are corrupted.  */
1614
      if (TYPE_CODE (tp) != TYPE_CODE_RANGE)
1615
        {
1616
          unexpected_type_code_complaint (sym_name);
1617
        }
1618
      else
1619
        {
1620
          /* Usually, TYPE_CODE(tp) is already type_code.  The main
1621
             exception is if we guessed wrong re struct/union/enum. */
1622
          if (TYPE_CODE (tp) != type_code)
1623
            {
1624
              bad_tag_guess_complaint (sym_name);
1625
              TYPE_CODE (tp) = type_code;
1626
            }
1627
          if (TYPE_NAME (tp) == NULL
1628
              || strcmp (TYPE_NAME (tp), name) != 0)
1629
            TYPE_NAME (tp) = obsavestring (name, strlen (name),
1630
                                           &current_objfile->objfile_obstack);
1631
        }
1632
    }
1633
  if (t->bt == btTypedef)
1634
    {
1635
      char *name;
1636
 
1637
      /* Try to cross reference this type, it should succeed.  */
1638
      ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
1639
      if (tp == (struct type *) NULL)
1640
        {
1641
          complaint (&symfile_complaints,
1642
                     _("unable to cross ref btTypedef for %s"), sym_name);
1643
          tp = mdebug_type_int;
1644
        }
1645
    }
1646
 
1647
  /* Deal with range types */
1648
  if (t->bt == btRange)
1649
    {
1650
      TYPE_NFIELDS (tp) = 2;
1651
      TYPE_FIELDS (tp) = ((struct field *)
1652
                          TYPE_ALLOC (tp, 2 * sizeof (struct field)));
1653
      TYPE_FIELD_NAME (tp, 0) = obsavestring ("Low", strlen ("Low"),
1654
                                            &current_objfile->objfile_obstack);
1655
      TYPE_FIELD_BITPOS (tp, 0) = AUX_GET_DNLOW (bigend, ax);
1656
      ax++;
1657
      TYPE_FIELD_NAME (tp, 1) = obsavestring ("High", strlen ("High"),
1658
                                            &current_objfile->objfile_obstack);
1659
      TYPE_FIELD_BITPOS (tp, 1) = AUX_GET_DNHIGH (bigend, ax);
1660
      ax++;
1661
    }
1662
 
1663
  /* Parse all the type qualifiers now. If there are more
1664
     than 6 the game will continue in the next aux */
1665
 
1666
  while (1)
1667
    {
1668
#define PARSE_TQ(tq) \
1669
      if (t->tq != tqNil) \
1670
        ax += upgrade_type(fd, &tp, t->tq, ax, bigend, sym_name); \
1671
      else \
1672
        break;
1673
 
1674
      PARSE_TQ (tq0);
1675
      PARSE_TQ (tq1);
1676
      PARSE_TQ (tq2);
1677
      PARSE_TQ (tq3);
1678
      PARSE_TQ (tq4);
1679
      PARSE_TQ (tq5);
1680
#undef  PARSE_TQ
1681
 
1682
      /* mips cc 2.x and gcc never put out continued aux entries.  */
1683
      if (!t->continued)
1684
        break;
1685
 
1686
      (*debug_swap->swap_tir_in) (bigend, &ax->a_ti, t);
1687
      ax++;
1688
    }
1689
 
1690
  /* Complain for illegal continuations due to corrupt aux entries.  */
1691
  if (t->continued)
1692
    complaint (&symfile_complaints, _("illegal TIR continued for %s"), sym_name);
1693
 
1694
  return tp;
1695
}
1696
 
1697
/* Make up a complex type from a basic one.  Type is passed by
1698
   reference in TPP and side-effected as necessary. The type
1699
   qualifier TQ says how to handle the aux symbols at AX for
1700
   the symbol SX we are currently analyzing.  BIGEND says whether
1701
   aux symbols are big-endian or little-endian.
1702
   Returns the number of aux symbols we parsed. */
1703
 
1704
static int
1705
upgrade_type (int fd, struct type **tpp, int tq, union aux_ext *ax, int bigend,
1706
              char *sym_name)
1707
{
1708
  int off;
1709
  struct type *t;
1710
 
1711
  /* Used in array processing */
1712
  int rf, id;
1713
  FDR *fh;
1714
  struct type *range;
1715
  struct type *indx;
1716
  int lower, upper;
1717
  RNDXR rndx;
1718
 
1719
  switch (tq)
1720
    {
1721
    case tqPtr:
1722
      t = lookup_pointer_type (*tpp);
1723
      *tpp = t;
1724
      return 0;
1725
 
1726
    case tqProc:
1727
      t = lookup_function_type (*tpp);
1728
      *tpp = t;
1729
      return 0;
1730
 
1731
    case tqArray:
1732
      off = 0;
1733
 
1734
      /* Determine and record the domain type (type of index) */
1735
      (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, &rndx);
1736
      id = rndx.index;
1737
      rf = rndx.rfd;
1738
      if (rf == 0xfff)
1739
        {
1740
          ax++;
1741
          rf = AUX_GET_ISYM (bigend, ax);
1742
          off++;
1743
        }
1744
      fh = get_rfd (fd, rf);
1745
 
1746
      indx = parse_type (fh - debug_info->fdr,
1747
                         debug_info->external_aux + fh->iauxBase,
1748
                         id, (int *) NULL, bigend, sym_name);
1749
 
1750
      /* The bounds type should be an integer type, but might be anything
1751
         else due to corrupt aux entries.  */
1752
      if (TYPE_CODE (indx) != TYPE_CODE_INT)
1753
        {
1754
          complaint (&symfile_complaints,
1755
                     _("illegal array index type for %s, assuming int"), sym_name);
1756
          indx = mdebug_type_int;
1757
        }
1758
 
1759
      /* Get the bounds, and create the array type.  */
1760
      ax++;
1761
      lower = AUX_GET_DNLOW (bigend, ax);
1762
      ax++;
1763
      upper = AUX_GET_DNHIGH (bigend, ax);
1764
      ax++;
1765
      rf = AUX_GET_WIDTH (bigend, ax);  /* bit size of array element */
1766
 
1767
      range = create_range_type ((struct type *) NULL, indx,
1768
                                 lower, upper);
1769
 
1770
      t = create_array_type ((struct type *) NULL, *tpp, range);
1771
 
1772
      /* We used to fill in the supplied array element bitsize
1773
         here if the TYPE_LENGTH of the target type was zero.
1774
         This happens for a `pointer to an array of anonymous structs',
1775
         but in this case the array element bitsize is also zero,
1776
         so nothing is gained.
1777
         And we used to check the TYPE_LENGTH of the target type against
1778
         the supplied array element bitsize.
1779
         gcc causes a mismatch for `pointer to array of object',
1780
         since the sdb directives it uses do not have a way of
1781
         specifying the bitsize, but it does no harm (the
1782
         TYPE_LENGTH should be correct) and we should be able to
1783
         ignore the erroneous bitsize from the auxiliary entry safely.
1784
         dbx seems to ignore it too.  */
1785
 
1786
      /* TYPE_FLAG_TARGET_STUB now takes care of the zero TYPE_LENGTH
1787
         problem.  */
1788
      if (TYPE_LENGTH (*tpp) == 0)
1789
        {
1790
          TYPE_FLAGS (t) |= TYPE_FLAG_TARGET_STUB;
1791
        }
1792
 
1793
      *tpp = t;
1794
      return 4 + off;
1795
 
1796
    case tqVol:
1797
      /* Volatile -- currently ignored */
1798
      return 0;
1799
 
1800
    case tqConst:
1801
      /* Const -- currently ignored */
1802
      return 0;
1803
 
1804
    default:
1805
      complaint (&symfile_complaints, _("unknown type qualifier 0x%x"), tq);
1806
      return 0;
1807
    }
1808
}
1809
 
1810
 
1811
/* Parse a procedure descriptor record PR.  Note that the procedure is
1812
   parsed _after_ the local symbols, now we just insert the extra
1813
   information we need into a MDEBUG_EFI_SYMBOL_NAME symbol that has
1814
   already been placed in the procedure's main block.  Note also that
1815
   images that have been partially stripped (ld -x) have been deprived
1816
   of local symbols, and we have to cope with them here.  FIRST_OFF is
1817
   the offset of the first procedure for this FDR; we adjust the
1818
   address by this amount, but I don't know why.  SEARCH_SYMTAB is the symtab
1819
   to look for the function which contains the MDEBUG_EFI_SYMBOL_NAME symbol
1820
   in question, or NULL to use top_stack->cur_block.  */
1821
 
1822
static void parse_procedure (PDR *, struct symtab *, struct partial_symtab *);
1823
 
1824
static void
1825
parse_procedure (PDR *pr, struct symtab *search_symtab,
1826
                 struct partial_symtab *pst)
1827
{
1828
  struct symbol *s, *i;
1829
  struct block *b;
1830
  struct mdebug_extra_func_info *e;
1831
  char *sh_name;
1832
 
1833
  /* Simple rule to find files linked "-x" */
1834
  if (cur_fdr->rss == -1)
1835
    {
1836
      if (pr->isym == -1)
1837
        {
1838
          /* Static procedure at address pr->adr.  Sigh. */
1839
          /* FIXME-32x64.  assuming pr->adr fits in long.  */
1840
          complaint (&symfile_complaints,
1841
                     _("can't handle PDR for static proc at 0x%lx"),
1842
                     (unsigned long) pr->adr);
1843
          return;
1844
        }
1845
      else
1846
        {
1847
          /* external */
1848
          EXTR she;
1849
 
1850
          (*debug_swap->swap_ext_in) (cur_bfd,
1851
                                      ((char *) debug_info->external_ext
1852
                                       + (pr->isym
1853
                                          * debug_swap->external_ext_size)),
1854
                                      &she);
1855
          sh_name = debug_info->ssext + she.asym.iss;
1856
        }
1857
    }
1858
  else
1859
    {
1860
      /* Full symbols */
1861
      SYMR sh;
1862
 
1863
      (*debug_swap->swap_sym_in) (cur_bfd,
1864
                                  ((char *) debug_info->external_sym
1865
                                   + ((cur_fdr->isymBase + pr->isym)
1866
                                      * debug_swap->external_sym_size)),
1867
                                  &sh);
1868
      sh_name = debug_info->ss + cur_fdr->issBase + sh.iss;
1869
    }
1870
 
1871
  if (search_symtab != NULL)
1872
    {
1873
#if 0
1874
      /* This loses both in the case mentioned (want a static, find a global),
1875
         but also if we are looking up a non-mangled name which happens to
1876
         match the name of a mangled function.  */
1877
      /* We have to save the cur_fdr across the call to lookup_symbol.
1878
         If the pdr is for a static function and if a global function with
1879
         the same name exists, lookup_symbol will eventually read in the symtab
1880
         for the global function and clobber cur_fdr.  */
1881
      FDR *save_cur_fdr = cur_fdr;
1882
      s = lookup_symbol (sh_name, NULL, VAR_DOMAIN, 0, NULL);
1883
      cur_fdr = save_cur_fdr;
1884
#else
1885
      s = mylookup_symbol
1886
        (sh_name,
1887
         BLOCKVECTOR_BLOCK (BLOCKVECTOR (search_symtab), STATIC_BLOCK),
1888
         VAR_DOMAIN,
1889
         LOC_BLOCK);
1890
#endif
1891
    }
1892
  else
1893
    s = mylookup_symbol (sh_name, top_stack->cur_block,
1894
                         VAR_DOMAIN, LOC_BLOCK);
1895
 
1896
  if (s != 0)
1897
    {
1898
      b = SYMBOL_BLOCK_VALUE (s);
1899
    }
1900
  else
1901
    {
1902
      complaint (&symfile_complaints, _("PDR for %s, but no symbol"), sh_name);
1903
#if 1
1904
      return;
1905
#else
1906
/* FIXME -- delete.  We can't do symbol allocation now; it's all done.  */
1907
      s = new_symbol (sh_name);
1908
      SYMBOL_DOMAIN (s) = VAR_DOMAIN;
1909
      SYMBOL_CLASS (s) = LOC_BLOCK;
1910
      /* Donno its type, hope int is ok */
1911
      SYMBOL_TYPE (s) = lookup_function_type (mdebug_type_int);
1912
      add_symbol (s, top_stack->cur_block);
1913
      /* Wont have symbols for this one */
1914
      b = new_block (2);
1915
      SYMBOL_BLOCK_VALUE (s) = b;
1916
      BLOCK_FUNCTION (b) = s;
1917
      BLOCK_START (b) = pr->adr;
1918
      /* BOUND used to be the end of procedure's text, but the
1919
         argument is no longer passed in.  */
1920
      BLOCK_END (b) = bound;
1921
      BLOCK_SUPERBLOCK (b) = top_stack->cur_block;
1922
      add_block (b, top_stack->cur_st);
1923
#endif
1924
    }
1925
 
1926
  i = mylookup_symbol (MDEBUG_EFI_SYMBOL_NAME, b, LABEL_DOMAIN, LOC_CONST);
1927
 
1928
  if (i)
1929
    {
1930
      e = (struct mdebug_extra_func_info *) SYMBOL_VALUE (i);
1931
      e->pdr = *pr;
1932
      e->pdr.isym = (long) s;
1933
 
1934
      /* GDB expects the absolute function start address for the
1935
         procedure descriptor in e->pdr.adr.
1936
         As the address in the procedure descriptor is usually relative,
1937
         we would have to relocate e->pdr.adr with cur_fdr->adr and
1938
         ANOFFSET (pst->section_offsets, SECT_OFF_TEXT (pst->objfile)).
1939
         Unfortunately cur_fdr->adr and e->pdr.adr are both absolute
1940
         in shared libraries on some systems, and on other systems
1941
         e->pdr.adr is sometimes offset by a bogus value.
1942
         To work around these problems, we replace e->pdr.adr with
1943
         the start address of the function.  */
1944
      e->pdr.adr = BLOCK_START (b);
1945
    }
1946
 
1947
  /* It would be reasonable that functions that have been compiled
1948
     without debugging info have a btNil type for their return value,
1949
     and functions that are void and are compiled with debugging info
1950
     have btVoid.
1951
     gcc and DEC f77 put out btNil types for both cases, so btNil is mapped
1952
     to TYPE_CODE_VOID in parse_type to get the `compiled with debugging info'
1953
     case right.
1954
     The glevel field in cur_fdr could be used to determine the presence
1955
     of debugging info, but GCC doesn't always pass the -g switch settings
1956
     to the assembler and GAS doesn't set the glevel field from the -g switch
1957
     settings.
1958
     To work around these problems, the return value type of a TYPE_CODE_VOID
1959
     function is adjusted accordingly if no debugging info was found in the
1960
     compilation unit.  */
1961
 
1962
  if (processing_gcc_compilation == 0
1963
      && found_ecoff_debugging_info == 0
1964
      && TYPE_CODE (TYPE_TARGET_TYPE (SYMBOL_TYPE (s))) == TYPE_CODE_VOID)
1965
    SYMBOL_TYPE (s) = builtin_type (current_gdbarch)->nodebug_text_symbol;
1966
}
1967
 
1968
/* Parse the external symbol ES. Just call parse_symbol() after
1969
   making sure we know where the aux are for it.
1970
   BIGEND says whether aux entries are big-endian or little-endian.
1971
 
1972
   This routine clobbers top_stack->cur_block and ->cur_st. */
1973
 
1974
static void parse_external (EXTR *, int, struct section_offsets *,
1975
                            struct objfile *);
1976
 
1977
static void
1978
parse_external (EXTR *es, int bigend, struct section_offsets *section_offsets,
1979
                struct objfile *objfile)
1980
{
1981
  union aux_ext *ax;
1982
 
1983
  if (es->ifd != ifdNil)
1984
    {
1985
      cur_fd = es->ifd;
1986
      cur_fdr = debug_info->fdr + cur_fd;
1987
      ax = debug_info->external_aux + cur_fdr->iauxBase;
1988
    }
1989
  else
1990
    {
1991
      cur_fdr = debug_info->fdr;
1992
      ax = 0;
1993
    }
1994
 
1995
  /* Reading .o files */
1996
  if (SC_IS_UNDEF (es->asym.sc) || es->asym.sc == scNil)
1997
    {
1998
      char *what;
1999
      switch (es->asym.st)
2000
        {
2001
        case stNil:
2002
          /* These are generated for static symbols in .o files,
2003
             ignore them.  */
2004
          return;
2005
        case stStaticProc:
2006
        case stProc:
2007
          what = "procedure";
2008
          n_undef_procs++;
2009
          break;
2010
        case stGlobal:
2011
          what = "variable";
2012
          n_undef_vars++;
2013
          break;
2014
        case stLabel:
2015
          what = "label";
2016
          n_undef_labels++;
2017
          break;
2018
        default:
2019
          what = "symbol";
2020
          break;
2021
        }
2022
      n_undef_symbols++;
2023
      /* FIXME:  Turn this into a complaint? */
2024
      if (info_verbose)
2025
        printf_filtered (_("Warning: %s `%s' is undefined (in %s)\n"),
2026
                         what, debug_info->ssext + es->asym.iss,
2027
                         fdr_name (cur_fdr));
2028
      return;
2029
    }
2030
 
2031
  switch (es->asym.st)
2032
    {
2033
    case stProc:
2034
    case stStaticProc:
2035
      /* There is no need to parse the external procedure symbols.
2036
         If they are from objects compiled without -g, their index will
2037
         be indexNil, and the symbol definition from the minimal symbol
2038
         is preferrable (yielding a function returning int instead of int).
2039
         If the index points to a local procedure symbol, the local
2040
         symbol already provides the correct type.
2041
         Note that the index of the external procedure symbol points
2042
         to the local procedure symbol in the local symbol table, and
2043
         _not_ to the auxiliary symbol info.  */
2044
      break;
2045
    case stGlobal:
2046
    case stLabel:
2047
      /* Global common symbols are resolved by the runtime loader,
2048
         ignore them.  */
2049
      if (SC_IS_COMMON (es->asym.sc))
2050
        break;
2051
 
2052
      /* Note that the case of a symbol with indexNil must be handled
2053
         anyways by parse_symbol().  */
2054
      parse_symbol (&es->asym, ax, (char *) NULL, bigend, section_offsets, objfile);
2055
      break;
2056
    default:
2057
      break;
2058
    }
2059
}
2060
 
2061
/* Parse the line number info for file descriptor FH into
2062
   GDB's linetable LT.  MIPS' encoding requires a little bit
2063
   of magic to get things out.  Note also that MIPS' line
2064
   numbers can go back and forth, apparently we can live
2065
   with that and do not need to reorder our linetables */
2066
 
2067
static void parse_lines (FDR *, PDR *, struct linetable *, int,
2068
                         struct partial_symtab *, CORE_ADDR);
2069
 
2070
static void
2071
parse_lines (FDR *fh, PDR *pr, struct linetable *lt, int maxlines,
2072
             struct partial_symtab *pst, CORE_ADDR lowest_pdr_addr)
2073
{
2074
  unsigned char *base;
2075
  int j, k;
2076
  int delta, count, lineno = 0;
2077
 
2078
  if (fh->cbLine == 0)
2079
    return;
2080
 
2081
  /* Scan by procedure descriptors */
2082
  k = 0;
2083
  for (j = 0; j < fh->cpd; j++, pr++)
2084
    {
2085
      CORE_ADDR l;
2086
      CORE_ADDR adr;
2087
      unsigned char *halt;
2088
 
2089
      /* No code for this one */
2090
      if (pr->iline == ilineNil ||
2091
          pr->lnLow == -1 || pr->lnHigh == -1)
2092
        continue;
2093
 
2094
      /* Determine start and end address of compressed line bytes for
2095
         this procedure.  */
2096
      base = debug_info->line + fh->cbLineOffset;
2097
      if (j != (fh->cpd - 1))
2098
        halt = base + pr[1].cbLineOffset;
2099
      else
2100
        halt = base + fh->cbLine;
2101
      base += pr->cbLineOffset;
2102
 
2103
      adr = pst->textlow + pr->adr - lowest_pdr_addr;
2104
 
2105
      l = adr >> 2;             /* in words */
2106
      for (lineno = pr->lnLow; base < halt;)
2107
        {
2108
          count = *base & 0x0f;
2109
          delta = *base++ >> 4;
2110
          if (delta >= 8)
2111
            delta -= 16;
2112
          if (delta == -8)
2113
            {
2114
              delta = (base[0] << 8) | base[1];
2115
              if (delta >= 0x8000)
2116
                delta -= 0x10000;
2117
              base += 2;
2118
            }
2119
          lineno += delta;      /* first delta is 0 */
2120
 
2121
          /* Complain if the line table overflows. Could happen
2122
             with corrupt binaries.  */
2123
          if (lt->nitems >= maxlines)
2124
            {
2125
              complaint (&symfile_complaints,
2126
                         _("guessed size of linetable for %s incorrectly"),
2127
                         fdr_name (fh));
2128
              break;
2129
            }
2130
          k = add_line (lt, lineno, l, k);
2131
          l += count + 1;
2132
        }
2133
    }
2134
}
2135
 
2136
static void
2137
function_outside_compilation_unit_complaint (const char *arg1)
2138
{
2139
  complaint (&symfile_complaints,
2140
             _("function `%s' appears to be defined outside of all compilation units"),
2141
             arg1);
2142
}
2143
 
2144
/* Use the STORAGE_CLASS to compute which section the given symbol
2145
   belongs to, and then records this new minimal symbol.  */
2146
 
2147
static void
2148
record_minimal_symbol (const char *name, const CORE_ADDR address,
2149
                       enum minimal_symbol_type ms_type, int storage_class,
2150
                       struct objfile *objfile)
2151
{
2152
  int section;
2153
  asection *bfd_section;
2154
 
2155
  switch (storage_class)
2156
    {
2157
      case scText:
2158
        section = SECT_OFF_TEXT (objfile);
2159
        bfd_section = bfd_get_section_by_name (cur_bfd, ".text");
2160
        break;
2161
      case scData:
2162
        section = SECT_OFF_DATA (objfile);
2163
        bfd_section = bfd_get_section_by_name (cur_bfd, ".data");
2164
        break;
2165
      case scBss:
2166
        section = SECT_OFF_BSS (objfile);
2167
        bfd_section = bfd_get_section_by_name (cur_bfd, ".bss");
2168
        break;
2169
      case scSData:
2170
        section = get_section_index (objfile, ".sdata");
2171
        bfd_section = bfd_get_section_by_name (cur_bfd, ".sdata");
2172
        break;
2173
      case scSBss:
2174
        section = get_section_index (objfile, ".sbss");
2175
        bfd_section = bfd_get_section_by_name (cur_bfd, ".sbss");
2176
        break;
2177
      case scRData:
2178
        section = get_section_index (objfile, ".rdata");
2179
        bfd_section = bfd_get_section_by_name (cur_bfd, ".rdata");
2180
        break;
2181
      case scInit:
2182
        section = get_section_index (objfile, ".init");
2183
        bfd_section = bfd_get_section_by_name (cur_bfd, ".init");
2184
        break;
2185
      case scXData:
2186
        section = get_section_index (objfile, ".xdata");
2187
        bfd_section = bfd_get_section_by_name (cur_bfd, ".xdata");
2188
        break;
2189
      case scPData:
2190
        section = get_section_index (objfile, ".pdata");
2191
        bfd_section = bfd_get_section_by_name (cur_bfd, ".pdata");
2192
        break;
2193
      case scFini:
2194
        section = get_section_index (objfile, ".fini");
2195
        bfd_section = bfd_get_section_by_name (cur_bfd, ".fini");
2196
        break;
2197
      case scRConst:
2198
        section = get_section_index (objfile, ".rconst");
2199
        bfd_section = bfd_get_section_by_name (cur_bfd, ".rconst");
2200
        break;
2201
#ifdef scTlsData
2202
      case scTlsData:
2203
        section = get_section_index (objfile, ".tlsdata");
2204
        bfd_section = bfd_get_section_by_name (cur_bfd, ".tlsdata");
2205
        break;
2206
#endif
2207
#ifdef scTlsBss
2208
      case scTlsBss:
2209
        section = get_section_index (objfile, ".tlsbss");
2210
        bfd_section = bfd_get_section_by_name (cur_bfd, ".tlsbss");
2211
        break;
2212
#endif
2213
      default:
2214
        /* This kind of symbol is not associated to a section.  */
2215
        section = -1;
2216
        bfd_section = NULL;
2217
    }
2218
 
2219
  prim_record_minimal_symbol_and_info (name, address, ms_type, NULL,
2220
                                       section, bfd_section, objfile);
2221
}
2222
 
2223
/* Master parsing procedure for first-pass reading of file symbols
2224
   into a partial_symtab.  */
2225
 
2226
static void
2227
parse_partial_symbols (struct objfile *objfile)
2228
{
2229
  const bfd_size_type external_sym_size = debug_swap->external_sym_size;
2230
  const bfd_size_type external_rfd_size = debug_swap->external_rfd_size;
2231
  const bfd_size_type external_ext_size = debug_swap->external_ext_size;
2232
  void (*const swap_ext_in) (bfd *, void *, EXTR *) = debug_swap->swap_ext_in;
2233
  void (*const swap_sym_in) (bfd *, void *, SYMR *) = debug_swap->swap_sym_in;
2234
  void (*const swap_rfd_in) (bfd *, void *, RFDT *) = debug_swap->swap_rfd_in;
2235
  int f_idx, s_idx;
2236
  HDRR *hdr = &debug_info->symbolic_header;
2237
  /* Running pointers */
2238
  FDR *fh;
2239
  char *ext_out;
2240
  char *ext_out_end;
2241
  EXTR *ext_block;
2242
  EXTR *ext_in;
2243
  EXTR *ext_in_end;
2244
  SYMR sh;
2245
  struct partial_symtab *pst;
2246
  int textlow_not_set = 1;
2247
  int past_first_source_file = 0;
2248
 
2249
  /* List of current psymtab's include files */
2250
  char **psymtab_include_list;
2251
  int includes_allocated;
2252
  int includes_used;
2253
  EXTR *extern_tab;
2254
  struct pst_map *fdr_to_pst;
2255
  /* Index within current psymtab dependency list */
2256
  struct partial_symtab **dependency_list;
2257
  int dependencies_used, dependencies_allocated;
2258
  struct cleanup *old_chain;
2259
  char *name;
2260
  enum language prev_language;
2261
  asection *text_sect;
2262
  int relocatable = 0;
2263
 
2264
  /* Irix 5.2 shared libraries have a fh->adr field of zero, but
2265
     the shared libraries are prelinked at a high memory address.
2266
     We have to adjust the start address of the object file for this case,
2267
     by setting it to the start address of the first procedure in the file.
2268
     But we should do no adjustments if we are debugging a .o file, where
2269
     the text section (and fh->adr) really starts at zero.  */
2270
  text_sect = bfd_get_section_by_name (cur_bfd, ".text");
2271
  if (text_sect != NULL
2272
      && (bfd_get_section_flags (cur_bfd, text_sect) & SEC_RELOC))
2273
    relocatable = 1;
2274
 
2275
  extern_tab = (EXTR *) obstack_alloc (&objfile->objfile_obstack,
2276
                                       sizeof (EXTR) * hdr->iextMax);
2277
 
2278
  includes_allocated = 30;
2279
  includes_used = 0;
2280
  psymtab_include_list = (char **) alloca (includes_allocated *
2281
                                           sizeof (char *));
2282
  next_symbol_text_func = mdebug_next_symbol_text;
2283
 
2284
  dependencies_allocated = 30;
2285
  dependencies_used = 0;
2286
  dependency_list =
2287
    (struct partial_symtab **) alloca (dependencies_allocated *
2288
                                       sizeof (struct partial_symtab *));
2289
 
2290
  last_source_file = NULL;
2291
 
2292
  /*
2293
   * Big plan:
2294
   *
2295
   * Only parse the Local and External symbols, and the Relative FDR.
2296
   * Fixup enough of the loader symtab to be able to use it.
2297
   * Allocate space only for the file's portions we need to
2298
   * look at. (XXX)
2299
   */
2300
 
2301
  max_gdbinfo = 0;
2302
  max_glevel = MIN_GLEVEL;
2303
 
2304
  /* Allocate the map FDR -> PST.
2305
     Minor hack: -O3 images might claim some global data belongs
2306
     to FDR -1. We`ll go along with that */
2307
  fdr_to_pst = (struct pst_map *) xzalloc ((hdr->ifdMax + 1) * sizeof *fdr_to_pst);
2308
  old_chain = make_cleanup (xfree, fdr_to_pst);
2309
  fdr_to_pst++;
2310
  {
2311
    struct partial_symtab *pst = new_psymtab ("", objfile);
2312
    fdr_to_pst[-1].pst = pst;
2313
    FDR_IDX (pst) = -1;
2314
  }
2315
 
2316
  /* Allocate the global pending list.  */
2317
  pending_list =
2318
    ((struct mdebug_pending **)
2319
     obstack_alloc (&objfile->objfile_obstack,
2320
                    hdr->ifdMax * sizeof (struct mdebug_pending *)));
2321
  memset (pending_list, 0,
2322
          hdr->ifdMax * sizeof (struct mdebug_pending *));
2323
 
2324
  /* Pass 0 over external syms: swap them in.  */
2325
  ext_block = (EXTR *) xmalloc (hdr->iextMax * sizeof (EXTR));
2326
  make_cleanup (xfree, ext_block);
2327
 
2328
  ext_out = (char *) debug_info->external_ext;
2329
  ext_out_end = ext_out + hdr->iextMax * external_ext_size;
2330
  ext_in = ext_block;
2331
  for (; ext_out < ext_out_end; ext_out += external_ext_size, ext_in++)
2332
    (*swap_ext_in) (cur_bfd, ext_out, ext_in);
2333
 
2334
  /* Pass 1 over external syms: Presize and partition the list */
2335
  ext_in = ext_block;
2336
  ext_in_end = ext_in + hdr->iextMax;
2337
  for (; ext_in < ext_in_end; ext_in++)
2338
    {
2339
      /* See calls to complain below.  */
2340
      if (ext_in->ifd >= -1
2341
          && ext_in->ifd < hdr->ifdMax
2342
          && ext_in->asym.iss >= 0
2343
          && ext_in->asym.iss < hdr->issExtMax)
2344
        fdr_to_pst[ext_in->ifd].n_globals++;
2345
    }
2346
 
2347
  /* Pass 1.5 over files:  partition out global symbol space */
2348
  s_idx = 0;
2349
  for (f_idx = -1; f_idx < hdr->ifdMax; f_idx++)
2350
    {
2351
      fdr_to_pst[f_idx].globals_offset = s_idx;
2352
      s_idx += fdr_to_pst[f_idx].n_globals;
2353
      fdr_to_pst[f_idx].n_globals = 0;
2354
    }
2355
 
2356
  /* ECOFF in ELF:
2357
 
2358
     For ECOFF in ELF, we skip the creation of the minimal symbols.
2359
     The ECOFF symbols should be a subset of the Elf symbols, and the
2360
     section information of the elf symbols will be more accurate.
2361
     FIXME!  What about Irix 5's native linker?
2362
 
2363
     By default, Elf sections which don't exist in ECOFF
2364
     get put in ECOFF's absolute section by the gnu linker.
2365
     Since absolute sections don't get relocated, we
2366
     end up calculating an address different from that of
2367
     the symbol's minimal symbol (created earlier from the
2368
     Elf symtab).
2369
 
2370
     To fix this, either :
2371
     1) don't create the duplicate symbol
2372
     (assumes ECOFF symtab is a subset of the ELF symtab;
2373
     assumes no side-effects result from ignoring ECOFF symbol)
2374
     2) create it, only if lookup for existing symbol in ELF's minimal
2375
     symbols fails
2376
     (inefficient;
2377
     assumes no side-effects result from ignoring ECOFF symbol)
2378
     3) create it, but lookup ELF's minimal symbol and use it's section
2379
     during relocation, then modify "uniqify" phase to merge and
2380
     eliminate the duplicate symbol
2381
     (highly inefficient)
2382
 
2383
     I've implemented #1 here...
2384
     Skip the creation of the minimal symbols based on the ECOFF
2385
     symbol table. */
2386
 
2387
  /* Pass 2 over external syms: fill in external symbols */
2388
  ext_in = ext_block;
2389
  ext_in_end = ext_in + hdr->iextMax;
2390
  for (; ext_in < ext_in_end; ext_in++)
2391
    {
2392
      enum minimal_symbol_type ms_type = mst_text;
2393
      CORE_ADDR svalue = ext_in->asym.value;
2394
 
2395
      /* The Irix 5 native tools seem to sometimes generate bogus
2396
         external symbols.  */
2397
      if (ext_in->ifd < -1 || ext_in->ifd >= hdr->ifdMax)
2398
        {
2399
          complaint (&symfile_complaints,
2400
                     _("bad ifd for external symbol: %d (max %ld)"), ext_in->ifd,
2401
                     hdr->ifdMax);
2402
          continue;
2403
        }
2404
      if (ext_in->asym.iss < 0 || ext_in->asym.iss >= hdr->issExtMax)
2405
        {
2406
          complaint (&symfile_complaints,
2407
                     _("bad iss for external symbol: %ld (max %ld)"),
2408
                     ext_in->asym.iss, hdr->issExtMax);
2409
          continue;
2410
        }
2411
 
2412
      extern_tab[fdr_to_pst[ext_in->ifd].globals_offset
2413
                 + fdr_to_pst[ext_in->ifd].n_globals++] = *ext_in;
2414
 
2415
 
2416
      if (SC_IS_UNDEF (ext_in->asym.sc) || ext_in->asym.sc == scNil)
2417
        continue;
2418
 
2419
 
2420
      /* Pass 3 over files, over local syms: fill in static symbols */
2421
      name = debug_info->ssext + ext_in->asym.iss;
2422
 
2423
      /* Process ECOFF Symbol Types and Storage Classes */
2424
      switch (ext_in->asym.st)
2425
        {
2426
        case stProc:
2427
          /* Beginnning of Procedure */
2428
          svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2429
          break;
2430
        case stStaticProc:
2431
          /* Load time only static procs */
2432
          ms_type = mst_file_text;
2433
          svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2434
          break;
2435
        case stGlobal:
2436
          /* External symbol */
2437
          if (SC_IS_COMMON (ext_in->asym.sc))
2438
            {
2439
              /* The value of a common symbol is its size, not its address.
2440
                 Ignore it.  */
2441
              continue;
2442
            }
2443
          else if (SC_IS_DATA (ext_in->asym.sc))
2444
            {
2445
              ms_type = mst_data;
2446
              svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
2447
            }
2448
          else if (SC_IS_BSS (ext_in->asym.sc))
2449
            {
2450
              ms_type = mst_bss;
2451
              svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
2452
            }
2453
          else if (SC_IS_SBSS (ext_in->asym.sc))
2454
            {
2455
              ms_type = mst_bss;
2456
              svalue += ANOFFSET (objfile->section_offsets,
2457
                                  get_section_index (objfile, ".sbss"));
2458
            }
2459
          else
2460
            ms_type = mst_abs;
2461
          break;
2462
        case stLabel:
2463
          /* Label */
2464
 
2465
          /* On certain platforms, some extra label symbols can be
2466
             generated by the linker. One possible usage for this kind
2467
             of symbols is to represent the address of the begining of a
2468
             given section. For instance, on Tru64 5.1, the address of
2469
             the _ftext label is the start address of the .text section.
2470
 
2471
             The storage class of these symbols is usually directly
2472
             related to the section to which the symbol refers. For
2473
             instance, on Tru64 5.1, the storage class for the _fdata
2474
             label is scData, refering to the .data section.
2475
 
2476
             It is actually possible that the section associated to the
2477
             storage class of the label does not exist. On True64 5.1
2478
             for instance, the libm.so shared library does not contain
2479
             any .data section, although it contains a _fpdata label
2480
             which storage class is scData... Since these symbols are
2481
             usually useless for the debugger user anyway, we just
2482
             discard these symbols.
2483
           */
2484
 
2485
          if (SC_IS_TEXT (ext_in->asym.sc))
2486
            {
2487
              if (objfile->sect_index_text == -1)
2488
                continue;
2489
 
2490
              ms_type = mst_file_text;
2491
              svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2492
            }
2493
          else if (SC_IS_DATA (ext_in->asym.sc))
2494
            {
2495
              if (objfile->sect_index_data == -1)
2496
                continue;
2497
 
2498
              ms_type = mst_file_data;
2499
              svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
2500
            }
2501
          else if (SC_IS_BSS (ext_in->asym.sc))
2502
            {
2503
              if (objfile->sect_index_bss == -1)
2504
                continue;
2505
 
2506
              ms_type = mst_file_bss;
2507
              svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
2508
            }
2509
          else if (SC_IS_SBSS (ext_in->asym.sc))
2510
            {
2511
              const int sbss_sect_index = get_section_index (objfile, ".sbss");
2512
 
2513
              if (sbss_sect_index == -1)
2514
                continue;
2515
 
2516
              ms_type = mst_file_bss;
2517
              svalue += ANOFFSET (objfile->section_offsets, sbss_sect_index);
2518
            }
2519
          else
2520
            ms_type = mst_abs;
2521
          break;
2522
        case stLocal:
2523
        case stNil:
2524
          /* The alpha has the section start addresses in stLocal symbols
2525
             whose name starts with a `.'. Skip those but complain for all
2526
             other stLocal symbols.
2527
             Irix6 puts the section start addresses in stNil symbols, skip
2528
             those too. */
2529
          if (name[0] == '.')
2530
            continue;
2531
          /* Fall through.  */
2532
        default:
2533
          ms_type = mst_unknown;
2534
          unknown_ext_complaint (name);
2535
        }
2536
      if (!ECOFF_IN_ELF (cur_bfd))
2537
        record_minimal_symbol (name, svalue, ms_type, ext_in->asym.sc,
2538
                               objfile);
2539
    }
2540
 
2541
  /* Pass 3 over files, over local syms: fill in static symbols */
2542
  for (f_idx = 0; f_idx < hdr->ifdMax; f_idx++)
2543
    {
2544
      struct partial_symtab *save_pst;
2545
      EXTR *ext_ptr;
2546
      CORE_ADDR textlow;
2547
 
2548
      cur_fdr = fh = debug_info->fdr + f_idx;
2549
 
2550
      if (fh->csym == 0)
2551
        {
2552
          fdr_to_pst[f_idx].pst = NULL;
2553
          continue;
2554
        }
2555
 
2556
      /* Determine the start address for this object file from the
2557
         file header and relocate it, except for Irix 5.2 zero fh->adr.  */
2558
      if (fh->cpd)
2559
        {
2560
          textlow = fh->adr;
2561
          if (relocatable || textlow != 0)
2562
            textlow += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2563
        }
2564
      else
2565
        textlow = 0;
2566
      pst = start_psymtab_common (objfile, objfile->section_offsets,
2567
                                  fdr_name (fh),
2568
                                  textlow,
2569
                                  objfile->global_psymbols.next,
2570
                                  objfile->static_psymbols.next);
2571
      pst->read_symtab_private = ((char *)
2572
                                  obstack_alloc (&objfile->objfile_obstack,
2573
                                                 sizeof (struct symloc)));
2574
      memset (pst->read_symtab_private, 0, sizeof (struct symloc));
2575
 
2576
      save_pst = pst;
2577
      FDR_IDX (pst) = f_idx;
2578
      CUR_BFD (pst) = cur_bfd;
2579
      DEBUG_SWAP (pst) = debug_swap;
2580
      DEBUG_INFO (pst) = debug_info;
2581
      PENDING_LIST (pst) = pending_list;
2582
 
2583
      /* The way to turn this into a symtab is to call... */
2584
      pst->read_symtab = mdebug_psymtab_to_symtab;
2585
 
2586
      /* Set up language for the pst.
2587
         The language from the FDR is used if it is unambigious (e.g. cfront
2588
         with native cc and g++ will set the language to C).
2589
         Otherwise we have to deduce the language from the filename.
2590
         Native ecoff has every header file in a separate FDR, so
2591
         deduce_language_from_filename will return language_unknown for
2592
         a header file, which is not what we want.
2593
         But the FDRs for the header files are after the FDR for the source
2594
         file, so we can assign the language of the source file to the
2595
         following header files. Then we save the language in the private
2596
         pst data so that we can reuse it when building symtabs.  */
2597
      prev_language = psymtab_language;
2598
 
2599
      switch (fh->lang)
2600
        {
2601
        case langCplusplusV2:
2602
          psymtab_language = language_cplus;
2603
          break;
2604
        default:
2605
          psymtab_language = deduce_language_from_filename (fdr_name (fh));
2606
          break;
2607
        }
2608
      if (psymtab_language == language_unknown)
2609
        psymtab_language = prev_language;
2610
      PST_PRIVATE (pst)->pst_language = psymtab_language;
2611
 
2612
      pst->texthigh = pst->textlow;
2613
 
2614
      /* For stabs-in-ecoff files, the second symbol must be @stab.
2615
         This symbol is emitted by mips-tfile to signal that the
2616
         current object file uses encapsulated stabs instead of mips
2617
         ecoff for local symbols.  (It is the second symbol because
2618
         the first symbol is the stFile used to signal the start of a
2619
         file). */
2620
      processing_gcc_compilation = 0;
2621
      if (fh->csym >= 2)
2622
        {
2623
          (*swap_sym_in) (cur_bfd,
2624
                          ((char *) debug_info->external_sym
2625
                           + (fh->isymBase + 1) * external_sym_size),
2626
                          &sh);
2627
          if (strcmp (debug_info->ss + fh->issBase + sh.iss,
2628
                      stabs_symbol) == 0)
2629
            processing_gcc_compilation = 2;
2630
        }
2631
 
2632
      if (processing_gcc_compilation != 0)
2633
        {
2634
          for (cur_sdx = 2; cur_sdx < fh->csym; cur_sdx++)
2635
            {
2636
              int type_code;
2637
              char *namestring;
2638
 
2639
              (*swap_sym_in) (cur_bfd,
2640
                              (((char *) debug_info->external_sym)
2641
                            + (fh->isymBase + cur_sdx) * external_sym_size),
2642
                              &sh);
2643
              type_code = ECOFF_UNMARK_STAB (sh.index);
2644
              if (!ECOFF_IS_STAB (&sh))
2645
                {
2646
                  if (sh.st == stProc || sh.st == stStaticProc)
2647
                    {
2648
                      CORE_ADDR procaddr;
2649
                      long isym;
2650
 
2651
                      sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2652
                      if (sh.st == stStaticProc)
2653
                        {
2654
                          namestring = debug_info->ss + fh->issBase + sh.iss;
2655
                          record_minimal_symbol (namestring, sh.value,
2656
                                                 mst_file_text, sh.sc,
2657
                                                 objfile);
2658
                        }
2659
                      procaddr = sh.value;
2660
 
2661
                      isym = AUX_GET_ISYM (fh->fBigendian,
2662
                                           (debug_info->external_aux
2663
                                            + fh->iauxBase
2664
                                            + sh.index));
2665
                      (*swap_sym_in) (cur_bfd,
2666
                                      ((char *) debug_info->external_sym
2667
                                       + ((fh->isymBase + isym - 1)
2668
                                          * external_sym_size)),
2669
                                      &sh);
2670
                      if (sh.st == stEnd)
2671
                        {
2672
                          CORE_ADDR high = procaddr + sh.value;
2673
 
2674
                          /* Kludge for Irix 5.2 zero fh->adr.  */
2675
                          if (!relocatable
2676
                          && (pst->textlow == 0 || procaddr < pst->textlow))
2677
                            pst->textlow = procaddr;
2678
                          if (high > pst->texthigh)
2679
                            pst->texthigh = high;
2680
                        }
2681
                    }
2682
                  else if (sh.st == stStatic)
2683
                    {
2684
                      switch (sh.sc)
2685
                        {
2686
                        case scUndefined:
2687
                        case scSUndefined:
2688
                        case scNil:
2689
                        case scAbs:
2690
                          break;
2691
 
2692
                        case scData:
2693
                        case scSData:
2694
                        case scRData:
2695
                        case scPData:
2696
                        case scXData:
2697
                          namestring = debug_info->ss + fh->issBase + sh.iss;
2698
                          sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
2699
                          record_minimal_symbol (namestring, sh.value,
2700
                                                 mst_file_data, sh.sc,
2701
                                                 objfile);
2702
                          break;
2703
 
2704
                        default:
2705
                          /* FIXME!  Shouldn't this use cases for bss,
2706
                             then have the default be abs? */
2707
                          namestring = debug_info->ss + fh->issBase + sh.iss;
2708
                          sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
2709
                          record_minimal_symbol (namestring, sh.value,
2710
                                                 mst_file_bss, sh.sc,
2711
                                                 objfile);
2712
                          break;
2713
                        }
2714
                    }
2715
                  continue;
2716
                }
2717
              /* Handle stabs continuation */
2718
              {
2719
                char *stabstring = debug_info->ss + fh->issBase + sh.iss;
2720
                int len = strlen (stabstring);
2721
                while (stabstring[len - 1] == '\\')
2722
                  {
2723
                    SYMR sh2;
2724
                    char *stabstring1 = stabstring;
2725
                    char *stabstring2;
2726
                    int len2;
2727
 
2728
                    /* Ignore continuation char from 1st string */
2729
                    len--;
2730
 
2731
                    /* Read next stabstring */
2732
                    cur_sdx++;
2733
                    (*swap_sym_in) (cur_bfd,
2734
                                    (((char *) debug_info->external_sym)
2735
                                     + (fh->isymBase + cur_sdx)
2736
                                     * external_sym_size),
2737
                                    &sh2);
2738
                    stabstring2 = debug_info->ss + fh->issBase + sh2.iss;
2739
                    len2 = strlen (stabstring2);
2740
 
2741
                    /* Concatinate stabstring2 with stabstring1 */
2742
                    if (stabstring
2743
                     && stabstring != debug_info->ss + fh->issBase + sh.iss)
2744
                      stabstring = xrealloc (stabstring, len + len2 + 1);
2745
                    else
2746
                      {
2747
                        stabstring = xmalloc (len + len2 + 1);
2748
                        strcpy (stabstring, stabstring1);
2749
                      }
2750
                    strcpy (stabstring + len, stabstring2);
2751
                    len += len2;
2752
                  }
2753
 
2754
                switch (type_code)
2755
                  {
2756
                    char *p;
2757
                    /*
2758
                     * Standard, external, non-debugger, symbols
2759
                     */
2760
 
2761
                  case N_TEXT | N_EXT:
2762
                  case N_NBTEXT | N_EXT:
2763
                    sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2764
                    goto record_it;
2765
 
2766
                  case N_DATA | N_EXT:
2767
                  case N_NBDATA | N_EXT:
2768
                    sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
2769
                    goto record_it;
2770
 
2771
                  case N_BSS:
2772
                  case N_BSS | N_EXT:
2773
                  case N_NBBSS | N_EXT:
2774
                  case N_SETV | N_EXT:          /* FIXME, is this in BSS? */
2775
                    sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
2776
                    goto record_it;
2777
 
2778
                  case N_ABS | N_EXT:
2779
                  record_it:
2780
                  continue;
2781
 
2782
                  /* Standard, local, non-debugger, symbols */
2783
 
2784
                  case N_NBTEXT:
2785
 
2786
                    /* We need to be able to deal with both N_FN or N_TEXT,
2787
                       because we have no way of knowing whether the sys-supplied ld
2788
                       or GNU ld was used to make the executable.  Sequents throw
2789
                       in another wrinkle -- they renumbered N_FN.  */
2790
 
2791
                  case N_FN:
2792
                  case N_FN_SEQ:
2793
                  case N_TEXT:
2794
                    continue;
2795
 
2796
                  case N_DATA:
2797
                    sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
2798
                    goto record_it;
2799
 
2800
                  case N_UNDF | N_EXT:
2801
                    continue;                   /* Just undefined, not COMMON */
2802
 
2803
                  case N_UNDF:
2804
                    continue;
2805
 
2806
                    /* Lots of symbol types we can just ignore.  */
2807
 
2808
                  case N_ABS:
2809
                  case N_NBDATA:
2810
                  case N_NBBSS:
2811
                    continue;
2812
 
2813
                    /* Keep going . . . */
2814
 
2815
                    /*
2816
                     * Special symbol types for GNU
2817
                     */
2818
                  case N_INDR:
2819
                  case N_INDR | N_EXT:
2820
                  case N_SETA:
2821
                  case N_SETA | N_EXT:
2822
                  case N_SETT:
2823
                  case N_SETT | N_EXT:
2824
                  case N_SETD:
2825
                  case N_SETD | N_EXT:
2826
                  case N_SETB:
2827
                  case N_SETB | N_EXT:
2828
                  case N_SETV:
2829
                    continue;
2830
 
2831
                    /*
2832
                     * Debugger symbols
2833
                     */
2834
 
2835
                  case N_SO:
2836
                    {
2837
                      CORE_ADDR valu;
2838
                      static int prev_so_symnum = -10;
2839
                      static int first_so_symnum;
2840
                      char *p;
2841
                      int prev_textlow_not_set;
2842
 
2843
                      valu = sh.value + ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2844
 
2845
                      prev_textlow_not_set = textlow_not_set;
2846
 
2847
                      /* A zero value is probably an indication for the SunPRO 3.0
2848
                         compiler. end_psymtab explicitly tests for zero, so
2849
                         don't relocate it.  */
2850
 
2851
                      if (sh.value == 0
2852
                          && gdbarch_sofun_address_maybe_missing
2853
                              (current_gdbarch))
2854
                        {
2855
                          textlow_not_set = 1;
2856
                          valu = 0;
2857
                        }
2858
                      else
2859
                        textlow_not_set = 0;
2860
 
2861
                      past_first_source_file = 1;
2862
 
2863
                      if (prev_so_symnum != symnum - 1)
2864
                        {                       /* Here if prev stab wasn't N_SO */
2865
                          first_so_symnum = symnum;
2866
 
2867
                          if (pst)
2868
                            {
2869
                              pst = (struct partial_symtab *) 0;
2870
                              includes_used = 0;
2871
                              dependencies_used = 0;
2872
                            }
2873
                        }
2874
 
2875
                      prev_so_symnum = symnum;
2876
 
2877
                      /* End the current partial symtab and start a new one */
2878
 
2879
                      /* SET_NAMESTRING ();*/
2880
                      namestring = stabstring;
2881
 
2882
                      /* Null name means end of .o file.  Don't start a new one. */
2883
                      if (*namestring == '\000')
2884
                        continue;
2885
 
2886
                      /* Some compilers (including gcc) emit a pair of initial N_SOs.
2887
                         The first one is a directory name; the second the file name.
2888
                         If pst exists, is empty, and has a filename ending in '/',
2889
                         we assume the previous N_SO was a directory name. */
2890
 
2891
                      p = strrchr (namestring, '/');
2892
                      if (p && *(p + 1) == '\000')
2893
                        continue;               /* Simply ignore directory name SOs */
2894
 
2895
                      /* Some other compilers (C++ ones in particular) emit useless
2896
                         SOs for non-existant .c files.  We ignore all subsequent SOs that
2897
                         immediately follow the first.  */
2898
 
2899
                      if (!pst)
2900
                        pst = save_pst;
2901
                      continue;
2902
                    }
2903
 
2904
                  case N_BINCL:
2905
                    continue;
2906
 
2907
                  case N_SOL:
2908
                    {
2909
                      enum language tmp_language;
2910
                      /* Mark down an include file in the current psymtab */
2911
 
2912
                      /* SET_NAMESTRING ();*/
2913
                      namestring = stabstring;
2914
 
2915
                      tmp_language = deduce_language_from_filename (namestring);
2916
 
2917
                      /* Only change the psymtab's language if we've learned
2918
                         something useful (eg. tmp_language is not language_unknown).
2919
                         In addition, to match what start_subfile does, never change
2920
                         from C++ to C.  */
2921
                      if (tmp_language != language_unknown
2922
                          && (tmp_language != language_c
2923
                              || psymtab_language != language_cplus))
2924
                        psymtab_language = tmp_language;
2925
 
2926
                      /* In C++, one may expect the same filename to come round many
2927
                         times, when code is coming alternately from the main file
2928
                         and from inline functions in other files. So I check to see
2929
                         if this is a file we've seen before -- either the main
2930
                         source file, or a previously included file.
2931
 
2932
                         This seems to be a lot of time to be spending on N_SOL, but
2933
                         things like "break c-exp.y:435" need to work (I
2934
                         suppose the psymtab_include_list could be hashed or put
2935
                         in a binary tree, if profiling shows this is a major hog).  */
2936
                      if (pst && strcmp (namestring, pst->filename) == 0)
2937
                        continue;
2938
                      {
2939
                        int i;
2940
                        for (i = 0; i < includes_used; i++)
2941
                          if (strcmp (namestring,
2942
                                      psymtab_include_list[i]) == 0)
2943
                            {
2944
                              i = -1;
2945
                              break;
2946
                            }
2947
                        if (i == -1)
2948
                          continue;
2949
                      }
2950
 
2951
                      psymtab_include_list[includes_used++] = namestring;
2952
                      if (includes_used >= includes_allocated)
2953
                        {
2954
                          char **orig = psymtab_include_list;
2955
 
2956
                          psymtab_include_list = (char **)
2957
                            alloca ((includes_allocated *= 2) *
2958
                                    sizeof (char *));
2959
                          memcpy (psymtab_include_list, orig,
2960
                                  includes_used * sizeof (char *));
2961
                        }
2962
                      continue;
2963
                    }
2964
                  case N_LSYM:                  /* Typedef or automatic variable. */
2965
                  case N_STSYM:         /* Data seg var -- static  */
2966
                  case N_LCSYM:         /* BSS      "  */
2967
                  case N_ROSYM:         /* Read-only data seg var -- static.  */
2968
                  case N_NBSTS:         /* Gould nobase.  */
2969
                  case N_NBLCS:         /* symbols.  */
2970
                  case N_FUN:
2971
                  case N_GSYM:                  /* Global (extern) variable; can be
2972
                                                   data or bss (sigh FIXME).  */
2973
 
2974
                    /* Following may probably be ignored; I'll leave them here
2975
                       for now (until I do Pascal and Modula 2 extensions).  */
2976
 
2977
                  case N_PC:                    /* I may or may not need this; I
2978
                                                   suspect not.  */
2979
                  case N_M2C:                   /* I suspect that I can ignore this here. */
2980
                  case N_SCOPE:         /* Same.   */
2981
 
2982
                    /*    SET_NAMESTRING ();*/
2983
                    namestring = stabstring;
2984
                    p = (char *) strchr (namestring, ':');
2985
                    if (!p)
2986
                      continue;                 /* Not a debugging symbol.   */
2987
 
2988
 
2989
 
2990
                    /* Main processing section for debugging symbols which
2991
                       the initial read through the symbol tables needs to worry
2992
                       about.  If we reach this point, the symbol which we are
2993
                       considering is definitely one we are interested in.
2994
                       p must also contain the (valid) index into the namestring
2995
                       which indicates the debugging type symbol.  */
2996
 
2997
                    switch (p[1])
2998
                      {
2999
                      case 'S':
3000
                        sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
3001
 
3002
                        if (gdbarch_static_transform_name_p (current_gdbarch))
3003
                          namestring = gdbarch_static_transform_name
3004
                                         (current_gdbarch, namestring);
3005
 
3006
                        add_psymbol_to_list (namestring, p - namestring,
3007
                                             VAR_DOMAIN, LOC_STATIC,
3008
                                             &objfile->static_psymbols,
3009
                                             0, sh.value,
3010
                                             psymtab_language, objfile);
3011
                        continue;
3012
                      case 'G':
3013
                        sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
3014
                        /* The addresses in these entries are reported to be
3015
                           wrong.  See the code that reads 'G's for symtabs. */
3016
                        add_psymbol_to_list (namestring, p - namestring,
3017
                                             VAR_DOMAIN, LOC_STATIC,
3018
                                             &objfile->global_psymbols,
3019
                                             0, sh.value,
3020
                                             psymtab_language, objfile);
3021
                        continue;
3022
 
3023
                      case 'T':
3024
                        /* When a 'T' entry is defining an anonymous enum, it
3025
                           may have a name which is the empty string, or a
3026
                           single space.  Since they're not really defining a
3027
                           symbol, those shouldn't go in the partial symbol
3028
                           table.  We do pick up the elements of such enums at
3029
                           'check_enum:', below.  */
3030
                        if (p >= namestring + 2
3031
                            || (p == namestring + 1
3032
                                && namestring[0] != ' '))
3033
                          {
3034
                            add_psymbol_to_list (namestring, p - namestring,
3035
                                                 STRUCT_DOMAIN, LOC_TYPEDEF,
3036
                                                 &objfile->static_psymbols,
3037
                                                 sh.value, 0,
3038
                                                 psymtab_language, objfile);
3039
                            if (p[2] == 't')
3040
                              {
3041
                                /* Also a typedef with the same name.  */
3042
                                add_psymbol_to_list (namestring, p - namestring,
3043
                                                     VAR_DOMAIN, LOC_TYPEDEF,
3044
                                                     &objfile->static_psymbols,
3045
                                                     sh.value, 0,
3046
                                                     psymtab_language, objfile);
3047
                                p += 1;
3048
                              }
3049
                          }
3050
                        goto check_enum;
3051
                      case 't':
3052
                        if (p != namestring)    /* a name is there, not just :T... */
3053
                          {
3054
                            add_psymbol_to_list (namestring, p - namestring,
3055
                                                 VAR_DOMAIN, LOC_TYPEDEF,
3056
                                                 &objfile->static_psymbols,
3057
                                                 sh.value, 0,
3058
                                                 psymtab_language, objfile);
3059
                          }
3060
                      check_enum:
3061
                        /* If this is an enumerated type, we need to
3062
                           add all the enum constants to the partial symbol
3063
                           table.  This does not cover enums without names, e.g.
3064
                           "enum {a, b} c;" in C, but fortunately those are
3065
                           rare.  There is no way for GDB to find those from the
3066
                           enum type without spending too much time on it.  Thus
3067
                           to solve this problem, the compiler needs to put out the
3068
                           enum in a nameless type.  GCC2 does this.  */
3069
 
3070
                        /* We are looking for something of the form
3071
                           <name> ":" ("t" | "T") [<number> "="] "e"
3072
                           {<constant> ":" <value> ","} ";".  */
3073
 
3074
                        /* Skip over the colon and the 't' or 'T'.  */
3075
                        p += 2;
3076
                        /* This type may be given a number.  Also, numbers can come
3077
                           in pairs like (0,26).  Skip over it.  */
3078
                        while ((*p >= '0' && *p <= '9')
3079
                               || *p == '(' || *p == ',' || *p == ')'
3080
                               || *p == '=')
3081
                          p++;
3082
 
3083
                        if (*p++ == 'e')
3084
                          {
3085
                            /* The aix4 compiler emits extra crud before the members.  */
3086
                            if (*p == '-')
3087
                              {
3088
                                /* Skip over the type (?).  */
3089
                                while (*p != ':')
3090
                                  p++;
3091
 
3092
                                /* Skip over the colon.  */
3093
                                p++;
3094
                              }
3095
 
3096
                            /* We have found an enumerated type.  */
3097
                            /* According to comments in read_enum_type
3098
                               a comma could end it instead of a semicolon.
3099
                               I don't know where that happens.
3100
                               Accept either.  */
3101
                            while (*p && *p != ';' && *p != ',')
3102
                              {
3103
                                char *q;
3104
 
3105
                                /* Check for and handle cretinous dbx symbol name
3106
                                   continuation!  */
3107
                                if (*p == '\\' || (*p == '?' && p[1] == '\0'))
3108
                                  p = next_symbol_text (objfile);
3109
 
3110
                                /* Point to the character after the name
3111
                                   of the enum constant.  */
3112
                                for (q = p; *q && *q != ':'; q++)
3113
                                  ;
3114
                                /* Note that the value doesn't matter for
3115
                                   enum constants in psymtabs, just in symtabs.  */
3116
                                add_psymbol_to_list (p, q - p,
3117
                                                     VAR_DOMAIN, LOC_CONST,
3118
                                                     &objfile->static_psymbols, 0,
3119
                                                     0, psymtab_language, objfile);
3120
                                /* Point past the name.  */
3121
                                p = q;
3122
                                /* Skip over the value.  */
3123
                                while (*p && *p != ',')
3124
                                  p++;
3125
                                /* Advance past the comma.  */
3126
                                if (*p)
3127
                                  p++;
3128
                              }
3129
                          }
3130
                        continue;
3131
                      case 'c':
3132
                        /* Constant, e.g. from "const" in Pascal.  */
3133
                        add_psymbol_to_list (namestring, p - namestring,
3134
                                             VAR_DOMAIN, LOC_CONST,
3135
                                             &objfile->static_psymbols, sh.value,
3136
                                             0, psymtab_language, objfile);
3137
                        continue;
3138
 
3139
                      case 'f':
3140
                        if (! pst)
3141
                          {
3142
                            int name_len = p - namestring;
3143
                            char *name = xmalloc (name_len + 1);
3144
                            memcpy (name, namestring, name_len);
3145
                            name[name_len] = '\0';
3146
                            function_outside_compilation_unit_complaint (name);
3147
                            xfree (name);
3148
                          }
3149
                        sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
3150
                        add_psymbol_to_list (namestring, p - namestring,
3151
                                             VAR_DOMAIN, LOC_BLOCK,
3152
                                             &objfile->static_psymbols,
3153
                                             0, sh.value,
3154
                                             psymtab_language, objfile);
3155
                        continue;
3156
 
3157
                        /* Global functions were ignored here, but now they
3158
                           are put into the global psymtab like one would expect.
3159
                           They're also in the minimal symbol table.  */
3160
                      case 'F':
3161
                        if (! pst)
3162
                          {
3163
                            int name_len = p - namestring;
3164
                            char *name = xmalloc (name_len + 1);
3165
                            memcpy (name, namestring, name_len);
3166
                            name[name_len] = '\0';
3167
                            function_outside_compilation_unit_complaint (name);
3168
                            xfree (name);
3169
                          }
3170
                        sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
3171
                        add_psymbol_to_list (namestring, p - namestring,
3172
                                             VAR_DOMAIN, LOC_BLOCK,
3173
                                             &objfile->global_psymbols,
3174
                                             0, sh.value,
3175
                                             psymtab_language, objfile);
3176
                        continue;
3177
 
3178
                        /* Two things show up here (hopefully); static symbols of
3179
                           local scope (static used inside braces) or extensions
3180
                           of structure symbols.  We can ignore both.  */
3181
                      case 'V':
3182
                      case '(':
3183
                      case '0':
3184
                      case '1':
3185
                      case '2':
3186
                      case '3':
3187
                      case '4':
3188
                      case '5':
3189
                      case '6':
3190
                      case '7':
3191
                      case '8':
3192
                      case '9':
3193
                      case '-':
3194
                      case '#':         /* for symbol identification (used in live ranges) */
3195
                        continue;
3196
 
3197
                      case ':':
3198
                        /* It is a C++ nested symbol.  We don't need to record it
3199
                           (I don't think); if we try to look up foo::bar::baz,
3200
                           then symbols for the symtab containing foo should get
3201
                           read in, I think.  */
3202
                        /* Someone says sun cc puts out symbols like
3203
                           /foo/baz/maclib::/usr/local/bin/maclib,
3204
                           which would get here with a symbol type of ':'.  */
3205
                        continue;
3206
 
3207
                      default:
3208
                        /* Unexpected symbol descriptor.  The second and subsequent stabs
3209
                           of a continued stab can show up here.  The question is
3210
                           whether they ever can mimic a normal stab--it would be
3211
                           nice if not, since we certainly don't want to spend the
3212
                           time searching to the end of every string looking for
3213
                           a backslash.  */
3214
 
3215
                        complaint (&symfile_complaints,
3216
                                   _("unknown symbol descriptor `%c'"), p[1]);
3217
 
3218
                        /* Ignore it; perhaps it is an extension that we don't
3219
                           know about.  */
3220
                        continue;
3221
                      }
3222
 
3223
                  case N_EXCL:
3224
                    continue;
3225
 
3226
                  case N_ENDM:
3227
                    /* Solaris 2 end of module, finish current partial
3228
                       symbol table.  END_PSYMTAB will set
3229
                       pst->texthigh to the proper value, which is
3230
                       necessary if a module compiled without
3231
                       debugging info follows this module.  */
3232
                    if (pst
3233
                        && gdbarch_sofun_address_maybe_missing
3234
                             (current_gdbarch))
3235
                      {
3236
                        pst = (struct partial_symtab *) 0;
3237
                        includes_used = 0;
3238
                        dependencies_used = 0;
3239
                      }
3240
                    continue;
3241
 
3242
                  case N_RBRAC:
3243
                    if (sh.value > save_pst->texthigh)
3244
                      save_pst->texthigh = sh.value;
3245
                    continue;
3246
                  case N_EINCL:
3247
                  case N_DSLINE:
3248
                  case N_BSLINE:
3249
                  case N_SSYM:                  /* Claim: Structure or union element.
3250
                                                   Hopefully, I can ignore this.  */
3251
                  case N_ENTRY:         /* Alternate entry point; can ignore. */
3252
                  case N_MAIN:                  /* Can definitely ignore this.   */
3253
                  case N_CATCH:         /* These are GNU C++ extensions */
3254
                  case N_EHDECL:                /* that can safely be ignored here. */
3255
                  case N_LENG:
3256
                  case N_BCOMM:
3257
                  case N_ECOMM:
3258
                  case N_ECOML:
3259
                  case N_FNAME:
3260
                  case N_SLINE:
3261
                  case N_RSYM:
3262
                  case N_PSYM:
3263
                  case N_LBRAC:
3264
                  case N_NSYMS:         /* Ultrix 4.0: symbol count */
3265
                  case N_DEFD:                  /* GNU Modula-2 */
3266
                  case N_ALIAS:         /* SunPro F77: alias name, ignore for now.  */
3267
 
3268
                  case N_OBJ:                   /* useless types from Solaris */
3269
                  case N_OPT:
3270
                    /* These symbols aren't interesting; don't worry about them */
3271
 
3272
                    continue;
3273
 
3274
                  default:
3275
                    /* If we haven't found it yet, ignore it.  It's probably some
3276
                       new type we don't know about yet.  */
3277
                    complaint (&symfile_complaints, _("unknown symbol type %s"),
3278
                               hex_string (type_code)); /*CUR_SYMBOL_TYPE*/
3279
                    continue;
3280
                  }
3281
                if (stabstring
3282
                    && stabstring != debug_info->ss + fh->issBase + sh.iss)
3283
                  xfree (stabstring);
3284
              }
3285
              /* end - Handle continuation */
3286
            }
3287
        }
3288
      else
3289
        {
3290
          for (cur_sdx = 0; cur_sdx < fh->csym;)
3291
            {
3292
              char *name;
3293
              enum address_class class;
3294
 
3295
              (*swap_sym_in) (cur_bfd,
3296
                              ((char *) debug_info->external_sym
3297
                               + ((fh->isymBase + cur_sdx)
3298
                                  * external_sym_size)),
3299
                              &sh);
3300
 
3301
              if (ECOFF_IS_STAB (&sh))
3302
                {
3303
                  cur_sdx++;
3304
                  continue;
3305
                }
3306
 
3307
              /* Non absolute static symbols go into the minimal table.  */
3308
              if (SC_IS_UNDEF (sh.sc) || sh.sc == scNil
3309
                  || (sh.index == indexNil
3310
                      && (sh.st != stStatic || sh.sc == scAbs)))
3311
                {
3312
                  /* FIXME, premature? */
3313
                  cur_sdx++;
3314
                  continue;
3315
                }
3316
 
3317
              name = debug_info->ss + fh->issBase + sh.iss;
3318
 
3319
              switch (sh.sc)
3320
                {
3321
                case scText:
3322
                case scRConst:
3323
                  /* The value of a stEnd symbol is the displacement from the
3324
                     corresponding start symbol value, do not relocate it.  */
3325
                  if (sh.st != stEnd)
3326
                    sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
3327
                  break;
3328
                case scData:
3329
                case scSData:
3330
                case scRData:
3331
                case scPData:
3332
                case scXData:
3333
                  sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
3334
                  break;
3335
                case scBss:
3336
                case scSBss:
3337
                  sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
3338
                  break;
3339
                }
3340
 
3341
              switch (sh.st)
3342
                {
3343
                  CORE_ADDR high;
3344
                  CORE_ADDR procaddr;
3345
                  int new_sdx;
3346
 
3347
                case stStaticProc:
3348
                  prim_record_minimal_symbol_and_info (name, sh.value,
3349
                                                       mst_file_text, NULL,
3350
                                                       SECT_OFF_TEXT (objfile), NULL,
3351
                                                       objfile);
3352
 
3353
                  /* FALLTHROUGH */
3354
 
3355
                case stProc:
3356
                  /* Ignore all parameter symbol records.  */
3357
                  if (sh.index >= hdr->iauxMax)
3358
                    {
3359
                      /* Should not happen, but does when cross-compiling
3360
                         with the MIPS compiler.  FIXME -- pull later.  */
3361
                      index_complaint (name);
3362
                      new_sdx = cur_sdx + 1;    /* Don't skip at all */
3363
                    }
3364
                  else
3365
                    new_sdx = AUX_GET_ISYM (fh->fBigendian,
3366
                                            (debug_info->external_aux
3367
                                             + fh->iauxBase
3368
                                             + sh.index));
3369
 
3370
                  if (new_sdx <= cur_sdx)
3371
                    {
3372
                      /* This should not happen either... FIXME.  */
3373
                      complaint (&symfile_complaints,
3374
                                 _("bad proc end in aux found from symbol %s"),
3375
                                 name);
3376
                      new_sdx = cur_sdx + 1;    /* Don't skip backward */
3377
                    }
3378
 
3379
                  /* For stProc symbol records, we need to check the
3380
                     storage class as well, as only (stProc, scText)
3381
                     entries represent "real" procedures - See the
3382
                     Compaq document titled "Object File / Symbol Table
3383
                     Format Specification" for more information.  If the
3384
                     storage class is not scText, we discard the whole
3385
                     block of symbol records for this stProc.  */
3386
                  if (sh.st == stProc && sh.sc != scText)
3387
                    goto skip;
3388
 
3389
                  /* Usually there is a local and a global stProc symbol
3390
                     for a function. This means that the function name
3391
                     has already been entered into the mimimal symbol table
3392
                     while processing the global symbols in pass 2 above.
3393
                     One notable exception is the PROGRAM name from
3394
                     f77 compiled executables, it is only put out as
3395
                     local stProc symbol, and a global MAIN__ stProc symbol
3396
                     points to it.  It doesn't matter though, as gdb is
3397
                     still able to find the PROGRAM name via the partial
3398
                     symbol table, and the MAIN__ symbol via the minimal
3399
                     symbol table.  */
3400
                  if (sh.st == stProc)
3401
                    add_psymbol_to_list (name, strlen (name),
3402
                                         VAR_DOMAIN, LOC_BLOCK,
3403
                                         &objfile->global_psymbols,
3404
                                    0, sh.value, psymtab_language, objfile);
3405
                  else
3406
                    add_psymbol_to_list (name, strlen (name),
3407
                                         VAR_DOMAIN, LOC_BLOCK,
3408
                                         &objfile->static_psymbols,
3409
                                    0, sh.value, psymtab_language, objfile);
3410
 
3411
                  procaddr = sh.value;
3412
 
3413
                  cur_sdx = new_sdx;
3414
                  (*swap_sym_in) (cur_bfd,
3415
                                  ((char *) debug_info->external_sym
3416
                                   + ((fh->isymBase + cur_sdx - 1)
3417
                                      * external_sym_size)),
3418
                                  &sh);
3419
                  if (sh.st != stEnd)
3420
                    continue;
3421
 
3422
                  /* Kludge for Irix 5.2 zero fh->adr.  */
3423
                  if (!relocatable
3424
                      && (pst->textlow == 0 || procaddr < pst->textlow))
3425
                    pst->textlow = procaddr;
3426
 
3427
                  high = procaddr + sh.value;
3428
                  if (high > pst->texthigh)
3429
                    pst->texthigh = high;
3430
                  continue;
3431
 
3432
                case stStatic:  /* Variable */
3433
                  if (SC_IS_DATA (sh.sc))
3434
                    prim_record_minimal_symbol_and_info (name, sh.value,
3435
                                                         mst_file_data, NULL,
3436
                                                         SECT_OFF_DATA (objfile),
3437
                                                         NULL,
3438
                                                         objfile);
3439
                  else
3440
                    prim_record_minimal_symbol_and_info (name, sh.value,
3441
                                                         mst_file_bss, NULL,
3442
                                                         SECT_OFF_BSS (objfile),
3443
                                                         NULL,
3444
                                                         objfile);
3445
                  class = LOC_STATIC;
3446
                  break;
3447
 
3448
                case stIndirect:        /* Irix5 forward declaration */
3449
                  /* Skip forward declarations from Irix5 cc */
3450
                  goto skip;
3451
 
3452
                case stTypedef: /* Typedef */
3453
                  /* Skip typedefs for forward declarations and opaque
3454
                     structs from alpha and mips cc.  */
3455
                  if (sh.iss == 0 || has_opaque_xref (fh, &sh))
3456
                    goto skip;
3457
                  class = LOC_TYPEDEF;
3458
                  break;
3459
 
3460
                case stConstant:        /* Constant decl */
3461
                  class = LOC_CONST;
3462
                  break;
3463
 
3464
                case stUnion:
3465
                case stStruct:
3466
                case stEnum:
3467
                case stBlock:   /* { }, str, un, enum */
3468
                  /* Do not create a partial symbol for cc unnamed aggregates
3469
                     and gcc empty aggregates. */
3470
                  if ((sh.sc == scInfo
3471
                       || SC_IS_COMMON (sh.sc))
3472
                      && sh.iss != 0
3473
                      && sh.index != cur_sdx + 2)
3474
                    {
3475
                      add_psymbol_to_list (name, strlen (name),
3476
                                           STRUCT_DOMAIN, LOC_TYPEDEF,
3477
                                           &objfile->static_psymbols,
3478
                                           0, (CORE_ADDR) 0,
3479
                                           psymtab_language, objfile);
3480
                    }
3481
                  handle_psymbol_enumerators (objfile, fh, sh.st, sh.value);
3482
 
3483
                  /* Skip over the block */
3484
                  new_sdx = sh.index;
3485
                  if (new_sdx <= cur_sdx)
3486
                    {
3487
                      /* This happens with the Ultrix kernel. */
3488
                      complaint (&symfile_complaints,
3489
                                 _("bad aux index at block symbol %s"), name);
3490
                      new_sdx = cur_sdx + 1;    /* Don't skip backward */
3491
                    }
3492
                  cur_sdx = new_sdx;
3493
                  continue;
3494
 
3495
                case stFile:    /* File headers */
3496
                case stLabel:   /* Labels */
3497
                case stEnd:     /* Ends of files */
3498
                  goto skip;
3499
 
3500
                case stLocal:   /* Local variables */
3501
                  /* Normally these are skipped because we skip over
3502
                     all blocks we see.  However, these can occur
3503
                     as visible symbols in a .h file that contains code. */
3504
                  goto skip;
3505
 
3506
                default:
3507
                  /* Both complaints are valid:  one gives symbol name,
3508
                     the other the offending symbol type.  */
3509
                  complaint (&symfile_complaints, _("unknown local symbol %s"),
3510
                             name);
3511
                  complaint (&symfile_complaints, _("with type %d"), sh.st);
3512
                  cur_sdx++;
3513
                  continue;
3514
                }
3515
              /* Use this gdb symbol */
3516
              add_psymbol_to_list (name, strlen (name),
3517
                                   VAR_DOMAIN, class,
3518
                                   &objfile->static_psymbols,
3519
                                   0, sh.value, psymtab_language, objfile);
3520
            skip:
3521
              cur_sdx++;        /* Go to next file symbol */
3522
            }
3523
 
3524
          /* Now do enter the external symbols. */
3525
          ext_ptr = &extern_tab[fdr_to_pst[f_idx].globals_offset];
3526
          cur_sdx = fdr_to_pst[f_idx].n_globals;
3527
          PST_PRIVATE (save_pst)->extern_count = cur_sdx;
3528
          PST_PRIVATE (save_pst)->extern_tab = ext_ptr;
3529
          for (; --cur_sdx >= 0; ext_ptr++)
3530
            {
3531
              enum address_class class;
3532
              SYMR *psh;
3533
              char *name;
3534
              CORE_ADDR svalue;
3535
 
3536
              if (ext_ptr->ifd != f_idx)
3537
                internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
3538
              psh = &ext_ptr->asym;
3539
 
3540
              /* Do not add undefined symbols to the partial symbol table.  */
3541
              if (SC_IS_UNDEF (psh->sc) || psh->sc == scNil)
3542
                continue;
3543
 
3544
              svalue = psh->value;
3545
              switch (psh->sc)
3546
                {
3547
                case scText:
3548
                case scRConst:
3549
                  svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
3550
                  break;
3551
                case scData:
3552
                case scSData:
3553
                case scRData:
3554
                case scPData:
3555
                case scXData:
3556
                  svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
3557
                  break;
3558
                case scBss:
3559
                case scSBss:
3560
                  svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
3561
                  break;
3562
                }
3563
 
3564
              switch (psh->st)
3565
                {
3566
                case stNil:
3567
                  /* These are generated for static symbols in .o files,
3568
                     ignore them.  */
3569
                  continue;
3570
                case stProc:
3571
                case stStaticProc:
3572
                  /* External procedure symbols have been entered
3573
                     into the minimal symbol table in pass 2 above.
3574
                     Ignore them, as parse_external will ignore them too.  */
3575
                  continue;
3576
                case stLabel:
3577
                  class = LOC_LABEL;
3578
                  break;
3579
                default:
3580
                  unknown_ext_complaint (debug_info->ssext + psh->iss);
3581
                  /* Fall through, pretend it's global.  */
3582
                case stGlobal:
3583
                  /* Global common symbols are resolved by the runtime loader,
3584
                     ignore them.  */
3585
                  if (SC_IS_COMMON (psh->sc))
3586
                    continue;
3587
 
3588
                  class = LOC_STATIC;
3589
                  break;
3590
                }
3591
              name = debug_info->ssext + psh->iss;
3592
              add_psymbol_to_list (name, strlen (name),
3593
                                   VAR_DOMAIN, class,
3594
                                   &objfile->global_psymbols,
3595
                                   0, svalue,
3596
                                   psymtab_language, objfile);
3597
            }
3598
        }
3599
 
3600
      /* Link pst to FDR. end_psymtab returns NULL if the psymtab was
3601
         empty and put on the free list.  */
3602
      fdr_to_pst[f_idx].pst = end_psymtab (save_pst,
3603
                                        psymtab_include_list, includes_used,
3604
                                           -1, save_pst->texthigh,
3605
                       dependency_list, dependencies_used, textlow_not_set);
3606
      includes_used = 0;
3607
      dependencies_used = 0;
3608
 
3609
      /* The objfile has its functions reordered if this partial symbol
3610
         table overlaps any other partial symbol table.
3611
         We cannot assume a reordered objfile if a partial symbol table
3612
         is contained within another partial symbol table, as partial symbol
3613
         tables for include files with executable code are contained
3614
         within the partial symbol table for the including source file,
3615
         and we do not want to flag the objfile reordered for these cases.
3616
 
3617
         This strategy works well for Irix-5.2 shared libraries, but we
3618
         might have to use a more elaborate (and slower) algorithm for
3619
         other cases.  */
3620
      save_pst = fdr_to_pst[f_idx].pst;
3621
      if (save_pst != NULL
3622
          && save_pst->textlow != 0
3623
          && !(objfile->flags & OBJF_REORDERED))
3624
        {
3625
          ALL_OBJFILE_PSYMTABS (objfile, pst)
3626
          {
3627
            if (save_pst != pst
3628
                && save_pst->textlow >= pst->textlow
3629
                && save_pst->textlow < pst->texthigh
3630
                && save_pst->texthigh > pst->texthigh)
3631
              {
3632
                objfile->flags |= OBJF_REORDERED;
3633
                break;
3634
              }
3635
          }
3636
        }
3637
    }
3638
 
3639
  /* Now scan the FDRs for dependencies */
3640
  for (f_idx = 0; f_idx < hdr->ifdMax; f_idx++)
3641
    {
3642
      fh = f_idx + debug_info->fdr;
3643
      pst = fdr_to_pst[f_idx].pst;
3644
 
3645
      if (pst == (struct partial_symtab *) NULL)
3646
        continue;
3647
 
3648
      /* This should catch stabs-in-ecoff. */
3649
      if (fh->crfd <= 1)
3650
        continue;
3651
 
3652
      /* Skip the first file indirect entry as it is a self dependency
3653
         for source files or a reverse .h -> .c dependency for header files.  */
3654
      pst->number_of_dependencies = 0;
3655
      pst->dependencies =
3656
        ((struct partial_symtab **)
3657
         obstack_alloc (&objfile->objfile_obstack,
3658
                        ((fh->crfd - 1)
3659
                         * sizeof (struct partial_symtab *))));
3660
      for (s_idx = 1; s_idx < fh->crfd; s_idx++)
3661
        {
3662
          RFDT rh;
3663
 
3664
          (*swap_rfd_in) (cur_bfd,
3665
                          ((char *) debug_info->external_rfd
3666
                           + (fh->rfdBase + s_idx) * external_rfd_size),
3667
                          &rh);
3668
          if (rh < 0 || rh >= hdr->ifdMax)
3669
            {
3670
              complaint (&symfile_complaints, _("bad file number %ld"), rh);
3671
              continue;
3672
            }
3673
 
3674
          /* Skip self dependencies of header files.  */
3675
          if (rh == f_idx)
3676
            continue;
3677
 
3678
          /* Do not add to dependeny list if psymtab was empty.  */
3679
          if (fdr_to_pst[rh].pst == (struct partial_symtab *) NULL)
3680
            continue;
3681
          pst->dependencies[pst->number_of_dependencies++] = fdr_to_pst[rh].pst;
3682
        }
3683
    }
3684
 
3685
  /* Remove the dummy psymtab created for -O3 images above, if it is
3686
     still empty, to enable the detection of stripped executables.  */
3687
  if (objfile->psymtabs->next == NULL
3688
      && objfile->psymtabs->number_of_dependencies == 0
3689
      && objfile->psymtabs->n_global_syms == 0
3690
      && objfile->psymtabs->n_static_syms == 0)
3691
    objfile->psymtabs = NULL;
3692
  do_cleanups (old_chain);
3693
}
3694
 
3695
/* If the current psymbol has an enumerated type, we need to add
3696
   all the the enum constants to the partial symbol table.  */
3697
 
3698
static void
3699
handle_psymbol_enumerators (struct objfile *objfile, FDR *fh, int stype,
3700
                            CORE_ADDR svalue)
3701
{
3702
  const bfd_size_type external_sym_size = debug_swap->external_sym_size;
3703
  void (*const swap_sym_in) (bfd *, void *, SYMR *) = debug_swap->swap_sym_in;
3704
  char *ext_sym = ((char *) debug_info->external_sym
3705
                   + ((fh->isymBase + cur_sdx + 1) * external_sym_size));
3706
  SYMR sh;
3707
  TIR tir;
3708
 
3709
  switch (stype)
3710
    {
3711
    case stEnum:
3712
      break;
3713
 
3714
    case stBlock:
3715
      /* It is an enumerated type if the next symbol entry is a stMember
3716
         and its auxiliary index is indexNil or its auxiliary entry
3717
         is a plain btNil or btVoid.
3718
         Alpha cc -migrate enums are recognized by a zero index and
3719
         a zero symbol value.
3720
         DU 4.0 cc enums are recognized by a member type of btEnum without
3721
         qualifiers and a zero symbol value.  */
3722
      (*swap_sym_in) (cur_bfd, ext_sym, &sh);
3723
      if (sh.st != stMember)
3724
        return;
3725
 
3726
      if (sh.index == indexNil
3727
          || (sh.index == 0 && svalue == 0))
3728
        break;
3729
      (*debug_swap->swap_tir_in) (fh->fBigendian,
3730
                                  &(debug_info->external_aux
3731
                                    + fh->iauxBase + sh.index)->a_ti,
3732
                                  &tir);
3733
      if ((tir.bt != btNil
3734
           && tir.bt != btVoid
3735
           && (tir.bt != btEnum || svalue != 0))
3736
          || tir.tq0 != tqNil)
3737
        return;
3738
      break;
3739
 
3740
    default:
3741
      return;
3742
    }
3743
 
3744
  for (;;)
3745
    {
3746
      char *name;
3747
 
3748
      (*swap_sym_in) (cur_bfd, ext_sym, &sh);
3749
      if (sh.st != stMember)
3750
        break;
3751
      name = debug_info->ss + cur_fdr->issBase + sh.iss;
3752
 
3753
      /* Note that the value doesn't matter for enum constants
3754
         in psymtabs, just in symtabs.  */
3755
      add_psymbol_to_list (name, strlen (name),
3756
                           VAR_DOMAIN, LOC_CONST,
3757
                           &objfile->static_psymbols, 0,
3758
                           (CORE_ADDR) 0, psymtab_language, objfile);
3759
      ext_sym += external_sym_size;
3760
    }
3761
}
3762
 
3763
/* Get the next symbol.  OBJFILE is unused. */
3764
 
3765
static char *
3766
mdebug_next_symbol_text (struct objfile *objfile)
3767
{
3768
  SYMR sh;
3769
 
3770
  cur_sdx++;
3771
  (*debug_swap->swap_sym_in) (cur_bfd,
3772
                              ((char *) debug_info->external_sym
3773
                               + ((cur_fdr->isymBase + cur_sdx)
3774
                                  * debug_swap->external_sym_size)),
3775
                              &sh);
3776
  return debug_info->ss + cur_fdr->issBase + sh.iss;
3777
}
3778
 
3779
/* Ancillary function to psymtab_to_symtab().  Does all the work
3780
   for turning the partial symtab PST into a symtab, recurring
3781
   first on all dependent psymtabs.  The argument FILENAME is
3782
   only passed so we can see in debug stack traces what file
3783
   is being read.
3784
 
3785
   This function has a split personality, based on whether the
3786
   symbol table contains ordinary ecoff symbols, or stabs-in-ecoff.
3787
   The flow of control and even the memory allocation differs.  FIXME.  */
3788
 
3789
static void
3790
psymtab_to_symtab_1 (struct partial_symtab *pst, char *filename)
3791
{
3792
  bfd_size_type external_sym_size;
3793
  bfd_size_type external_pdr_size;
3794
  void (*swap_sym_in) (bfd *, void *, SYMR *);
3795
  void (*swap_pdr_in) (bfd *, void *, PDR *);
3796
  int i;
3797
  struct symtab *st = NULL;
3798
  FDR *fh;
3799
  struct linetable *lines;
3800
  CORE_ADDR lowest_pdr_addr = 0;
3801
  int last_symtab_ended = 0;
3802
 
3803
  if (pst->readin)
3804
    return;
3805
  pst->readin = 1;
3806
 
3807
  /* Read in all partial symbtabs on which this one is dependent.
3808
     NOTE that we do have circular dependencies, sigh.  We solved
3809
     that by setting pst->readin before this point.  */
3810
 
3811
  for (i = 0; i < pst->number_of_dependencies; i++)
3812
    if (!pst->dependencies[i]->readin)
3813
      {
3814
        /* Inform about additional files to be read in.  */
3815
        if (info_verbose)
3816
          {
3817
            fputs_filtered (" ", gdb_stdout);
3818
            wrap_here ("");
3819
            fputs_filtered ("and ", gdb_stdout);
3820
            wrap_here ("");
3821
            printf_filtered ("%s...",
3822
                             pst->dependencies[i]->filename);
3823
            wrap_here ("");     /* Flush output */
3824
            gdb_flush (gdb_stdout);
3825
          }
3826
        /* We only pass the filename for debug purposes */
3827
        psymtab_to_symtab_1 (pst->dependencies[i],
3828
                             pst->dependencies[i]->filename);
3829
      }
3830
 
3831
  /* Do nothing if this is a dummy psymtab.  */
3832
 
3833
  if (pst->n_global_syms == 0 && pst->n_static_syms == 0
3834
      && pst->textlow == 0 && pst->texthigh == 0)
3835
    return;
3836
 
3837
  /* Now read the symbols for this symtab */
3838
 
3839
  cur_bfd = CUR_BFD (pst);
3840
  debug_swap = DEBUG_SWAP (pst);
3841
  debug_info = DEBUG_INFO (pst);
3842
  pending_list = PENDING_LIST (pst);
3843
  external_sym_size = debug_swap->external_sym_size;
3844
  external_pdr_size = debug_swap->external_pdr_size;
3845
  swap_sym_in = debug_swap->swap_sym_in;
3846
  swap_pdr_in = debug_swap->swap_pdr_in;
3847
  current_objfile = pst->objfile;
3848
  cur_fd = FDR_IDX (pst);
3849
  fh = ((cur_fd == -1)
3850
        ? (FDR *) NULL
3851
        : debug_info->fdr + cur_fd);
3852
  cur_fdr = fh;
3853
 
3854
  /* See comment in parse_partial_symbols about the @stabs sentinel. */
3855
  processing_gcc_compilation = 0;
3856
  if (fh != (FDR *) NULL && fh->csym >= 2)
3857
    {
3858
      SYMR sh;
3859
 
3860
      (*swap_sym_in) (cur_bfd,
3861
                      ((char *) debug_info->external_sym
3862
                       + (fh->isymBase + 1) * external_sym_size),
3863
                      &sh);
3864
      if (strcmp (debug_info->ss + fh->issBase + sh.iss,
3865
                  stabs_symbol) == 0)
3866
        {
3867
          /* We indicate that this is a GCC compilation so that certain
3868
             features will be enabled in stabsread/dbxread.  */
3869
          processing_gcc_compilation = 2;
3870
        }
3871
    }
3872
 
3873
  if (processing_gcc_compilation != 0)
3874
    {
3875
 
3876
      /* This symbol table contains stabs-in-ecoff entries.  */
3877
 
3878
      /* Parse local symbols first */
3879
 
3880
      if (fh->csym <= 2)        /* FIXME, this blows psymtab->symtab ptr */
3881
        {
3882
          current_objfile = NULL;
3883
          return;
3884
        }
3885
      for (cur_sdx = 2; cur_sdx < fh->csym; cur_sdx++)
3886
        {
3887
          SYMR sh;
3888
          char *name;
3889
          CORE_ADDR valu;
3890
 
3891
          (*swap_sym_in) (cur_bfd,
3892
                          (((char *) debug_info->external_sym)
3893
                           + (fh->isymBase + cur_sdx) * external_sym_size),
3894
                          &sh);
3895
          name = debug_info->ss + fh->issBase + sh.iss;
3896
          valu = sh.value;
3897
          /* XXX This is a hack.  It will go away!  */
3898
          if (ECOFF_IS_STAB (&sh) || (name[0] == '#'))
3899
            {
3900
              int type_code = ECOFF_UNMARK_STAB (sh.index);
3901
 
3902
              /* We should never get non N_STAB symbols here, but they
3903
                 should be harmless, so keep process_one_symbol from
3904
                 complaining about them.  */
3905
              if (type_code & N_STAB)
3906
                {
3907
                  /* If we found a trailing N_SO with no name, process
3908
                     it here instead of in process_one_symbol, so we
3909
                     can keep a handle to its symtab.  The symtab
3910
                     would otherwise be ended twice, once in
3911
                     process_one_symbol, and once after this loop. */
3912
                  if (type_code == N_SO
3913
                      && last_source_file
3914
                      && previous_stab_code != (unsigned char) N_SO
3915
                      && *name == '\000')
3916
                    {
3917
                      valu += ANOFFSET (pst->section_offsets,
3918
                                        SECT_OFF_TEXT (pst->objfile));
3919
                      previous_stab_code = N_SO;
3920
                      st = end_symtab (valu, pst->objfile,
3921
                                       SECT_OFF_TEXT (pst->objfile));
3922
                      end_stabs ();
3923
                      last_symtab_ended = 1;
3924
                    }
3925
                  else
3926
                    {
3927
                      last_symtab_ended = 0;
3928
                      process_one_symbol (type_code, 0, valu, name,
3929
                                          pst->section_offsets, pst->objfile);
3930
                    }
3931
                }
3932
              /* Similarly a hack.  */
3933
              else if (name[0] == '#')
3934
                {
3935
                  process_one_symbol (N_SLINE, 0, valu, name,
3936
                                      pst->section_offsets, pst->objfile);
3937
                }
3938
              if (type_code == N_FUN)
3939
                {
3940
                  /* Make up special symbol to contain
3941
                     procedure specific info */
3942
                  struct mdebug_extra_func_info *e =
3943
                  ((struct mdebug_extra_func_info *)
3944
                   obstack_alloc (&current_objfile->objfile_obstack,
3945
                                  sizeof (struct mdebug_extra_func_info)));
3946
                  struct symbol *s = new_symbol (MDEBUG_EFI_SYMBOL_NAME);
3947
 
3948
                  memset (e, 0, sizeof (struct mdebug_extra_func_info));
3949
                  SYMBOL_DOMAIN (s) = LABEL_DOMAIN;
3950
                  SYMBOL_CLASS (s) = LOC_CONST;
3951
                  SYMBOL_TYPE (s) = mdebug_type_void;
3952
                  SYMBOL_VALUE (s) = (long) e;
3953
                  e->pdr.framereg = -1;
3954
                  add_symbol_to_list (s, &local_symbols);
3955
                }
3956
            }
3957
          else if (sh.st == stLabel)
3958
            {
3959
              if (sh.index == indexNil)
3960
                {
3961
                  /* This is what the gcc2_compiled and __gnu_compiled_*
3962
                     show up as.  So don't complain.  */
3963
                  ;
3964
                }
3965
              else
3966
                {
3967
                  /* Handle encoded stab line number. */
3968
                  valu += ANOFFSET (pst->section_offsets, SECT_OFF_TEXT (pst->objfile));
3969
                  record_line (current_subfile, sh.index, valu);
3970
                }
3971
            }
3972
          else if (sh.st == stProc || sh.st == stStaticProc
3973
                   || sh.st == stStatic || sh.st == stEnd)
3974
            /* These are generated by gcc-2.x, do not complain */
3975
            ;
3976
          else
3977
            complaint (&symfile_complaints, _("unknown stabs symbol %s"), name);
3978
        }
3979
 
3980
      if (! last_symtab_ended)
3981
        {
3982
          st = end_symtab (pst->texthigh, pst->objfile, SECT_OFF_TEXT (pst->objfile));
3983
          end_stabs ();
3984
        }
3985
 
3986
      /* There used to be a call to sort_blocks here, but this should not
3987
         be necessary for stabs symtabs.  And as sort_blocks modifies the
3988
         start address of the GLOBAL_BLOCK to the FIRST_LOCAL_BLOCK,
3989
         it did the wrong thing if the first procedure in a file was
3990
         generated via asm statements.  */
3991
 
3992
      /* Fill in procedure info next.  */
3993
      if (fh->cpd > 0)
3994
        {
3995
          PDR *pr_block;
3996
          struct cleanup *old_chain;
3997
          char *pdr_ptr;
3998
          char *pdr_end;
3999
          PDR *pdr_in;
4000
          PDR *pdr_in_end;
4001
 
4002
          pr_block = (PDR *) xmalloc (fh->cpd * sizeof (PDR));
4003
          old_chain = make_cleanup (xfree, pr_block);
4004
 
4005
          pdr_ptr = ((char *) debug_info->external_pdr
4006
                     + fh->ipdFirst * external_pdr_size);
4007
          pdr_end = pdr_ptr + fh->cpd * external_pdr_size;
4008
          pdr_in = pr_block;
4009
          for (;
4010
               pdr_ptr < pdr_end;
4011
               pdr_ptr += external_pdr_size, pdr_in++)
4012
            {
4013
              (*swap_pdr_in) (cur_bfd, pdr_ptr, pdr_in);
4014
 
4015
              /* Determine lowest PDR address, the PDRs are not always
4016
                 sorted.  */
4017
              if (pdr_in == pr_block)
4018
                lowest_pdr_addr = pdr_in->adr;
4019
              else if (pdr_in->adr < lowest_pdr_addr)
4020
                lowest_pdr_addr = pdr_in->adr;
4021
            }
4022
 
4023
          pdr_in = pr_block;
4024
          pdr_in_end = pdr_in + fh->cpd;
4025
          for (; pdr_in < pdr_in_end; pdr_in++)
4026
            parse_procedure (pdr_in, st, pst);
4027
 
4028
          do_cleanups (old_chain);
4029
        }
4030
    }
4031
  else
4032
    {
4033
      /* This symbol table contains ordinary ecoff entries.  */
4034
 
4035
      int f_max;
4036
      int maxlines;
4037
      EXTR *ext_ptr;
4038
 
4039
      if (fh == 0)
4040
        {
4041
          maxlines = 0;
4042
          st = new_symtab ("unknown", 0, pst->objfile);
4043
        }
4044
      else
4045
        {
4046
          maxlines = 2 * fh->cline;
4047
          st = new_symtab (pst->filename, maxlines, pst->objfile);
4048
 
4049
          /* The proper language was already determined when building
4050
             the psymtab, use it.  */
4051
          st->language = PST_PRIVATE (pst)->pst_language;
4052
        }
4053
 
4054
      psymtab_language = st->language;
4055
 
4056
      lines = LINETABLE (st);
4057
 
4058
      /* Get a new lexical context */
4059
 
4060
      push_parse_stack ();
4061
      top_stack->cur_st = st;
4062
      top_stack->cur_block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (st),
4063
                                                STATIC_BLOCK);
4064
      BLOCK_START (top_stack->cur_block) = pst->textlow;
4065
      BLOCK_END (top_stack->cur_block) = 0;
4066
      top_stack->blocktype = stFile;
4067
      top_stack->cur_type = 0;
4068
      top_stack->procadr = 0;
4069
      top_stack->numargs = 0;
4070
      found_ecoff_debugging_info = 0;
4071
 
4072
      if (fh)
4073
        {
4074
          char *sym_ptr;
4075
          char *sym_end;
4076
 
4077
          /* Parse local symbols first */
4078
          sym_ptr = ((char *) debug_info->external_sym
4079
                     + fh->isymBase * external_sym_size);
4080
          sym_end = sym_ptr + fh->csym * external_sym_size;
4081
          while (sym_ptr < sym_end)
4082
            {
4083
              SYMR sh;
4084
              int c;
4085
 
4086
              (*swap_sym_in) (cur_bfd, sym_ptr, &sh);
4087
              c = parse_symbol (&sh,
4088
                                debug_info->external_aux + fh->iauxBase,
4089
                                sym_ptr, fh->fBigendian, pst->section_offsets, pst->objfile);
4090
              sym_ptr += c * external_sym_size;
4091
            }
4092
 
4093
          /* Linenumbers.  At the end, check if we can save memory.
4094
             parse_lines has to look ahead an arbitrary number of PDR
4095
             structures, so we swap them all first.  */
4096
          if (fh->cpd > 0)
4097
            {
4098
              PDR *pr_block;
4099
              struct cleanup *old_chain;
4100
              char *pdr_ptr;
4101
              char *pdr_end;
4102
              PDR *pdr_in;
4103
              PDR *pdr_in_end;
4104
 
4105
              pr_block = (PDR *) xmalloc (fh->cpd * sizeof (PDR));
4106
 
4107
              old_chain = make_cleanup (xfree, pr_block);
4108
 
4109
              pdr_ptr = ((char *) debug_info->external_pdr
4110
                         + fh->ipdFirst * external_pdr_size);
4111
              pdr_end = pdr_ptr + fh->cpd * external_pdr_size;
4112
              pdr_in = pr_block;
4113
              for (;
4114
                   pdr_ptr < pdr_end;
4115
                   pdr_ptr += external_pdr_size, pdr_in++)
4116
                {
4117
                  (*swap_pdr_in) (cur_bfd, pdr_ptr, pdr_in);
4118
 
4119
                  /* Determine lowest PDR address, the PDRs are not always
4120
                     sorted.  */
4121
                  if (pdr_in == pr_block)
4122
                    lowest_pdr_addr = pdr_in->adr;
4123
                  else if (pdr_in->adr < lowest_pdr_addr)
4124
                    lowest_pdr_addr = pdr_in->adr;
4125
                }
4126
 
4127
              parse_lines (fh, pr_block, lines, maxlines, pst, lowest_pdr_addr);
4128
              if (lines->nitems < fh->cline)
4129
                lines = shrink_linetable (lines);
4130
 
4131
              /* Fill in procedure info next.  */
4132
              pdr_in = pr_block;
4133
              pdr_in_end = pdr_in + fh->cpd;
4134
              for (; pdr_in < pdr_in_end; pdr_in++)
4135
                parse_procedure (pdr_in, 0, pst);
4136
 
4137
              do_cleanups (old_chain);
4138
            }
4139
        }
4140
 
4141
      LINETABLE (st) = lines;
4142
 
4143
      /* .. and our share of externals.
4144
         XXX use the global list to speed up things here. how?
4145
         FIXME, Maybe quit once we have found the right number of ext's? */
4146
      top_stack->cur_st = st;
4147
      top_stack->cur_block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (top_stack->cur_st),
4148
                                                GLOBAL_BLOCK);
4149
      top_stack->blocktype = stFile;
4150
 
4151
      ext_ptr = PST_PRIVATE (pst)->extern_tab;
4152
      for (i = PST_PRIVATE (pst)->extern_count; --i >= 0; ext_ptr++)
4153
        parse_external (ext_ptr, fh->fBigendian, pst->section_offsets, pst->objfile);
4154
 
4155
      /* If there are undefined symbols, tell the user.
4156
         The alpha has an undefined symbol for every symbol that is
4157
         from a shared library, so tell the user only if verbose is on.  */
4158
      if (info_verbose && n_undef_symbols)
4159
        {
4160
          printf_filtered (_("File %s contains %d unresolved references:"),
4161
                           st->filename, n_undef_symbols);
4162
          printf_filtered ("\n\t%4d variables\n\t%4d procedures\n\t%4d labels\n",
4163
                           n_undef_vars, n_undef_procs, n_undef_labels);
4164
          n_undef_symbols = n_undef_labels = n_undef_vars = n_undef_procs = 0;
4165
 
4166
        }
4167
      pop_parse_stack ();
4168
 
4169
      st->primary = 1;
4170
 
4171
      sort_blocks (st);
4172
    }
4173
 
4174
  /* Now link the psymtab and the symtab.  */
4175
  pst->symtab = st;
4176
 
4177
  current_objfile = NULL;
4178
}
4179
 
4180
/* Ancillary parsing procedures. */
4181
 
4182
/* Return 1 if the symbol pointed to by SH has a cross reference
4183
   to an opaque aggregate type, else 0.  */
4184
 
4185
static int
4186
has_opaque_xref (FDR *fh, SYMR *sh)
4187
{
4188
  TIR tir;
4189
  union aux_ext *ax;
4190
  RNDXR rn[1];
4191
  unsigned int rf;
4192
 
4193
  if (sh->index == indexNil)
4194
    return 0;
4195
 
4196
  ax = debug_info->external_aux + fh->iauxBase + sh->index;
4197
  (*debug_swap->swap_tir_in) (fh->fBigendian, &ax->a_ti, &tir);
4198
  if (tir.bt != btStruct && tir.bt != btUnion && tir.bt != btEnum)
4199
    return 0;
4200
 
4201
  ax++;
4202
  (*debug_swap->swap_rndx_in) (fh->fBigendian, &ax->a_rndx, rn);
4203
  if (rn->rfd == 0xfff)
4204
    rf = AUX_GET_ISYM (fh->fBigendian, ax + 1);
4205
  else
4206
    rf = rn->rfd;
4207
  if (rf != -1)
4208
    return 0;
4209
  return 1;
4210
}
4211
 
4212
/* Lookup the type at relative index RN.  Return it in TPP
4213
   if found and in any event come up with its name PNAME.
4214
   BIGEND says whether aux symbols are big-endian or not (from fh->fBigendian).
4215
   Return value says how many aux symbols we ate. */
4216
 
4217
static int
4218
cross_ref (int fd, union aux_ext *ax, struct type **tpp, enum type_code type_code,      /* Use to alloc new type if none is found. */
4219
           char **pname, int bigend, char *sym_name)
4220
{
4221
  RNDXR rn[1];
4222
  unsigned int rf;
4223
  int result = 1;
4224
  FDR *fh;
4225
  char *esh;
4226
  SYMR sh;
4227
  int xref_fd;
4228
  struct mdebug_pending *pend;
4229
 
4230
  *tpp = (struct type *) NULL;
4231
 
4232
  (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, rn);
4233
 
4234
  /* Escape index means 'the next one' */
4235
  if (rn->rfd == 0xfff)
4236
    {
4237
      result++;
4238
      rf = AUX_GET_ISYM (bigend, ax + 1);
4239
    }
4240
  else
4241
    {
4242
      rf = rn->rfd;
4243
    }
4244
 
4245
  /* mips cc uses a rf of -1 for opaque struct definitions.
4246
     Set TYPE_FLAG_STUB for these types so that check_typedef will
4247
     resolve them if the struct gets defined in another compilation unit.  */
4248
  if (rf == -1)
4249
    {
4250
      *pname = "<undefined>";
4251
      *tpp = init_type (type_code, 0, TYPE_FLAG_STUB, (char *) NULL, current_objfile);
4252
      return result;
4253
    }
4254
 
4255
  /* mips cc uses an escaped rn->index of 0 for struct return types
4256
     of procedures that were compiled without -g. These will always remain
4257
     undefined.  */
4258
  if (rn->rfd == 0xfff && rn->index == 0)
4259
    {
4260
      *pname = "<undefined>";
4261
      return result;
4262
    }
4263
 
4264
  /* Find the relative file descriptor and the symbol in it.  */
4265
  fh = get_rfd (fd, rf);
4266
  xref_fd = fh - debug_info->fdr;
4267
 
4268
  if (rn->index >= fh->csym)
4269
    {
4270
      /* File indirect entry is corrupt.  */
4271
      *pname = "<illegal>";
4272
      bad_rfd_entry_complaint (sym_name, xref_fd, rn->index);
4273
      return result;
4274
    }
4275
 
4276
  /* If we have processed this symbol then we left a forwarding
4277
     pointer to the type in the pending list.  If not, we`ll put
4278
     it in a list of pending types, to be processed later when
4279
     the file will be.  In any event, we collect the name for the
4280
     type here.  */
4281
 
4282
  esh = ((char *) debug_info->external_sym
4283
         + ((fh->isymBase + rn->index)
4284
            * debug_swap->external_sym_size));
4285
  (*debug_swap->swap_sym_in) (cur_bfd, esh, &sh);
4286
 
4287
  /* Make sure that this type of cross reference can be handled.  */
4288
  if ((sh.sc != scInfo
4289
       || (sh.st != stBlock && sh.st != stTypedef && sh.st != stIndirect
4290
           && sh.st != stStruct && sh.st != stUnion
4291
           && sh.st != stEnum))
4292
      && (sh.st != stBlock || !SC_IS_COMMON (sh.sc)))
4293
    {
4294
      /* File indirect entry is corrupt.  */
4295
      *pname = "<illegal>";
4296
      bad_rfd_entry_complaint (sym_name, xref_fd, rn->index);
4297
      return result;
4298
    }
4299
 
4300
  *pname = debug_info->ss + fh->issBase + sh.iss;
4301
 
4302
  pend = is_pending_symbol (fh, esh);
4303
  if (pend)
4304
    *tpp = pend->t;
4305
  else
4306
    {
4307
      /* We have not yet seen this type.  */
4308
 
4309
      if ((sh.iss == 0 && sh.st == stTypedef) || sh.st == stIndirect)
4310
        {
4311
          TIR tir;
4312
 
4313
          /* alpha cc puts out a stTypedef with a sh.iss of zero for
4314
             two cases:
4315
             a) forward declarations of structs/unions/enums which are not
4316
             defined in this compilation unit.
4317
             For these the type will be void. This is a bad design decision
4318
             as cross referencing across compilation units is impossible
4319
             due to the missing name.
4320
             b) forward declarations of structs/unions/enums/typedefs which
4321
             are defined later in this file or in another file in the same
4322
             compilation unit. Irix5 cc uses a stIndirect symbol for this.
4323
             Simply cross reference those again to get the true type.
4324
             The forward references are not entered in the pending list and
4325
             in the symbol table.  */
4326
 
4327
          (*debug_swap->swap_tir_in) (bigend,
4328
                                      &(debug_info->external_aux
4329
                                        + fh->iauxBase + sh.index)->a_ti,
4330
                                      &tir);
4331
          if (tir.tq0 != tqNil)
4332
            complaint (&symfile_complaints,
4333
                       _("illegal tq0 in forward typedef for %s"), sym_name);
4334
          switch (tir.bt)
4335
            {
4336
            case btVoid:
4337
              *tpp = init_type (type_code, 0, 0, (char *) NULL,
4338
                                current_objfile);
4339
              *pname = "<undefined>";
4340
              break;
4341
 
4342
            case btStruct:
4343
            case btUnion:
4344
            case btEnum:
4345
              cross_ref (xref_fd,
4346
                         (debug_info->external_aux
4347
                          + fh->iauxBase + sh.index + 1),
4348
                         tpp, type_code, pname,
4349
                         fh->fBigendian, sym_name);
4350
              break;
4351
 
4352
            case btTypedef:
4353
              /* Follow a forward typedef. This might recursively
4354
                 call cross_ref till we get a non typedef'ed type.
4355
                 FIXME: This is not correct behaviour, but gdb currently
4356
                 cannot handle typedefs without type copying. Type
4357
                 copying is impossible as we might have mutual forward
4358
                 references between two files and the copied type would not
4359
                 get filled in when we later parse its definition.  */
4360
              *tpp = parse_type (xref_fd,
4361
                                 debug_info->external_aux + fh->iauxBase,
4362
                                 sh.index,
4363
                                 (int *) NULL,
4364
                                 fh->fBigendian,
4365
                                 debug_info->ss + fh->issBase + sh.iss);
4366
              add_pending (fh, esh, *tpp);
4367
              break;
4368
 
4369
            default:
4370
              complaint (&symfile_complaints,
4371
                         _("illegal bt %d in forward typedef for %s"), tir.bt,
4372
                         sym_name);
4373
              *tpp = init_type (type_code, 0, 0, (char *) NULL,
4374
                                current_objfile);
4375
              break;
4376
            }
4377
          return result;
4378
        }
4379
      else if (sh.st == stTypedef)
4380
        {
4381
          /* Parse the type for a normal typedef. This might recursively call
4382
             cross_ref till we get a non typedef'ed type.
4383
             FIXME: This is not correct behaviour, but gdb currently
4384
             cannot handle typedefs without type copying. But type copying is
4385
             impossible as we might have mutual forward references between
4386
             two files and the copied type would not get filled in when
4387
             we later parse its definition.   */
4388
          *tpp = parse_type (xref_fd,
4389
                             debug_info->external_aux + fh->iauxBase,
4390
                             sh.index,
4391
                             (int *) NULL,
4392
                             fh->fBigendian,
4393
                             debug_info->ss + fh->issBase + sh.iss);
4394
        }
4395
      else
4396
        {
4397
          /* Cross reference to a struct/union/enum which is defined
4398
             in another file in the same compilation unit but that file
4399
             has not been parsed yet.
4400
             Initialize the type only, it will be filled in when
4401
             it's definition is parsed.  */
4402
          *tpp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
4403
        }
4404
      add_pending (fh, esh, *tpp);
4405
    }
4406
 
4407
  /* We used one auxent normally, two if we got a "next one" rf. */
4408
  return result;
4409
}
4410
 
4411
 
4412
/* Quick&dirty lookup procedure, to avoid the MI ones that require
4413
   keeping the symtab sorted */
4414
 
4415
static struct symbol *
4416
mylookup_symbol (char *name, struct block *block,
4417
                 domain_enum domain, enum address_class class)
4418
{
4419
  struct dict_iterator iter;
4420
  int inc;
4421
  struct symbol *sym;
4422
 
4423
  inc = name[0];
4424
  ALL_BLOCK_SYMBOLS (block, iter, sym)
4425
    {
4426
      if (DEPRECATED_SYMBOL_NAME (sym)[0] == inc
4427
          && SYMBOL_DOMAIN (sym) == domain
4428
          && SYMBOL_CLASS (sym) == class
4429
          && strcmp (DEPRECATED_SYMBOL_NAME (sym), name) == 0)
4430
        return sym;
4431
    }
4432
 
4433
  block = BLOCK_SUPERBLOCK (block);
4434
  if (block)
4435
    return mylookup_symbol (name, block, domain, class);
4436
  return 0;
4437
}
4438
 
4439
 
4440
/* Add a new symbol S to a block B.  */
4441
 
4442
static void
4443
add_symbol (struct symbol *s, struct block *b)
4444
{
4445
  dict_add_symbol (BLOCK_DICT (b), s);
4446
}
4447
 
4448
/* Add a new block B to a symtab S */
4449
 
4450
static void
4451
add_block (struct block *b, struct symtab *s)
4452
{
4453
  struct blockvector *bv = BLOCKVECTOR (s);
4454
 
4455
  bv = (struct blockvector *) xrealloc ((void *) bv,
4456
                                        (sizeof (struct blockvector)
4457
                                         + BLOCKVECTOR_NBLOCKS (bv)
4458
                                         * sizeof (bv->block)));
4459
  if (bv != BLOCKVECTOR (s))
4460
    BLOCKVECTOR (s) = bv;
4461
 
4462
  BLOCKVECTOR_BLOCK (bv, BLOCKVECTOR_NBLOCKS (bv)++) = b;
4463
}
4464
 
4465
/* Add a new linenumber entry (LINENO,ADR) to a linevector LT.
4466
   MIPS' linenumber encoding might need more than one byte
4467
   to describe it, LAST is used to detect these continuation lines.
4468
 
4469
   Combining lines with the same line number seems like a bad idea.
4470
   E.g: There could be a line number entry with the same line number after the
4471
   prologue and GDB should not ignore it (this is a better way to find
4472
   a prologue than mips_skip_prologue).
4473
   But due to the compressed line table format there are line number entries
4474
   for the same line which are needed to bridge the gap to the next
4475
   line number entry. These entries have a bogus address info with them
4476
   and we are unable to tell them from intended duplicate line number
4477
   entries.
4478
   This is another reason why -ggdb debugging format is preferable.  */
4479
 
4480
static int
4481
add_line (struct linetable *lt, int lineno, CORE_ADDR adr, int last)
4482
{
4483
  /* DEC c89 sometimes produces zero linenos which confuse gdb.
4484
     Change them to something sensible. */
4485
  if (lineno == 0)
4486
    lineno = 1;
4487
  if (last == 0)
4488
    last = -2;                  /* make sure we record first line */
4489
 
4490
  if (last == lineno)           /* skip continuation lines */
4491
    return lineno;
4492
 
4493
  lt->item[lt->nitems].line = lineno;
4494
  lt->item[lt->nitems++].pc = adr << 2;
4495
  return lineno;
4496
}
4497
 
4498
/* Sorting and reordering procedures */
4499
 
4500
/* Blocks with a smaller low bound should come first */
4501
 
4502
static int
4503
compare_blocks (const void *arg1, const void *arg2)
4504
{
4505
  LONGEST addr_diff;
4506
  struct block **b1 = (struct block **) arg1;
4507
  struct block **b2 = (struct block **) arg2;
4508
 
4509
  addr_diff = (BLOCK_START ((*b1))) - (BLOCK_START ((*b2)));
4510
  if (addr_diff == 0)
4511
    return (BLOCK_END ((*b2))) - (BLOCK_END ((*b1)));
4512
  return addr_diff;
4513
}
4514
 
4515
/* Sort the blocks of a symtab S.
4516
   Reorder the blocks in the blockvector by code-address,
4517
   as required by some MI search routines */
4518
 
4519
static void
4520
sort_blocks (struct symtab *s)
4521
{
4522
  struct blockvector *bv = BLOCKVECTOR (s);
4523
 
4524
  if (BLOCKVECTOR_NBLOCKS (bv) <= 2)
4525
    {
4526
      /* Cosmetic */
4527
      if (BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) == 0)
4528
        BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) = 0;
4529
      if (BLOCK_END (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) == 0)
4530
        BLOCK_START (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) = 0;
4531
      return;
4532
    }
4533
  /*
4534
   * This is very unfortunate: normally all functions are compiled in
4535
   * the order they are found, but if the file is compiled -O3 things
4536
   * are very different.  It would be nice to find a reliable test
4537
   * to detect -O3 images in advance.
4538
   */
4539
  if (BLOCKVECTOR_NBLOCKS (bv) > 3)
4540
    qsort (&BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK),
4541
           BLOCKVECTOR_NBLOCKS (bv) - FIRST_LOCAL_BLOCK,
4542
           sizeof (struct block *),
4543
           compare_blocks);
4544
 
4545
  {
4546
    CORE_ADDR high = 0;
4547
    int i, j = BLOCKVECTOR_NBLOCKS (bv);
4548
 
4549
    for (i = FIRST_LOCAL_BLOCK; i < j; i++)
4550
      if (high < BLOCK_END (BLOCKVECTOR_BLOCK (bv, i)))
4551
        high = BLOCK_END (BLOCKVECTOR_BLOCK (bv, i));
4552
    BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) = high;
4553
  }
4554
 
4555
  BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) =
4556
    BLOCK_START (BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK));
4557
 
4558
  BLOCK_START (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) =
4559
    BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
4560
  BLOCK_END (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) =
4561
    BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
4562
}
4563
 
4564
 
4565
/* Constructor/restructor/destructor procedures */
4566
 
4567
/* Allocate a new symtab for NAME.  Needs an estimate of how many
4568
   linenumbers MAXLINES we'll put in it */
4569
 
4570
static struct symtab *
4571
new_symtab (char *name, int maxlines, struct objfile *objfile)
4572
{
4573
  struct symtab *s = allocate_symtab (name, objfile);
4574
 
4575
  LINETABLE (s) = new_linetable (maxlines);
4576
 
4577
  /* All symtabs must have at least two blocks */
4578
  BLOCKVECTOR (s) = new_bvect (2);
4579
  BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK)
4580
    = new_block (NON_FUNCTION_BLOCK);
4581
  BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)
4582
    = new_block (NON_FUNCTION_BLOCK);
4583
  BLOCK_SUPERBLOCK (BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)) =
4584
    BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
4585
 
4586
  s->free_code = free_linetable;
4587
  s->debugformat = obsavestring ("ECOFF", 5,
4588
                                 &objfile->objfile_obstack);
4589
  return (s);
4590
}
4591
 
4592
/* Allocate a new partial_symtab NAME */
4593
 
4594
static struct partial_symtab *
4595
new_psymtab (char *name, struct objfile *objfile)
4596
{
4597
  struct partial_symtab *psymtab;
4598
 
4599
  psymtab = allocate_psymtab (name, objfile);
4600
  psymtab->section_offsets = objfile->section_offsets;
4601
 
4602
  /* Keep a backpointer to the file's symbols */
4603
 
4604
  psymtab->read_symtab_private = ((char *)
4605
                                  obstack_alloc (&objfile->objfile_obstack,
4606
                                                 sizeof (struct symloc)));
4607
  memset (psymtab->read_symtab_private, 0, sizeof (struct symloc));
4608
  CUR_BFD (psymtab) = cur_bfd;
4609
  DEBUG_SWAP (psymtab) = debug_swap;
4610
  DEBUG_INFO (psymtab) = debug_info;
4611
  PENDING_LIST (psymtab) = pending_list;
4612
 
4613
  /* The way to turn this into a symtab is to call... */
4614
  psymtab->read_symtab = mdebug_psymtab_to_symtab;
4615
  return (psymtab);
4616
}
4617
 
4618
 
4619
/* Allocate a linetable array of the given SIZE.  Since the struct
4620
   already includes one item, we subtract one when calculating the
4621
   proper size to allocate.  */
4622
 
4623
static struct linetable *
4624
new_linetable (int size)
4625
{
4626
  struct linetable *l;
4627
 
4628
  size = (size - 1) * sizeof (l->item) + sizeof (struct linetable);
4629
  l = (struct linetable *) xmalloc (size);
4630
  l->nitems = 0;
4631
  return l;
4632
}
4633
 
4634
/* Oops, too big. Shrink it.  This was important with the 2.4 linetables,
4635
   I am not so sure about the 3.4 ones.
4636
 
4637
   Since the struct linetable already includes one item, we subtract one when
4638
   calculating the proper size to allocate.  */
4639
 
4640
static struct linetable *
4641
shrink_linetable (struct linetable *lt)
4642
{
4643
 
4644
  return (struct linetable *) xrealloc ((void *) lt,
4645
                                        (sizeof (struct linetable)
4646
                                         + ((lt->nitems - 1)
4647
                                            * sizeof (lt->item))));
4648
}
4649
 
4650
/* Allocate and zero a new blockvector of NBLOCKS blocks. */
4651
 
4652
static struct blockvector *
4653
new_bvect (int nblocks)
4654
{
4655
  struct blockvector *bv;
4656
  int size;
4657
 
4658
  size = sizeof (struct blockvector) + nblocks * sizeof (struct block *);
4659
  bv = (struct blockvector *) xzalloc (size);
4660
 
4661
  BLOCKVECTOR_NBLOCKS (bv) = nblocks;
4662
 
4663
  return bv;
4664
}
4665
 
4666
/* Allocate and zero a new block, and set its BLOCK_DICT.  If function
4667
   is non-zero, assume the block is associated to a function, and make
4668
   sure that the symbols are stored linearly; otherwise, store them
4669
   hashed.  */
4670
 
4671
static struct block *
4672
new_block (enum block_type type)
4673
{
4674
  /* FIXME: carlton/2003-09-11: This should use allocate_block to
4675
     allocate the block.  Which, in turn, suggests that the block
4676
     should be allocated on an obstack.  */
4677
  struct block *retval = xzalloc (sizeof (struct block));
4678
 
4679
  if (type == FUNCTION_BLOCK)
4680
    BLOCK_DICT (retval) = dict_create_linear_expandable ();
4681
  else
4682
    BLOCK_DICT (retval) = dict_create_hashed_expandable ();
4683
 
4684
  return retval;
4685
}
4686
 
4687
/* Create a new symbol with printname NAME */
4688
 
4689
static struct symbol *
4690
new_symbol (char *name)
4691
{
4692
  struct symbol *s = ((struct symbol *)
4693
                      obstack_alloc (&current_objfile->objfile_obstack,
4694
                                     sizeof (struct symbol)));
4695
 
4696
  memset (s, 0, sizeof (*s));
4697
  SYMBOL_LANGUAGE (s) = psymtab_language;
4698
  SYMBOL_SET_NAMES (s, name, strlen (name), current_objfile);
4699
  return s;
4700
}
4701
 
4702
/* Create a new type with printname NAME */
4703
 
4704
static struct type *
4705
new_type (char *name)
4706
{
4707
  struct type *t;
4708
 
4709
  t = alloc_type (current_objfile);
4710
  TYPE_NAME (t) = name;
4711
  TYPE_CPLUS_SPECIFIC (t) = (struct cplus_struct_type *) &cplus_struct_default;
4712
  return t;
4713
}
4714
 
4715
/* Read ECOFF debugging information from a BFD section.  This is
4716
   called from elfread.c.  It parses the section into a
4717
   ecoff_debug_info struct, and then lets the rest of the file handle
4718
   it as normal.  */
4719
 
4720
void
4721
elfmdebug_build_psymtabs (struct objfile *objfile,
4722
                          const struct ecoff_debug_swap *swap, asection *sec)
4723
{
4724
  bfd *abfd = objfile->obfd;
4725
  struct ecoff_debug_info *info;
4726
  struct cleanup *back_to;
4727
 
4728
  /* FIXME: It's not clear whether we should be getting minimal symbol
4729
     information from .mdebug in an ELF file, or whether we will.
4730
     Re-initialize the minimal symbol reader in case we do.  */
4731
 
4732
  init_minimal_symbol_collection ();
4733
  back_to = make_cleanup_discard_minimal_symbols ();
4734
 
4735
  info = ((struct ecoff_debug_info *)
4736
          obstack_alloc (&objfile->objfile_obstack,
4737
                         sizeof (struct ecoff_debug_info)));
4738
 
4739
  if (!(*swap->read_debug_info) (abfd, sec, info))
4740
    error (_("Error reading ECOFF debugging information: %s"),
4741
           bfd_errmsg (bfd_get_error ()));
4742
 
4743
  mdebug_build_psymtabs (objfile, swap, info);
4744
 
4745
  install_minimal_symbols (objfile);
4746
  do_cleanups (back_to);
4747
}
4748
 
4749
void
4750
_initialize_mdebugread (void)
4751
{
4752
  mdebug_type_void =
4753
    init_type (TYPE_CODE_VOID, 1,
4754
               0,
4755
               "void", (struct objfile *) NULL);
4756
  mdebug_type_char =
4757
    init_type (TYPE_CODE_INT, 1,
4758
               0,
4759
               "char", (struct objfile *) NULL);
4760
  mdebug_type_unsigned_char =
4761
    init_type (TYPE_CODE_INT, 1,
4762
               TYPE_FLAG_UNSIGNED,
4763
               "unsigned char", (struct objfile *) NULL);
4764
  mdebug_type_short =
4765
    init_type (TYPE_CODE_INT, 2,
4766
               0,
4767
               "short", (struct objfile *) NULL);
4768
  mdebug_type_unsigned_short =
4769
    init_type (TYPE_CODE_INT, 2,
4770
               TYPE_FLAG_UNSIGNED,
4771
               "unsigned short", (struct objfile *) NULL);
4772
  mdebug_type_int_32 =
4773
    init_type (TYPE_CODE_INT, 4,
4774
               0,
4775
               "int", (struct objfile *) NULL);
4776
  mdebug_type_unsigned_int_32 =
4777
    init_type (TYPE_CODE_INT, 4,
4778
               TYPE_FLAG_UNSIGNED,
4779
               "unsigned int", (struct objfile *) NULL);
4780
  mdebug_type_int_64 =
4781
    init_type (TYPE_CODE_INT, 8,
4782
               0,
4783
               "int", (struct objfile *) NULL);
4784
  mdebug_type_unsigned_int_64 =
4785
    init_type (TYPE_CODE_INT, 8,
4786
               TYPE_FLAG_UNSIGNED,
4787
               "unsigned int", (struct objfile *) NULL);
4788
  mdebug_type_long_32 =
4789
    init_type (TYPE_CODE_INT, 4,
4790
               0,
4791
               "long", (struct objfile *) NULL);
4792
  mdebug_type_unsigned_long_32 =
4793
    init_type (TYPE_CODE_INT, 4,
4794
               TYPE_FLAG_UNSIGNED,
4795
               "unsigned long", (struct objfile *) NULL);
4796
  mdebug_type_long_64 =
4797
    init_type (TYPE_CODE_INT, 8,
4798
               0,
4799
               "long", (struct objfile *) NULL);
4800
  mdebug_type_unsigned_long_64 =
4801
    init_type (TYPE_CODE_INT, 8,
4802
               TYPE_FLAG_UNSIGNED,
4803
               "unsigned long", (struct objfile *) NULL);
4804
  mdebug_type_long_long_64 =
4805
    init_type (TYPE_CODE_INT, 8,
4806
               0,
4807
               "long long", (struct objfile *) NULL);
4808
  mdebug_type_unsigned_long_long_64 =
4809
    init_type (TYPE_CODE_INT, 8,
4810
               TYPE_FLAG_UNSIGNED,
4811
               "unsigned long long", (struct objfile *) NULL);
4812
  mdebug_type_adr_32 =
4813
    init_type (TYPE_CODE_PTR, 4,
4814
               TYPE_FLAG_UNSIGNED,
4815
               "adr_32", (struct objfile *) NULL);
4816
  TYPE_TARGET_TYPE (mdebug_type_adr_32) = mdebug_type_void;
4817
  mdebug_type_adr_64 =
4818
    init_type (TYPE_CODE_PTR, 8,
4819
               TYPE_FLAG_UNSIGNED,
4820
               "adr_64", (struct objfile *) NULL);
4821
  TYPE_TARGET_TYPE (mdebug_type_adr_64) = mdebug_type_void;
4822
  mdebug_type_float =
4823
    init_type (TYPE_CODE_FLT,
4824
               gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT,
4825
               0, "float", (struct objfile *) NULL);
4826
  mdebug_type_double =
4827
    init_type (TYPE_CODE_FLT,
4828
               gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
4829
               0, "double", (struct objfile *) NULL);
4830
  mdebug_type_complex =
4831
    init_type (TYPE_CODE_COMPLEX,
4832
               2 * gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT,
4833
               0, "complex", (struct objfile *) NULL);
4834
  TYPE_TARGET_TYPE (mdebug_type_complex) = mdebug_type_float;
4835
  mdebug_type_double_complex =
4836
    init_type (TYPE_CODE_COMPLEX,
4837
               2 * gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
4838
               0, "double complex", (struct objfile *) NULL);
4839
  TYPE_TARGET_TYPE (mdebug_type_double_complex) = mdebug_type_double;
4840
 
4841
  /* Is a "string" the way btString means it the same as TYPE_CODE_STRING?
4842
     FIXME.  */
4843
  mdebug_type_string =
4844
    init_type (TYPE_CODE_STRING,
4845
               TARGET_CHAR_BIT / TARGET_CHAR_BIT,
4846
               0, "string",
4847
               (struct objfile *) NULL);
4848
 
4849
  /* We use TYPE_CODE_INT to print these as integers.  Does this do any
4850
     good?  Would we be better off with TYPE_CODE_ERROR?  Should
4851
     TYPE_CODE_ERROR print things in hex if it knows the size?  */
4852
  mdebug_type_fixed_dec =
4853
    init_type (TYPE_CODE_INT,
4854
               gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
4855
               0, "fixed decimal",
4856
               (struct objfile *) NULL);
4857
 
4858
  mdebug_type_float_dec =
4859
    init_type (TYPE_CODE_ERROR,
4860
               gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
4861
               0, "floating decimal",
4862
               (struct objfile *) NULL);
4863
}

powered by: WebSVN 2.1.0

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