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