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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gdb-7.2/] [gdb/] [dbxread.c] - Blame information for rev 853

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

Line No. Rev Author Line
1 330 jeremybenn
/* Read dbx symbol tables and convert to internal format, for GDB.
2
   Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
3
   1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2009, 2010.
4
   Free Software Foundation, Inc.
5
 
6
   This file is part of GDB.
7
 
8
   This program is free software; you can redistribute it and/or modify
9
   it under the terms of the GNU General Public License as published by
10
   the Free Software Foundation; either version 3 of the License, or
11
   (at your option) any later version.
12
 
13
   This program is distributed in the hope that it will be useful,
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
   GNU General Public License for more details.
17
 
18
   You should have received a copy of the GNU General Public License
19
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
 
21
/* This module provides three functions: dbx_symfile_init,
22
   which initializes to read a symbol file; dbx_new_init, which
23
   discards existing cached information when all symbols are being
24
   discarded; and dbx_symfile_read, which reads a symbol table
25
   from a file.
26
 
27
   dbx_symfile_read only does the minimum work necessary for letting the
28
   user "name" things symbolically; it does not read the entire symtab.
29
   Instead, it reads the external and static symbols and puts them in partial
30
   symbol tables.  When more extensive information is requested of a
31
   file, the corresponding partial symbol table is mutated into a full
32
   fledged symbol table by going back and reading the symbols
33
   for real.  dbx_psymtab_to_symtab() is the function that does this */
34
 
35
#include "defs.h"
36
#include "gdb_string.h"
37
 
38
#if defined(__CYGNUSCLIB__)
39
#include <sys/types.h>
40
#include <fcntl.h>
41
#endif
42
 
43
#include "gdb_obstack.h"
44
#include "gdb_stat.h"
45
#include "symtab.h"
46
#include "breakpoint.h"
47
#include "target.h"
48
#include "gdbcore.h"            /* for bfd stuff */
49
#include "libaout.h"            /* FIXME Secret internal BFD stuff for a.out */
50
#include "objfiles.h"
51
#include "buildsym.h"
52
#include "stabsread.h"
53
#include "gdb-stabs.h"
54
#include "demangle.h"
55
#include "complaints.h"
56
#include "cp-abi.h"
57
#include "cp-support.h"
58
#include "psympriv.h"
59
 
60
#include "gdb_assert.h"
61
#include "gdb_string.h"
62
 
63
#include "aout/aout64.h"
64
#include "aout/stab_gnu.h"      /* We always use GNU stabs, not native, now */
65
 
66
 
67
/* We put a pointer to this structure in the read_symtab_private field
68
   of the psymtab.  */
69
 
70
struct symloc
71
  {
72
    /* Offset within the file symbol table of first local symbol for this
73
       file.  */
74
 
75
    int ldsymoff;
76
 
77
    /* Length (in bytes) of the section of the symbol table devoted to
78
       this file's symbols (actually, the section bracketed may contain
79
       more than just this file's symbols).  If ldsymlen is 0, the only
80
       reason for this thing's existence is the dependency list.  Nothing
81
       else will happen when it is read in.  */
82
 
83
    int ldsymlen;
84
 
85
    /* The size of each symbol in the symbol file (in external form).  */
86
 
87
    int symbol_size;
88
 
89
    /* Further information needed to locate the symbols if they are in
90
       an ELF file.  */
91
 
92
    int symbol_offset;
93
    int string_offset;
94
    int file_string_offset;
95
  };
96
 
97
#define LDSYMOFF(p) (((struct symloc *)((p)->read_symtab_private))->ldsymoff)
98
#define LDSYMLEN(p) (((struct symloc *)((p)->read_symtab_private))->ldsymlen)
99
#define SYMLOC(p) ((struct symloc *)((p)->read_symtab_private))
100
#define SYMBOL_SIZE(p) (SYMLOC(p)->symbol_size)
101
#define SYMBOL_OFFSET(p) (SYMLOC(p)->symbol_offset)
102
#define STRING_OFFSET(p) (SYMLOC(p)->string_offset)
103
#define FILE_STRING_OFFSET(p) (SYMLOC(p)->file_string_offset)
104
 
105
 
106
/* Remember what we deduced to be the source language of this psymtab. */
107
 
108
static enum language psymtab_language = language_unknown;
109
 
110
/* The BFD for this file -- implicit parameter to next_symbol_text.  */
111
 
112
static bfd *symfile_bfd;
113
 
114
/* The size of each symbol in the symbol file (in external form).
115
   This is set by dbx_symfile_read when building psymtabs, and by
116
   dbx_psymtab_to_symtab when building symtabs.  */
117
 
118
static unsigned symbol_size;
119
 
120
/* This is the offset of the symbol table in the executable file. */
121
 
122
static unsigned symbol_table_offset;
123
 
124
/* This is the offset of the string table in the executable file. */
125
 
126
static unsigned string_table_offset;
127
 
128
/* For elf+stab executables, the n_strx field is not a simple index
129
   into the string table.  Instead, each .o file has a base offset in
130
   the string table, and the associated symbols contain offsets from
131
   this base.  The following two variables contain the base offset for
132
   the current and next .o files. */
133
 
134
static unsigned int file_string_table_offset;
135
static unsigned int next_file_string_table_offset;
136
 
137
/* .o and NLM files contain unrelocated addresses which are based at
138
   0.  When non-zero, this flag disables some of the special cases for
139
   Solaris elf+stab text addresses at location 0. */
140
 
141
static int symfile_relocatable = 0;
142
 
143
/* If this is nonzero, N_LBRAC, N_RBRAC, and N_SLINE entries are
144
   relative to the function start address.  */
145
 
146
static int block_address_function_relative = 0;
147
 
148
/* The lowest text address we have yet encountered.  This is needed
149
   because in an a.out file, there is no header field which tells us
150
   what address the program is actually going to be loaded at, so we
151
   need to make guesses based on the symbols (which *are* relocated to
152
   reflect the address it will be loaded at).  */
153
 
154
static CORE_ADDR lowest_text_address;
155
 
156
/* Non-zero if there is any line number info in the objfile.  Prevents
157
   end_psymtab from discarding an otherwise empty psymtab.  */
158
 
159
static int has_line_numbers;
160
 
161
/* Complaints about the symbols we have encountered.  */
162
 
163
static void
164
unknown_symtype_complaint (const char *arg1)
165
{
166
  complaint (&symfile_complaints, _("unknown symbol type %s"), arg1);
167
}
168
 
169
static void
170
lbrac_mismatch_complaint (int arg1)
171
{
172
  complaint (&symfile_complaints,
173
             _("N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d"), arg1);
174
}
175
 
176
static void
177
repeated_header_complaint (const char *arg1, int arg2)
178
{
179
  complaint (&symfile_complaints,
180
             _("\"repeated\" header file %s not previously seen, at symtab \
181
pos %d"),
182
             arg1, arg2);
183
}
184
 
185
/* find_text_range --- find start and end of loadable code sections
186
 
187
   The find_text_range function finds the shortest address range that
188
   encloses all sections containing executable code, and stores it in
189
   objfile's text_addr and text_size members.
190
 
191
   dbx_symfile_read will use this to finish off the partial symbol
192
   table, in some cases.  */
193
 
194
static void
195
find_text_range (bfd * sym_bfd, struct objfile *objfile)
196
{
197
  asection *sec;
198
  int found_any = 0;
199
  CORE_ADDR start = 0;
200
  CORE_ADDR end = 0;
201
 
202
  for (sec = sym_bfd->sections; sec; sec = sec->next)
203
    if (bfd_get_section_flags (sym_bfd, sec) & SEC_CODE)
204
      {
205
        CORE_ADDR sec_start = bfd_section_vma (sym_bfd, sec);
206
        CORE_ADDR sec_end = sec_start + bfd_section_size (sym_bfd, sec);
207
 
208
        if (found_any)
209
          {
210
            if (sec_start < start)
211
              start = sec_start;
212
            if (sec_end > end)
213
              end = sec_end;
214
          }
215
        else
216
          {
217
            start = sec_start;
218
            end = sec_end;
219
          }
220
 
221
        found_any = 1;
222
      }
223
 
224
  if (!found_any)
225
    error (_("Can't find any code sections in symbol file"));
226
 
227
  DBX_TEXT_ADDR (objfile) = start;
228
  DBX_TEXT_SIZE (objfile) = end - start;
229
}
230
 
231
 
232
 
233
/* During initial symbol readin, we need to have a structure to keep
234
   track of which psymtabs have which bincls in them.  This structure
235
   is used during readin to setup the list of dependencies within each
236
   partial symbol table. */
237
 
238
struct header_file_location
239
{
240
  char *name;                   /* Name of header file */
241
  int instance;                 /* See above */
242
  struct partial_symtab *pst;   /* Partial symtab that has the
243
                                   BINCL/EINCL defs for this file */
244
};
245
 
246
/* The actual list and controling variables */
247
static struct header_file_location *bincl_list, *next_bincl;
248
static int bincls_allocated;
249
 
250
/* Local function prototypes */
251
 
252
extern void _initialize_dbxread (void);
253
 
254
static void read_ofile_symtab (struct partial_symtab *);
255
 
256
static void dbx_psymtab_to_symtab (struct partial_symtab *);
257
 
258
static void dbx_psymtab_to_symtab_1 (struct partial_symtab *);
259
 
260
static void read_dbx_dynamic_symtab (struct objfile *objfile);
261
 
262
static void read_dbx_symtab (struct objfile *);
263
 
264
static void free_bincl_list (struct objfile *);
265
 
266
static struct partial_symtab *find_corresponding_bincl_psymtab (char *, int);
267
 
268
static void add_bincl_to_list (struct partial_symtab *, char *, int);
269
 
270
static void init_bincl_list (int, struct objfile *);
271
 
272
static char *dbx_next_symbol_text (struct objfile *);
273
 
274
static void fill_symbuf (bfd *);
275
 
276
static void dbx_symfile_init (struct objfile *);
277
 
278
static void dbx_new_init (struct objfile *);
279
 
280
static void dbx_symfile_read (struct objfile *, int);
281
 
282
static void dbx_symfile_finish (struct objfile *);
283
 
284
static void record_minimal_symbol (char *, CORE_ADDR, int, struct objfile *);
285
 
286
static void add_new_header_file (char *, int);
287
 
288
static void add_old_header_file (char *, int);
289
 
290
static void add_this_object_header_file (int);
291
 
292
static struct partial_symtab *start_psymtab (struct objfile *, char *,
293
                                             CORE_ADDR, int,
294
                                             struct partial_symbol **,
295
                                             struct partial_symbol **);
296
 
297
/* Free up old header file tables */
298
 
299
void
300
free_header_files (void)
301
{
302
  if (this_object_header_files)
303
    {
304
      xfree (this_object_header_files);
305
      this_object_header_files = NULL;
306
    }
307
  n_allocated_this_object_header_files = 0;
308
}
309
 
310
/* Allocate new header file tables */
311
 
312
void
313
init_header_files (void)
314
{
315
  n_allocated_this_object_header_files = 10;
316
  this_object_header_files = (int *) xmalloc (10 * sizeof (int));
317
}
318
 
319
/* Add header file number I for this object file
320
   at the next successive FILENUM.  */
321
 
322
static void
323
add_this_object_header_file (int i)
324
{
325
  if (n_this_object_header_files == n_allocated_this_object_header_files)
326
    {
327
      n_allocated_this_object_header_files *= 2;
328
      this_object_header_files
329
        = (int *) xrealloc ((char *) this_object_header_files,
330
                       n_allocated_this_object_header_files * sizeof (int));
331
    }
332
 
333
  this_object_header_files[n_this_object_header_files++] = i;
334
}
335
 
336
/* Add to this file an "old" header file, one already seen in
337
   a previous object file.  NAME is the header file's name.
338
   INSTANCE is its instance code, to select among multiple
339
   symbol tables for the same header file.  */
340
 
341
static void
342
add_old_header_file (char *name, int instance)
343
{
344
  struct header_file *p = HEADER_FILES (current_objfile);
345
  int i;
346
 
347
  for (i = 0; i < N_HEADER_FILES (current_objfile); i++)
348
    if (strcmp (p[i].name, name) == 0 && instance == p[i].instance)
349
      {
350
        add_this_object_header_file (i);
351
        return;
352
      }
353
  repeated_header_complaint (name, symnum);
354
}
355
 
356
/* Add to this file a "new" header file: definitions for its types follow.
357
   NAME is the header file's name.
358
   Most often this happens only once for each distinct header file,
359
   but not necessarily.  If it happens more than once, INSTANCE has
360
   a different value each time, and references to the header file
361
   use INSTANCE values to select among them.
362
 
363
   dbx output contains "begin" and "end" markers for each new header file,
364
   but at this level we just need to know which files there have been;
365
   so we record the file when its "begin" is seen and ignore the "end".  */
366
 
367
static void
368
add_new_header_file (char *name, int instance)
369
{
370
  int i;
371
  struct header_file *hfile;
372
 
373
  /* Make sure there is room for one more header file.  */
374
 
375
  i = N_ALLOCATED_HEADER_FILES (current_objfile);
376
 
377
  if (N_HEADER_FILES (current_objfile) == i)
378
    {
379
      if (i == 0)
380
        {
381
          N_ALLOCATED_HEADER_FILES (current_objfile) = 10;
382
          HEADER_FILES (current_objfile) = (struct header_file *)
383
            xmalloc (10 * sizeof (struct header_file));
384
        }
385
      else
386
        {
387
          i *= 2;
388
          N_ALLOCATED_HEADER_FILES (current_objfile) = i;
389
          HEADER_FILES (current_objfile) = (struct header_file *)
390
            xrealloc ((char *) HEADER_FILES (current_objfile),
391
                      (i * sizeof (struct header_file)));
392
        }
393
    }
394
 
395
  /* Create an entry for this header file.  */
396
 
397
  i = N_HEADER_FILES (current_objfile)++;
398
  hfile = HEADER_FILES (current_objfile) + i;
399
  hfile->name = xstrdup (name);
400
  hfile->instance = instance;
401
  hfile->length = 10;
402
  hfile->vector
403
    = (struct type **) xmalloc (10 * sizeof (struct type *));
404
  memset (hfile->vector, 0, 10 * sizeof (struct type *));
405
 
406
  add_this_object_header_file (i);
407
}
408
 
409
#if 0
410
static struct type **
411
explicit_lookup_type (int real_filenum, int index)
412
{
413
  struct header_file *f = &HEADER_FILES (current_objfile)[real_filenum];
414
 
415
  if (index >= f->length)
416
    {
417
      f->length *= 2;
418
      f->vector = (struct type **)
419
        xrealloc (f->vector, f->length * sizeof (struct type *));
420
      memset (&f->vector[f->length / 2],
421
              '\0', f->length * sizeof (struct type *) / 2);
422
    }
423
  return &f->vector[index];
424
}
425
#endif
426
 
427
static void
428
record_minimal_symbol (char *name, CORE_ADDR address, int type,
429
                       struct objfile *objfile)
430
{
431
  enum minimal_symbol_type ms_type;
432
  int section;
433
  asection *bfd_section;
434
 
435
  switch (type)
436
    {
437
    case N_TEXT | N_EXT:
438
      ms_type = mst_text;
439
      section = SECT_OFF_TEXT (objfile);
440
      bfd_section = DBX_TEXT_SECTION (objfile);
441
      break;
442
    case N_DATA | N_EXT:
443
      ms_type = mst_data;
444
      section = SECT_OFF_DATA (objfile);
445
      bfd_section = DBX_DATA_SECTION (objfile);
446
      break;
447
    case N_BSS | N_EXT:
448
      ms_type = mst_bss;
449
      section = SECT_OFF_BSS (objfile);
450
      bfd_section = DBX_BSS_SECTION (objfile);
451
      break;
452
    case N_ABS | N_EXT:
453
      ms_type = mst_abs;
454
      section = -1;
455
      bfd_section = NULL;
456
      break;
457
#ifdef N_SETV
458
    case N_SETV | N_EXT:
459
      ms_type = mst_data;
460
      section = SECT_OFF_DATA (objfile);
461
      bfd_section = DBX_DATA_SECTION (objfile);
462
      break;
463
    case N_SETV:
464
      /* I don't think this type actually exists; since a N_SETV is the result
465
         of going over many .o files, it doesn't make sense to have one
466
         file local.  */
467
      ms_type = mst_file_data;
468
      section = SECT_OFF_DATA (objfile);
469
      bfd_section = DBX_DATA_SECTION (objfile);
470
      break;
471
#endif
472
    case N_TEXT:
473
    case N_NBTEXT:
474
    case N_FN:
475
    case N_FN_SEQ:
476
      ms_type = mst_file_text;
477
      section = SECT_OFF_TEXT (objfile);
478
      bfd_section = DBX_TEXT_SECTION (objfile);
479
      break;
480
    case N_DATA:
481
      ms_type = mst_file_data;
482
 
483
      /* Check for __DYNAMIC, which is used by Sun shared libraries.
484
         Record it as global even if it's local, not global, so
485
         lookup_minimal_symbol can find it.  We don't check symbol_leading_char
486
         because for SunOS4 it always is '_'.  */
487
      if (name[8] == 'C' && strcmp ("__DYNAMIC", name) == 0)
488
        ms_type = mst_data;
489
 
490
      /* Same with virtual function tables, both global and static.  */
491
      {
492
        char *tempstring = name;
493
 
494
        if (tempstring[0] == bfd_get_symbol_leading_char (objfile->obfd))
495
          ++tempstring;
496
        if (is_vtable_name (tempstring))
497
          ms_type = mst_data;
498
      }
499
      section = SECT_OFF_DATA (objfile);
500
      bfd_section = DBX_DATA_SECTION (objfile);
501
      break;
502
    case N_BSS:
503
      ms_type = mst_file_bss;
504
      section = SECT_OFF_BSS (objfile);
505
      bfd_section = DBX_BSS_SECTION (objfile);
506
      break;
507
    default:
508
      ms_type = mst_unknown;
509
      section = -1;
510
      bfd_section = NULL;
511
      break;
512
    }
513
 
514
  if ((ms_type == mst_file_text || ms_type == mst_text)
515
      && address < lowest_text_address)
516
    lowest_text_address = address;
517
 
518
  prim_record_minimal_symbol_and_info
519
    (name, address, ms_type, section, bfd_section, objfile);
520
}
521
 
522
/* Scan and build partial symbols for a symbol file.
523
   We have been initialized by a call to dbx_symfile_init, which
524
   put all the relevant info into a "struct dbx_symfile_info",
525
   hung off the objfile structure.  */
526
 
527
static void
528
dbx_symfile_read (struct objfile *objfile, int symfile_flags)
529
{
530
  bfd *sym_bfd;
531
  int val;
532
  struct cleanup *back_to;
533
 
534
  sym_bfd = objfile->obfd;
535
 
536
  /* .o and .nlm files are relocatables with text, data and bss segs based at
537
     0.  This flag disables special (Solaris stabs-in-elf only) fixups for
538
     symbols with a value of 0.  */
539
 
540
  symfile_relocatable = bfd_get_file_flags (sym_bfd) & HAS_RELOC;
541
 
542
  /* This is true for Solaris (and all other systems which put stabs
543
     in sections, hopefully, since it would be silly to do things
544
     differently from Solaris), and false for SunOS4 and other a.out
545
     file formats.  */
546
  block_address_function_relative =
547
    ((0 == strncmp (bfd_get_target (sym_bfd), "elf", 3))
548
     || (0 == strncmp (bfd_get_target (sym_bfd), "som", 3))
549
     || (0 == strncmp (bfd_get_target (sym_bfd), "coff", 4))
550
     || (0 == strncmp (bfd_get_target (sym_bfd), "pe", 2))
551
     || (0 == strncmp (bfd_get_target (sym_bfd), "epoc-pe", 7))
552
     || (0 == strncmp (bfd_get_target (sym_bfd), "nlm", 3)));
553
 
554
  val = bfd_seek (sym_bfd, DBX_SYMTAB_OFFSET (objfile), SEEK_SET);
555
  if (val < 0)
556
    perror_with_name (objfile->name);
557
 
558
  /* Size the symbol table.  */
559
  if (objfile->global_psymbols.size == 0 && objfile->static_psymbols.size == 0)
560
    init_psymbol_list (objfile, DBX_SYMCOUNT (objfile));
561
 
562
  symbol_size = DBX_SYMBOL_SIZE (objfile);
563
  symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
564
 
565
  free_pending_blocks ();
566
  back_to = make_cleanup (really_free_pendings, 0);
567
 
568
  init_minimal_symbol_collection ();
569
  make_cleanup_discard_minimal_symbols ();
570
 
571
  /* Read stabs data from executable file and define symbols. */
572
 
573
  read_dbx_symtab (objfile);
574
 
575
  /* Add the dynamic symbols.  */
576
 
577
  read_dbx_dynamic_symtab (objfile);
578
 
579
  /* Install any minimal symbols that have been collected as the current
580
     minimal symbols for this objfile. */
581
 
582
  install_minimal_symbols (objfile);
583
 
584
  do_cleanups (back_to);
585
}
586
 
587
/* Initialize anything that needs initializing when a completely new
588
   symbol file is specified (not just adding some symbols from another
589
   file, e.g. a shared library).  */
590
 
591
static void
592
dbx_new_init (struct objfile *ignore)
593
{
594
  stabsread_new_init ();
595
  buildsym_new_init ();
596
  init_header_files ();
597
}
598
 
599
 
600
/* dbx_symfile_init ()
601
   is the dbx-specific initialization routine for reading symbols.
602
   It is passed a struct objfile which contains, among other things,
603
   the BFD for the file whose symbols are being read, and a slot for a pointer
604
   to "private data" which we fill with goodies.
605
 
606
   We read the string table into malloc'd space and stash a pointer to it.
607
 
608
   Since BFD doesn't know how to read debug symbols in a format-independent
609
   way (and may never do so...), we have to do it ourselves.  We will never
610
   be called unless this is an a.out (or very similar) file.
611
   FIXME, there should be a cleaner peephole into the BFD environment here.  */
612
 
613
#define DBX_STRINGTAB_SIZE_SIZE sizeof(long)    /* FIXME */
614
 
615
static void
616
dbx_symfile_init (struct objfile *objfile)
617
{
618
  int val;
619
  bfd *sym_bfd = objfile->obfd;
620
  char *name = bfd_get_filename (sym_bfd);
621
  asection *text_sect;
622
  unsigned char size_temp[DBX_STRINGTAB_SIZE_SIZE];
623
 
624
  /* Allocate struct to keep track of the symfile */
625
  objfile->deprecated_sym_stab_info = (struct dbx_symfile_info *)
626
    xmalloc (sizeof (struct dbx_symfile_info));
627
  memset (objfile->deprecated_sym_stab_info, 0,
628
          sizeof (struct dbx_symfile_info));
629
 
630
  DBX_TEXT_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
631
  DBX_DATA_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".data");
632
  DBX_BSS_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".bss");
633
 
634
  /* FIXME POKING INSIDE BFD DATA STRUCTURES */
635
#define STRING_TABLE_OFFSET     (sym_bfd->origin + obj_str_filepos (sym_bfd))
636
#define SYMBOL_TABLE_OFFSET     (sym_bfd->origin + obj_sym_filepos (sym_bfd))
637
 
638
  /* FIXME POKING INSIDE BFD DATA STRUCTURES */
639
 
640
  DBX_SYMFILE_INFO (objfile)->stab_section_info = NULL;
641
 
642
  text_sect = bfd_get_section_by_name (sym_bfd, ".text");
643
  if (!text_sect)
644
    error (_("Can't find .text section in symbol file"));
645
  DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
646
  DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
647
 
648
  DBX_SYMBOL_SIZE (objfile) = obj_symbol_entry_size (sym_bfd);
649
  DBX_SYMCOUNT (objfile) = bfd_get_symcount (sym_bfd);
650
  DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
651
 
652
  /* Read the string table and stash it away in the objfile_obstack.
653
     When we blow away the objfile the string table goes away as well.
654
     Note that gdb used to use the results of attempting to malloc the
655
     string table, based on the size it read, as a form of sanity check
656
     for botched byte swapping, on the theory that a byte swapped string
657
     table size would be so totally bogus that the malloc would fail.  Now
658
     that we put in on the objfile_obstack, we can't do this since gdb gets
659
     a fatal error (out of virtual memory) if the size is bogus.  We can
660
     however at least check to see if the size is less than the size of
661
     the size field itself, or larger than the size of the entire file.
662
     Note that all valid string tables have a size greater than zero, since
663
     the bytes used to hold the size are included in the count. */
664
 
665
  if (STRING_TABLE_OFFSET == 0)
666
    {
667
      /* It appears that with the existing bfd code, STRING_TABLE_OFFSET
668
         will never be zero, even when there is no string table.  This
669
         would appear to be a bug in bfd. */
670
      DBX_STRINGTAB_SIZE (objfile) = 0;
671
      DBX_STRINGTAB (objfile) = NULL;
672
    }
673
  else
674
    {
675
      val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
676
      if (val < 0)
677
        perror_with_name (name);
678
 
679
      memset (size_temp, 0, sizeof (size_temp));
680
      val = bfd_bread (size_temp, sizeof (size_temp), sym_bfd);
681
      if (val < 0)
682
        {
683
          perror_with_name (name);
684
        }
685
      else if (val == 0)
686
        {
687
          /* With the existing bfd code, STRING_TABLE_OFFSET will be set to
688
             EOF if there is no string table, and attempting to read the size
689
             from EOF will read zero bytes. */
690
          DBX_STRINGTAB_SIZE (objfile) = 0;
691
          DBX_STRINGTAB (objfile) = NULL;
692
        }
693
      else
694
        {
695
          /* Read some data that would appear to be the string table size.
696
             If there really is a string table, then it is probably the right
697
             size.  Byteswap if necessary and validate the size.  Note that
698
             the minimum is DBX_STRINGTAB_SIZE_SIZE.  If we just read some
699
             random data that happened to be at STRING_TABLE_OFFSET, because
700
             bfd can't tell us there is no string table, the sanity checks may
701
             or may not catch this. */
702
          DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
703
 
704
          if (DBX_STRINGTAB_SIZE (objfile) < sizeof (size_temp)
705
              || DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
706
            error (_("ridiculous string table size (%d bytes)."),
707
                   DBX_STRINGTAB_SIZE (objfile));
708
 
709
          DBX_STRINGTAB (objfile) =
710
            (char *) obstack_alloc (&objfile->objfile_obstack,
711
                                    DBX_STRINGTAB_SIZE (objfile));
712
          OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile));
713
 
714
          /* Now read in the string table in one big gulp.  */
715
 
716
          val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
717
          if (val < 0)
718
            perror_with_name (name);
719
          val = bfd_bread (DBX_STRINGTAB (objfile),
720
                           DBX_STRINGTAB_SIZE (objfile),
721
                           sym_bfd);
722
          if (val != DBX_STRINGTAB_SIZE (objfile))
723
            perror_with_name (name);
724
        }
725
    }
726
}
727
 
728
/* Perform any local cleanups required when we are done with a particular
729
   objfile.  I.E, we are in the process of discarding all symbol information
730
   for an objfile, freeing up all memory held for it, and unlinking the
731
   objfile struct from the global list of known objfiles. */
732
 
733
static void
734
dbx_symfile_finish (struct objfile *objfile)
735
{
736
  if (objfile->deprecated_sym_stab_info != NULL)
737
    {
738
      if (HEADER_FILES (objfile) != NULL)
739
        {
740
          int i = N_HEADER_FILES (objfile);
741
          struct header_file *hfiles = HEADER_FILES (objfile);
742
 
743
          while (--i >= 0)
744
            {
745
              xfree (hfiles[i].name);
746
              xfree (hfiles[i].vector);
747
            }
748
          xfree (hfiles);
749
        }
750
      xfree (objfile->deprecated_sym_stab_info);
751
    }
752
  free_header_files ();
753
}
754
 
755
 
756
/* Buffer for reading the symbol table entries.  */
757
static struct external_nlist symbuf[4096];
758
static int symbuf_idx;
759
static int symbuf_end;
760
 
761
/* Name of last function encountered.  Used in Solaris to approximate
762
   object file boundaries.  */
763
static char *last_function_name;
764
 
765
/* The address in memory of the string table of the object file we are
766
   reading (which might not be the "main" object file, but might be a
767
   shared library or some other dynamically loaded thing).  This is
768
   set by read_dbx_symtab when building psymtabs, and by
769
   read_ofile_symtab when building symtabs, and is used only by
770
   next_symbol_text.  FIXME: If that is true, we don't need it when
771
   building psymtabs, right?  */
772
static char *stringtab_global;
773
 
774
/* These variables are used to control fill_symbuf when the stabs
775
   symbols are not contiguous (as may be the case when a COFF file is
776
   linked using --split-by-reloc).  */
777
static struct stab_section_list *symbuf_sections;
778
static unsigned int symbuf_left;
779
static unsigned int symbuf_read;
780
 
781
/* This variable stores a global stabs buffer, if we read stabs into
782
   memory in one chunk in order to process relocations.  */
783
static bfd_byte *stabs_data;
784
 
785
/* Refill the symbol table input buffer
786
   and set the variables that control fetching entries from it.
787
   Reports an error if no data available.
788
   This function can read past the end of the symbol table
789
   (into the string table) but this does no harm.  */
790
 
791
static void
792
fill_symbuf (bfd *sym_bfd)
793
{
794
  unsigned int count;
795
  int nbytes;
796
 
797
  if (stabs_data)
798
    {
799
      nbytes = sizeof (symbuf);
800
      if (nbytes > symbuf_left)
801
        nbytes = symbuf_left;
802
      memcpy (symbuf, stabs_data + symbuf_read, nbytes);
803
    }
804
  else if (symbuf_sections == NULL)
805
    {
806
      count = sizeof (symbuf);
807
      nbytes = bfd_bread (symbuf, count, sym_bfd);
808
    }
809
  else
810
    {
811
      if (symbuf_left <= 0)
812
        {
813
          file_ptr filepos = symbuf_sections->section->filepos;
814
 
815
          if (bfd_seek (sym_bfd, filepos, SEEK_SET) != 0)
816
            perror_with_name (bfd_get_filename (sym_bfd));
817
          symbuf_left = bfd_section_size (sym_bfd, symbuf_sections->section);
818
          symbol_table_offset = filepos - symbuf_read;
819
          symbuf_sections = symbuf_sections->next;
820
        }
821
 
822
      count = symbuf_left;
823
      if (count > sizeof (symbuf))
824
        count = sizeof (symbuf);
825
      nbytes = bfd_bread (symbuf, count, sym_bfd);
826
    }
827
 
828
  if (nbytes < 0)
829
    perror_with_name (bfd_get_filename (sym_bfd));
830
  else if (nbytes == 0)
831
    error (_("Premature end of file reading symbol table"));
832
  symbuf_end = nbytes / symbol_size;
833
  symbuf_idx = 0;
834
  symbuf_left -= nbytes;
835
  symbuf_read += nbytes;
836
}
837
 
838
static void
839
stabs_seek (int sym_offset)
840
{
841
  if (stabs_data)
842
    {
843
      symbuf_read += sym_offset;
844
      symbuf_left -= sym_offset;
845
    }
846
  else
847
    bfd_seek (symfile_bfd, sym_offset, SEEK_CUR);
848
}
849
 
850
#define INTERNALIZE_SYMBOL(intern, extern, abfd)                        \
851
  {                                                                     \
852
    (intern).n_strx = bfd_h_get_32 (abfd, (extern)->e_strx);            \
853
    (intern).n_type = bfd_h_get_8 (abfd, (extern)->e_type);             \
854
    (intern).n_other = 0;                                                \
855
    (intern).n_desc = bfd_h_get_16 (abfd, (extern)->e_desc);            \
856
    if (bfd_get_sign_extend_vma (abfd))                                 \
857
      (intern).n_value = bfd_h_get_signed_32 (abfd, (extern)->e_value); \
858
    else                                                                \
859
      (intern).n_value = bfd_h_get_32 (abfd, (extern)->e_value);        \
860
  }
861
 
862
/* Invariant: The symbol pointed to by symbuf_idx is the first one
863
   that hasn't been swapped.  Swap the symbol at the same time
864
   that symbuf_idx is incremented.  */
865
 
866
/* dbx allows the text of a symbol name to be continued into the
867
   next symbol name!  When such a continuation is encountered
868
   (a \ at the end of the text of a name)
869
   call this function to get the continuation.  */
870
 
871
static char *
872
dbx_next_symbol_text (struct objfile *objfile)
873
{
874
  struct internal_nlist nlist;
875
 
876
  if (symbuf_idx == symbuf_end)
877
    fill_symbuf (symfile_bfd);
878
 
879
  symnum++;
880
  INTERNALIZE_SYMBOL (nlist, &symbuf[symbuf_idx], symfile_bfd);
881
  OBJSTAT (objfile, n_stabs++);
882
 
883
  symbuf_idx++;
884
 
885
  return nlist.n_strx + stringtab_global + file_string_table_offset;
886
}
887
 
888
/* Initialize the list of bincls to contain none and have some
889
   allocated.  */
890
 
891
static void
892
init_bincl_list (int number, struct objfile *objfile)
893
{
894
  bincls_allocated = number;
895
  next_bincl = bincl_list = (struct header_file_location *)
896
    xmalloc (bincls_allocated * sizeof (struct header_file_location));
897
}
898
 
899
/* Add a bincl to the list.  */
900
 
901
static void
902
add_bincl_to_list (struct partial_symtab *pst, char *name, int instance)
903
{
904
  if (next_bincl >= bincl_list + bincls_allocated)
905
    {
906
      int offset = next_bincl - bincl_list;
907
 
908
      bincls_allocated *= 2;
909
      bincl_list = (struct header_file_location *)
910
        xrealloc ((char *) bincl_list,
911
                  bincls_allocated * sizeof (struct header_file_location));
912
      next_bincl = bincl_list + offset;
913
    }
914
  next_bincl->pst = pst;
915
  next_bincl->instance = instance;
916
  next_bincl++->name = name;
917
}
918
 
919
/* Given a name, value pair, find the corresponding
920
   bincl in the list.  Return the partial symtab associated
921
   with that header_file_location.  */
922
 
923
static struct partial_symtab *
924
find_corresponding_bincl_psymtab (char *name, int instance)
925
{
926
  struct header_file_location *bincl;
927
 
928
  for (bincl = bincl_list; bincl < next_bincl; bincl++)
929
    if (bincl->instance == instance
930
        && strcmp (name, bincl->name) == 0)
931
      return bincl->pst;
932
 
933
  repeated_header_complaint (name, symnum);
934
  return (struct partial_symtab *) 0;
935
}
936
 
937
/* Free the storage allocated for the bincl list.  */
938
 
939
static void
940
free_bincl_list (struct objfile *objfile)
941
{
942
  xfree (bincl_list);
943
  bincls_allocated = 0;
944
}
945
 
946
static void
947
do_free_bincl_list_cleanup (void *objfile)
948
{
949
  free_bincl_list (objfile);
950
}
951
 
952
static struct cleanup *
953
make_cleanup_free_bincl_list (struct objfile *objfile)
954
{
955
  return make_cleanup (do_free_bincl_list_cleanup, objfile);
956
}
957
 
958
/* Set namestring based on nlist.  If the string table index is invalid,
959
   give a fake name, and print a single error message per symbol file read,
960
   rather than abort the symbol reading or flood the user with messages.  */
961
 
962
static char *
963
set_namestring (struct objfile *objfile, const struct internal_nlist *nlist)
964
{
965
  char *namestring;
966
 
967
  if (nlist->n_strx + file_string_table_offset
968
      >= DBX_STRINGTAB_SIZE (objfile)
969
      || nlist->n_strx + file_string_table_offset < nlist->n_strx)
970
    {
971
      complaint (&symfile_complaints, _("bad string table offset in symbol %d"),
972
                 symnum);
973
      namestring = "<bad string table offset>";
974
    }
975
  else
976
    namestring = (nlist->n_strx + file_string_table_offset
977
                  + DBX_STRINGTAB (objfile));
978
  return namestring;
979
}
980
 
981
/* Scan a SunOs dynamic symbol table for symbols of interest and
982
   add them to the minimal symbol table.  */
983
 
984
static void
985
read_dbx_dynamic_symtab (struct objfile *objfile)
986
{
987
  bfd *abfd = objfile->obfd;
988
  struct cleanup *back_to;
989
  int counter;
990
  long dynsym_size;
991
  long dynsym_count;
992
  asymbol **dynsyms;
993
  asymbol **symptr;
994
  arelent **relptr;
995
  long dynrel_size;
996
  long dynrel_count;
997
  arelent **dynrels;
998
  CORE_ADDR sym_value;
999
  char *name;
1000
 
1001
  /* Check that the symbol file has dynamic symbols that we know about.
1002
     bfd_arch_unknown can happen if we are reading a sun3 symbol file
1003
     on a sun4 host (and vice versa) and bfd is not configured
1004
     --with-target=all.  This would trigger an assertion in bfd/sunos.c,
1005
     so we ignore the dynamic symbols in this case.  */
1006
  if (bfd_get_flavour (abfd) != bfd_target_aout_flavour
1007
      || (bfd_get_file_flags (abfd) & DYNAMIC) == 0
1008
      || bfd_get_arch (abfd) == bfd_arch_unknown)
1009
    return;
1010
 
1011
  dynsym_size = bfd_get_dynamic_symtab_upper_bound (abfd);
1012
  if (dynsym_size < 0)
1013
    return;
1014
 
1015
  dynsyms = (asymbol **) xmalloc (dynsym_size);
1016
  back_to = make_cleanup (xfree, dynsyms);
1017
 
1018
  dynsym_count = bfd_canonicalize_dynamic_symtab (abfd, dynsyms);
1019
  if (dynsym_count < 0)
1020
    {
1021
      do_cleanups (back_to);
1022
      return;
1023
    }
1024
 
1025
  /* Enter dynamic symbols into the minimal symbol table
1026
     if this is a stripped executable.  */
1027
  if (bfd_get_symcount (abfd) <= 0)
1028
    {
1029
      symptr = dynsyms;
1030
      for (counter = 0; counter < dynsym_count; counter++, symptr++)
1031
        {
1032
          asymbol *sym = *symptr;
1033
          asection *sec;
1034
          int type;
1035
 
1036
          sec = bfd_get_section (sym);
1037
 
1038
          /* BFD symbols are section relative.  */
1039
          sym_value = sym->value + sec->vma;
1040
 
1041
          if (bfd_get_section_flags (abfd, sec) & SEC_CODE)
1042
            {
1043
              sym_value += ANOFFSET (objfile->section_offsets,
1044
                                     SECT_OFF_TEXT (objfile));
1045
              type = N_TEXT;
1046
            }
1047
          else if (bfd_get_section_flags (abfd, sec) & SEC_DATA)
1048
            {
1049
              sym_value += ANOFFSET (objfile->section_offsets,
1050
                                     SECT_OFF_DATA (objfile));
1051
              type = N_DATA;
1052
            }
1053
          else if (bfd_get_section_flags (abfd, sec) & SEC_ALLOC)
1054
            {
1055
              sym_value += ANOFFSET (objfile->section_offsets,
1056
                                     SECT_OFF_BSS (objfile));
1057
              type = N_BSS;
1058
            }
1059
          else
1060
            continue;
1061
 
1062
          if (sym->flags & BSF_GLOBAL)
1063
            type |= N_EXT;
1064
 
1065
          record_minimal_symbol ((char *) bfd_asymbol_name (sym), sym_value,
1066
                                 type, objfile);
1067
        }
1068
    }
1069
 
1070
  /* Symbols from shared libraries have a dynamic relocation entry
1071
     that points to the associated slot in the procedure linkage table.
1072
     We make a mininal symbol table entry with type mst_solib_trampoline
1073
     at the address in the procedure linkage table.  */
1074
  dynrel_size = bfd_get_dynamic_reloc_upper_bound (abfd);
1075
  if (dynrel_size < 0)
1076
    {
1077
      do_cleanups (back_to);
1078
      return;
1079
    }
1080
 
1081
  dynrels = (arelent **) xmalloc (dynrel_size);
1082
  make_cleanup (xfree, dynrels);
1083
 
1084
  dynrel_count = bfd_canonicalize_dynamic_reloc (abfd, dynrels, dynsyms);
1085
  if (dynrel_count < 0)
1086
    {
1087
      do_cleanups (back_to);
1088
      return;
1089
    }
1090
 
1091
  for (counter = 0, relptr = dynrels;
1092
       counter < dynrel_count;
1093
       counter++, relptr++)
1094
    {
1095
      arelent *rel = *relptr;
1096
      CORE_ADDR address =
1097
        rel->address + ANOFFSET (objfile->section_offsets,
1098
                                 SECT_OFF_DATA (objfile));
1099
 
1100
      switch (bfd_get_arch (abfd))
1101
        {
1102
        case bfd_arch_sparc:
1103
          if (rel->howto->type != RELOC_JMP_SLOT)
1104
            continue;
1105
          break;
1106
        case bfd_arch_m68k:
1107
          /* `16' is the type BFD produces for a jump table relocation.  */
1108
          if (rel->howto->type != 16)
1109
            continue;
1110
 
1111
          /* Adjust address in the jump table to point to
1112
             the start of the bsr instruction.  */
1113
          address -= 2;
1114
          break;
1115
        default:
1116
          continue;
1117
        }
1118
 
1119
      name = (char *) bfd_asymbol_name (*rel->sym_ptr_ptr);
1120
      prim_record_minimal_symbol (name, address, mst_solib_trampoline,
1121
                                  objfile);
1122
    }
1123
 
1124
  do_cleanups (back_to);
1125
}
1126
 
1127
static CORE_ADDR
1128
find_stab_function_addr (char *namestring, char *filename,
1129
                         struct objfile *objfile)
1130
{
1131
  struct minimal_symbol *msym;
1132
  char *p;
1133
  int n;
1134
 
1135
  p = strchr (namestring, ':');
1136
  if (p == NULL)
1137
    p = namestring;
1138
  n = p - namestring;
1139
  p = alloca (n + 2);
1140
  strncpy (p, namestring, n);
1141
  p[n] = 0;
1142
 
1143
  msym = lookup_minimal_symbol (p, filename, objfile);
1144
  if (msym == NULL)
1145
    {
1146
      /* Sun Fortran appends an underscore to the minimal symbol name,
1147
         try again with an appended underscore if the minimal symbol
1148
         was not found.  */
1149
      p[n] = '_';
1150
      p[n + 1] = 0;
1151
      msym = lookup_minimal_symbol (p, filename, objfile);
1152
    }
1153
 
1154
  if (msym == NULL && filename != NULL)
1155
    {
1156
      /* Try again without the filename. */
1157
      p[n] = 0;
1158
      msym = lookup_minimal_symbol (p, NULL, objfile);
1159
    }
1160
  if (msym == NULL && filename != NULL)
1161
    {
1162
      /* And try again for Sun Fortran, but without the filename. */
1163
      p[n] = '_';
1164
      p[n + 1] = 0;
1165
      msym = lookup_minimal_symbol (p, NULL, objfile);
1166
    }
1167
 
1168
  return msym == NULL ? 0 : SYMBOL_VALUE_ADDRESS (msym);
1169
}
1170
 
1171
static void
1172
function_outside_compilation_unit_complaint (const char *arg1)
1173
{
1174
  complaint (&symfile_complaints,
1175
             _("function `%s' appears to be defined outside of all compilation \
1176
units"),
1177
             arg1);
1178
}
1179
 
1180
/* Setup partial_symtab's describing each source file for which
1181
   debugging information is available. */
1182
 
1183
static void
1184
read_dbx_symtab (struct objfile *objfile)
1185
{
1186
  struct gdbarch *gdbarch = get_objfile_arch (objfile);
1187
  struct external_nlist *bufp = 0;       /* =0 avoids gcc -Wall glitch */
1188
  struct internal_nlist nlist;
1189
  CORE_ADDR text_addr;
1190
  int text_size;
1191
  char *sym_name;
1192
  int sym_len;
1193
 
1194
  char *namestring;
1195
  int nsl;
1196
  int past_first_source_file = 0;
1197
  CORE_ADDR last_o_file_start = 0;
1198
  CORE_ADDR last_function_start = 0;
1199
  struct cleanup *back_to;
1200
  bfd *abfd;
1201
  int textlow_not_set;
1202
  int data_sect_index;
1203
 
1204
  /* Current partial symtab */
1205
  struct partial_symtab *pst;
1206
 
1207
  /* List of current psymtab's include files */
1208
  char **psymtab_include_list;
1209
  int includes_allocated;
1210
  int includes_used;
1211
 
1212
  /* Index within current psymtab dependency list */
1213
  struct partial_symtab **dependency_list;
1214
  int dependencies_used, dependencies_allocated;
1215
 
1216
  text_addr = DBX_TEXT_ADDR (objfile);
1217
  text_size = DBX_TEXT_SIZE (objfile);
1218
 
1219
  /* FIXME.  We probably want to change stringtab_global rather than add this
1220
     while processing every symbol entry.  FIXME.  */
1221
  file_string_table_offset = 0;
1222
  next_file_string_table_offset = 0;
1223
 
1224
  stringtab_global = DBX_STRINGTAB (objfile);
1225
 
1226
  pst = (struct partial_symtab *) 0;
1227
 
1228
  includes_allocated = 30;
1229
  includes_used = 0;
1230
  psymtab_include_list = (char **) alloca (includes_allocated *
1231
                                           sizeof (char *));
1232
 
1233
  dependencies_allocated = 30;
1234
  dependencies_used = 0;
1235
  dependency_list =
1236
    (struct partial_symtab **) alloca (dependencies_allocated *
1237
                                       sizeof (struct partial_symtab *));
1238
 
1239
  /* Init bincl list */
1240
  init_bincl_list (20, objfile);
1241
  back_to = make_cleanup_free_bincl_list (objfile);
1242
 
1243
  last_source_file = NULL;
1244
 
1245
  lowest_text_address = (CORE_ADDR) -1;
1246
 
1247
  symfile_bfd = objfile->obfd;  /* For next_text_symbol */
1248
  abfd = objfile->obfd;
1249
  symbuf_end = symbuf_idx = 0;
1250
  next_symbol_text_func = dbx_next_symbol_text;
1251
  textlow_not_set = 1;
1252
  has_line_numbers = 0;
1253
 
1254
  /* FIXME: jimb/2003-09-12: We don't apply the right section's offset
1255
     to global and static variables.  The stab for a global or static
1256
     variable doesn't give us any indication of which section it's in,
1257
     so we can't tell immediately which offset in
1258
     objfile->section_offsets we should apply to the variable's
1259
     address.
1260
 
1261
     We could certainly find out which section contains the variable
1262
     by looking up the variable's unrelocated address with
1263
     find_pc_section, but that would be expensive; this is the
1264
     function that constructs the partial symbol tables by examining
1265
     every symbol in the entire executable, and it's
1266
     performance-critical.  So that expense would not be welcome.  I'm
1267
     not sure what to do about this at the moment.
1268
 
1269
     What we have done for years is to simply assume that the .data
1270
     section's offset is appropriate for all global and static
1271
     variables.  Recently, this was expanded to fall back to the .bss
1272
     section's offset if there is no .data section, and then to the
1273
     .rodata section's offset.  */
1274
  data_sect_index = objfile->sect_index_data;
1275
  if (data_sect_index == -1)
1276
    data_sect_index = SECT_OFF_BSS (objfile);
1277
  if (data_sect_index == -1)
1278
    data_sect_index = SECT_OFF_RODATA (objfile);
1279
 
1280
  /* If data_sect_index is still -1, that's okay.  It's perfectly fine
1281
     for the file to have no .data, no .bss, and no .text at all, if
1282
     it also has no global or static variables.  If it does, we will
1283
     get an internal error from an ANOFFSET macro below when we try to
1284
     use data_sect_index.  */
1285
 
1286
  for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++)
1287
    {
1288
      /* Get the symbol for this run and pull out some info */
1289
      QUIT;                     /* allow this to be interruptable */
1290
      if (symbuf_idx == symbuf_end)
1291
        fill_symbuf (abfd);
1292
      bufp = &symbuf[symbuf_idx++];
1293
 
1294
      /*
1295
       * Special case to speed up readin.
1296
       */
1297
      if (bfd_h_get_8 (abfd, bufp->e_type) == N_SLINE)
1298
        {
1299
          has_line_numbers = 1;
1300
          continue;
1301
        }
1302
 
1303
      INTERNALIZE_SYMBOL (nlist, bufp, abfd);
1304
      OBJSTAT (objfile, n_stabs++);
1305
 
1306
      /* Ok.  There is a lot of code duplicated in the rest of this
1307
         switch statement (for efficiency reasons).  Since I don't
1308
         like duplicating code, I will do my penance here, and
1309
         describe the code which is duplicated:
1310
 
1311
         *) The assignment to namestring.
1312
         *) The call to strchr.
1313
         *) The addition of a partial symbol the the two partial
1314
         symbol lists.  This last is a large section of code, so
1315
         I've imbedded it in the following macro.
1316
      */
1317
 
1318
      switch (nlist.n_type)
1319
        {
1320
          /*
1321
           * Standard, external, non-debugger, symbols
1322
           */
1323
 
1324
        case N_TEXT | N_EXT:
1325
        case N_NBTEXT | N_EXT:
1326
          nlist.n_value += ANOFFSET (objfile->section_offsets,
1327
                                     SECT_OFF_TEXT (objfile));
1328
          goto record_it;
1329
 
1330
        case N_DATA | N_EXT:
1331
        case N_NBDATA | N_EXT:
1332
          nlist.n_value += ANOFFSET (objfile->section_offsets,
1333
                                     SECT_OFF_DATA (objfile));
1334
          goto record_it;
1335
 
1336
        case N_BSS:
1337
        case N_BSS | N_EXT:
1338
        case N_NBBSS | N_EXT:
1339
        case N_SETV | N_EXT:            /* FIXME, is this in BSS? */
1340
          nlist.n_value += ANOFFSET (objfile->section_offsets,
1341
                                     SECT_OFF_BSS (objfile));
1342
          goto record_it;
1343
 
1344
        case N_ABS | N_EXT:
1345
          record_it:
1346
          namestring = set_namestring (objfile, &nlist);
1347
 
1348
        bss_ext_symbol:
1349
          record_minimal_symbol (namestring, nlist.n_value,
1350
                                 nlist.n_type, objfile);        /* Always */
1351
          continue;
1352
 
1353
          /* Standard, local, non-debugger, symbols */
1354
 
1355
        case N_NBTEXT:
1356
 
1357
          /* We need to be able to deal with both N_FN or N_TEXT,
1358
             because we have no way of knowing whether the sys-supplied ld
1359
             or GNU ld was used to make the executable.  Sequents throw
1360
             in another wrinkle -- they renumbered N_FN.  */
1361
 
1362
        case N_FN:
1363
        case N_FN_SEQ:
1364
        case N_TEXT:
1365
          nlist.n_value += ANOFFSET (objfile->section_offsets,
1366
                                     SECT_OFF_TEXT (objfile));
1367
          namestring = set_namestring (objfile, &nlist);
1368
 
1369
          if ((namestring[0] == '-' && namestring[1] == 'l')
1370
              || (namestring[(nsl = strlen (namestring)) - 1] == 'o'
1371
                  && namestring[nsl - 2] == '.'))
1372
            {
1373
              if (past_first_source_file && pst
1374
                  /* The gould NP1 uses low values for .o and -l symbols
1375
                     which are not the address.  */
1376
                  && nlist.n_value >= pst->textlow)
1377
                {
1378
                  end_psymtab (pst, psymtab_include_list, includes_used,
1379
                               symnum * symbol_size,
1380
                               nlist.n_value > pst->texthigh
1381
                               ? nlist.n_value : pst->texthigh,
1382
                               dependency_list, dependencies_used,
1383
                               textlow_not_set);
1384
                  pst = (struct partial_symtab *) 0;
1385
                  includes_used = 0;
1386
                  dependencies_used = 0;
1387
                  has_line_numbers = 0;
1388
                }
1389
              else
1390
                past_first_source_file = 1;
1391
              last_o_file_start = nlist.n_value;
1392
            }
1393
          else
1394
            goto record_it;
1395
          continue;
1396
 
1397
        case N_DATA:
1398
          nlist.n_value += ANOFFSET (objfile->section_offsets,
1399
                                     SECT_OFF_DATA (objfile));
1400
          goto record_it;
1401
 
1402
        case N_UNDF | N_EXT:
1403
          if (nlist.n_value != 0)
1404
            {
1405
              /* This is a "Fortran COMMON" symbol.  See if the target
1406
                 environment knows where it has been relocated to.  */
1407
 
1408
              CORE_ADDR reladdr;
1409
 
1410
              namestring = set_namestring (objfile, &nlist);
1411
              if (target_lookup_symbol (namestring, &reladdr))
1412
                {
1413
                  continue;     /* Error in lookup; ignore symbol for now.  */
1414
                }
1415
              nlist.n_type ^= (N_BSS ^ N_UNDF); /* Define it as a bss-symbol */
1416
              nlist.n_value = reladdr;
1417
              goto bss_ext_symbol;
1418
            }
1419
          continue;                     /* Just undefined, not COMMON */
1420
 
1421
        case N_UNDF:
1422
          if (processing_acc_compilation && nlist.n_strx == 1)
1423
            {
1424
              /* Deal with relative offsets in the string table
1425
                 used in ELF+STAB under Solaris.  If we want to use the
1426
                 n_strx field, which contains the name of the file,
1427
                 we must adjust file_string_table_offset *before* calling
1428
                 set_namestring().  */
1429
              past_first_source_file = 1;
1430
              file_string_table_offset = next_file_string_table_offset;
1431
              next_file_string_table_offset =
1432
                file_string_table_offset + nlist.n_value;
1433
              if (next_file_string_table_offset < file_string_table_offset)
1434
                error (_("string table offset backs up at %d"), symnum);
1435
              /* FIXME -- replace error() with complaint.  */
1436
              continue;
1437
            }
1438
          continue;
1439
 
1440
          /* Lots of symbol types we can just ignore.  */
1441
 
1442
        case N_ABS:
1443
        case N_NBDATA:
1444
        case N_NBBSS:
1445
          continue;
1446
 
1447
          /* Keep going . . . */
1448
 
1449
          /*
1450
           * Special symbol types for GNU
1451
           */
1452
        case N_INDR:
1453
        case N_INDR | N_EXT:
1454
        case N_SETA:
1455
        case N_SETA | N_EXT:
1456
        case N_SETT:
1457
        case N_SETT | N_EXT:
1458
        case N_SETD:
1459
        case N_SETD | N_EXT:
1460
        case N_SETB:
1461
        case N_SETB | N_EXT:
1462
        case N_SETV:
1463
          continue;
1464
 
1465
          /*
1466
           * Debugger symbols
1467
           */
1468
 
1469
        case N_SO:
1470
          {
1471
            CORE_ADDR valu;
1472
            static int prev_so_symnum = -10;
1473
            static int first_so_symnum;
1474
            char *p;
1475
            static char *dirname_nso;
1476
            int prev_textlow_not_set;
1477
 
1478
            valu = nlist.n_value + ANOFFSET (objfile->section_offsets,
1479
                                             SECT_OFF_TEXT (objfile));
1480
 
1481
            prev_textlow_not_set = textlow_not_set;
1482
 
1483
            /* A zero value is probably an indication for the SunPRO 3.0
1484
               compiler. end_psymtab explicitly tests for zero, so
1485
               don't relocate it.  */
1486
 
1487
            if (nlist.n_value == 0
1488
                && gdbarch_sofun_address_maybe_missing (gdbarch))
1489
              {
1490
                textlow_not_set = 1;
1491
                valu = 0;
1492
              }
1493
            else
1494
              textlow_not_set = 0;
1495
 
1496
            past_first_source_file = 1;
1497
 
1498
            if (prev_so_symnum != symnum - 1)
1499
              {                 /* Here if prev stab wasn't N_SO */
1500
                first_so_symnum = symnum;
1501
 
1502
                if (pst)
1503
                  {
1504
                    end_psymtab (pst, psymtab_include_list, includes_used,
1505
                                 symnum * symbol_size,
1506
                                 valu > pst->texthigh ? valu : pst->texthigh,
1507
                                 dependency_list, dependencies_used,
1508
                                 prev_textlow_not_set);
1509
                    pst = (struct partial_symtab *) 0;
1510
                    includes_used = 0;
1511
                    dependencies_used = 0;
1512
                    has_line_numbers = 0;
1513
                  }
1514
              }
1515
 
1516
            prev_so_symnum = symnum;
1517
 
1518
            /* End the current partial symtab and start a new one */
1519
 
1520
            namestring = set_namestring (objfile, &nlist);
1521
 
1522
            /* Null name means end of .o file.  Don't start a new one. */
1523
            if (*namestring == '\000')
1524
              continue;
1525
 
1526
            /* Some compilers (including gcc) emit a pair of initial N_SOs.
1527
               The first one is a directory name; the second the file name.
1528
               If pst exists, is empty, and has a filename ending in '/',
1529
               we assume the previous N_SO was a directory name. */
1530
 
1531
            p = strrchr (namestring, '/');
1532
            if (p && *(p + 1) == '\000')
1533
              {
1534
                /* Save the directory name SOs locally, then save it into
1535
                   the psymtab when it's created below. */
1536
                dirname_nso = namestring;
1537
                continue;
1538
              }
1539
 
1540
            /* Some other compilers (C++ ones in particular) emit useless
1541
               SOs for non-existant .c files.  We ignore all subsequent SOs
1542
               that immediately follow the first.  */
1543
 
1544
            if (!pst)
1545
              {
1546
                pst = start_psymtab (objfile,
1547
                                     namestring, valu,
1548
                                     first_so_symnum * symbol_size,
1549
                                     objfile->global_psymbols.next,
1550
                                     objfile->static_psymbols.next);
1551
                pst->dirname = dirname_nso;
1552
                dirname_nso = NULL;
1553
              }
1554
            continue;
1555
          }
1556
 
1557
        case N_BINCL:
1558
          {
1559
            enum language tmp_language;
1560
 
1561
            /* Add this bincl to the bincl_list for future EXCLs.  No
1562
               need to save the string; it'll be around until
1563
               read_dbx_symtab function returns */
1564
 
1565
            namestring = set_namestring (objfile, &nlist);
1566
            tmp_language = deduce_language_from_filename (namestring);
1567
 
1568
            /* Only change the psymtab's language if we've learned
1569
               something useful (eg. tmp_language is not language_unknown).
1570
               In addition, to match what start_subfile does, never change
1571
               from C++ to C.  */
1572
            if (tmp_language != language_unknown
1573
                && (tmp_language != language_c
1574
                    || psymtab_language != language_cplus))
1575
              psymtab_language = tmp_language;
1576
 
1577
            if (pst == NULL)
1578
              {
1579
                /* FIXME: we should not get here without a PST to work on.
1580
                   Attempt to recover.  */
1581
                complaint (&symfile_complaints,
1582
                           _("N_BINCL %s not in entries for any file, at symtab \
1583
pos %d"),
1584
                           namestring, symnum);
1585
                continue;
1586
              }
1587
            add_bincl_to_list (pst, namestring, nlist.n_value);
1588
 
1589
            /* Mark down an include file in the current psymtab */
1590
 
1591
            goto record_include_file;
1592
          }
1593
 
1594
        case N_SOL:
1595
          {
1596
            enum language tmp_language;
1597
 
1598
            /* Mark down an include file in the current psymtab */
1599
            namestring = set_namestring (objfile, &nlist);
1600
            tmp_language = deduce_language_from_filename (namestring);
1601
 
1602
            /* Only change the psymtab's language if we've learned
1603
               something useful (eg. tmp_language is not language_unknown).
1604
               In addition, to match what start_subfile does, never change
1605
               from C++ to C.  */
1606
            if (tmp_language != language_unknown
1607
                && (tmp_language != language_c
1608
                    || psymtab_language != language_cplus))
1609
              psymtab_language = tmp_language;
1610
 
1611
            /* In C++, one may expect the same filename to come round many
1612
               times, when code is coming alternately from the main file
1613
               and from inline functions in other files. So I check to see
1614
               if this is a file we've seen before -- either the main
1615
               source file, or a previously included file.
1616
 
1617
               This seems to be a lot of time to be spending on N_SOL, but
1618
               things like "break c-exp.y:435" need to work (I
1619
               suppose the psymtab_include_list could be hashed or put
1620
               in a binary tree, if profiling shows this is a major hog).  */
1621
            if (pst && strcmp (namestring, pst->filename) == 0)
1622
              continue;
1623
            {
1624
              int i;
1625
 
1626
              for (i = 0; i < includes_used; i++)
1627
                if (strcmp (namestring, psymtab_include_list[i]) == 0)
1628
                  {
1629
                    i = -1;
1630
                    break;
1631
                  }
1632
              if (i == -1)
1633
                continue;
1634
            }
1635
 
1636
          record_include_file:
1637
 
1638
            psymtab_include_list[includes_used++] = namestring;
1639
            if (includes_used >= includes_allocated)
1640
              {
1641
                char **orig = psymtab_include_list;
1642
 
1643
                psymtab_include_list = (char **)
1644
                  alloca ((includes_allocated *= 2) * sizeof (char *));
1645
                memcpy (psymtab_include_list, orig,
1646
                        includes_used * sizeof (char *));
1647
              }
1648
            continue;
1649
          }
1650
        case N_LSYM:            /* Typedef or automatic variable. */
1651
        case N_STSYM:           /* Data seg var -- static  */
1652
        case N_LCSYM:           /* BSS      "  */
1653
        case N_ROSYM:           /* Read-only data seg var -- static.  */
1654
        case N_NBSTS:           /* Gould nobase.  */
1655
        case N_NBLCS:           /* symbols.  */
1656
        case N_FUN:
1657
        case N_GSYM:            /* Global (extern) variable; can be
1658
                                   data or bss (sigh FIXME).  */
1659
 
1660
          /* Following may probably be ignored; I'll leave them here
1661
             for now (until I do Pascal and Modula 2 extensions).  */
1662
 
1663
        case N_PC:              /* I may or may not need this; I
1664
                                   suspect not.  */
1665
        case N_M2C:             /* I suspect that I can ignore this here. */
1666
        case N_SCOPE:           /* Same.   */
1667
        {
1668
          char *p;
1669
 
1670
          namestring = set_namestring (objfile, &nlist);
1671
 
1672
          /* See if this is an end of function stab.  */
1673
          if (pst && nlist.n_type == N_FUN && *namestring == '\000')
1674
            {
1675
              CORE_ADDR valu;
1676
 
1677
              /* It's value is the size (in bytes) of the function for
1678
                 function relative stabs, or the address of the function's
1679
                 end for old style stabs.  */
1680
              valu = nlist.n_value + last_function_start;
1681
              if (pst->texthigh == 0 || valu > pst->texthigh)
1682
                pst->texthigh = valu;
1683
              break;
1684
            }
1685
 
1686
          p = (char *) strchr (namestring, ':');
1687
          if (!p)
1688
            continue;                   /* Not a debugging symbol.   */
1689
 
1690
          sym_len = 0;
1691
          sym_name = NULL;      /* pacify "gcc -Werror" */
1692
          if (psymtab_language == language_cplus)
1693
            {
1694
              char *new_name, *name = xmalloc (p - namestring + 1);
1695
              memcpy (name, namestring, p - namestring);
1696
 
1697
              name[p - namestring] = '\0';
1698
              new_name = cp_canonicalize_string (name);
1699
              if (new_name != NULL)
1700
                {
1701
                  sym_len = strlen (new_name);
1702
                  sym_name = obsavestring (new_name, sym_len,
1703
                                           &objfile->objfile_obstack);
1704
                  xfree (new_name);
1705
                }
1706
              xfree (name);
1707
            }
1708
 
1709
          if (sym_len == 0)
1710
            {
1711
              sym_name = namestring;
1712
              sym_len = p - namestring;
1713
            }
1714
 
1715
          /* Main processing section for debugging symbols which
1716
             the initial read through the symbol tables needs to worry
1717
             about.  If we reach this point, the symbol which we are
1718
             considering is definitely one we are interested in.
1719
             p must also contain the (valid) index into the namestring
1720
             which indicates the debugging type symbol.  */
1721
 
1722
          switch (p[1])
1723
            {
1724
            case 'S':
1725
              nlist.n_value += ANOFFSET (objfile->section_offsets,
1726
                                         data_sect_index);
1727
 
1728
              if (gdbarch_static_transform_name_p (gdbarch))
1729
                namestring = gdbarch_static_transform_name (gdbarch,
1730
                                                            namestring);
1731
 
1732
              add_psymbol_to_list (sym_name, sym_len, 1,
1733
                                   VAR_DOMAIN, LOC_STATIC,
1734
                                   &objfile->static_psymbols,
1735
                                   0, nlist.n_value,
1736
                                   psymtab_language, objfile);
1737
              continue;
1738
 
1739
            case 'G':
1740
              nlist.n_value += ANOFFSET (objfile->section_offsets,
1741
                                         data_sect_index);
1742
              /* The addresses in these entries are reported to be
1743
                 wrong.  See the code that reads 'G's for symtabs. */
1744
              add_psymbol_to_list (sym_name, sym_len, 1,
1745
                                   VAR_DOMAIN, LOC_STATIC,
1746
                                   &objfile->global_psymbols,
1747
                                   0, nlist.n_value,
1748
                                   psymtab_language, objfile);
1749
              continue;
1750
 
1751
            case 'T':
1752
              /* When a 'T' entry is defining an anonymous enum, it
1753
                 may have a name which is the empty string, or a
1754
                 single space.  Since they're not really defining a
1755
                 symbol, those shouldn't go in the partial symbol
1756
                 table.  We do pick up the elements of such enums at
1757
                 'check_enum:', below.  */
1758
              if (p >= namestring + 2
1759
                  || (p == namestring + 1
1760
                      && namestring[0] != ' '))
1761
                {
1762
                  add_psymbol_to_list (sym_name, sym_len, 1,
1763
                                       STRUCT_DOMAIN, LOC_TYPEDEF,
1764
                                       &objfile->static_psymbols,
1765
                                       nlist.n_value, 0,
1766
                                       psymtab_language, objfile);
1767
                  if (p[2] == 't')
1768
                    {
1769
                      /* Also a typedef with the same name.  */
1770
                      add_psymbol_to_list (sym_name, sym_len, 1,
1771
                                           VAR_DOMAIN, LOC_TYPEDEF,
1772
                                           &objfile->static_psymbols,
1773
                                           nlist.n_value, 0,
1774
                                           psymtab_language, objfile);
1775
                      p += 1;
1776
                    }
1777
                }
1778
              goto check_enum;
1779
 
1780
            case 't':
1781
              if (p != namestring)      /* a name is there, not just :T... */
1782
                {
1783
                  add_psymbol_to_list (sym_name, sym_len, 1,
1784
                                       VAR_DOMAIN, LOC_TYPEDEF,
1785
                                       &objfile->static_psymbols,
1786
                                       nlist.n_value, 0,
1787
                                       psymtab_language, objfile);
1788
                }
1789
            check_enum:
1790
              /* If this is an enumerated type, we need to
1791
                 add all the enum constants to the partial symbol
1792
                 table.  This does not cover enums without names, e.g.
1793
                 "enum {a, b} c;" in C, but fortunately those are
1794
                 rare.  There is no way for GDB to find those from the
1795
                 enum type without spending too much time on it.  Thus
1796
                 to solve this problem, the compiler needs to put out the
1797
                 enum in a nameless type.  GCC2 does this.  */
1798
 
1799
              /* We are looking for something of the form
1800
                 <name> ":" ("t" | "T") [<number> "="] "e"
1801
                 {<constant> ":" <value> ","} ";".  */
1802
 
1803
              /* Skip over the colon and the 't' or 'T'.  */
1804
              p += 2;
1805
              /* This type may be given a number.  Also, numbers can come
1806
                 in pairs like (0,26).  Skip over it.  */
1807
              while ((*p >= '0' && *p <= '9')
1808
                     || *p == '(' || *p == ',' || *p == ')'
1809
                     || *p == '=')
1810
                p++;
1811
 
1812
              if (*p++ == 'e')
1813
                {
1814
                  /* The aix4 compiler emits extra crud before the members.  */
1815
                  if (*p == '-')
1816
                    {
1817
                      /* Skip over the type (?).  */
1818
                      while (*p != ':')
1819
                        p++;
1820
 
1821
                      /* Skip over the colon.  */
1822
                      p++;
1823
                    }
1824
 
1825
                  /* We have found an enumerated type.  */
1826
                  /* According to comments in read_enum_type
1827
                     a comma could end it instead of a semicolon.
1828
                     I don't know where that happens.
1829
                     Accept either.  */
1830
                  while (*p && *p != ';' && *p != ',')
1831
                    {
1832
                      char *q;
1833
 
1834
                      /* Check for and handle cretinous dbx symbol name
1835
                         continuation!  */
1836
                      if (*p == '\\' || (*p == '?' && p[1] == '\0'))
1837
                        p = next_symbol_text (objfile);
1838
 
1839
                      /* Point to the character after the name
1840
                         of the enum constant.  */
1841
                      for (q = p; *q && *q != ':'; q++)
1842
                        ;
1843
                      /* Note that the value doesn't matter for
1844
                         enum constants in psymtabs, just in symtabs.  */
1845
                      add_psymbol_to_list (p, q - p, 1,
1846
                                           VAR_DOMAIN, LOC_CONST,
1847
                                           &objfile->static_psymbols, 0,
1848
                                           0, psymtab_language, objfile);
1849
                      /* Point past the name.  */
1850
                      p = q;
1851
                      /* Skip over the value.  */
1852
                      while (*p && *p != ',')
1853
                        p++;
1854
                      /* Advance past the comma.  */
1855
                      if (*p)
1856
                        p++;
1857
                    }
1858
                }
1859
              continue;
1860
 
1861
            case 'c':
1862
              /* Constant, e.g. from "const" in Pascal.  */
1863
              add_psymbol_to_list (sym_name, sym_len, 1,
1864
                                   VAR_DOMAIN, LOC_CONST,
1865
                                   &objfile->static_psymbols, nlist.n_value,
1866
                                   0, psymtab_language, objfile);
1867
              continue;
1868
 
1869
            case 'f':
1870
              if (! pst)
1871
                {
1872
                  int name_len = p - namestring;
1873
                  char *name = xmalloc (name_len + 1);
1874
 
1875
                  memcpy (name, namestring, name_len);
1876
                  name[name_len] = '\0';
1877
                  function_outside_compilation_unit_complaint (name);
1878
                  xfree (name);
1879
                }
1880
              nlist.n_value += ANOFFSET (objfile->section_offsets,
1881
                                         SECT_OFF_TEXT (objfile));
1882
              /* Kludges for ELF/STABS with Sun ACC */
1883
              last_function_name = namestring;
1884
              /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
1885
                 value for the bottom of the text seg in those cases. */
1886
              if (nlist.n_value == ANOFFSET (objfile->section_offsets,
1887
                                             SECT_OFF_TEXT (objfile))
1888
                  && gdbarch_sofun_address_maybe_missing (gdbarch))
1889
                {
1890
                  CORE_ADDR minsym_valu =
1891
                    find_stab_function_addr (namestring,
1892
                                             pst ? pst->filename : NULL,
1893
                                             objfile);
1894
 
1895
                  /* find_stab_function_addr will return 0 if the minimal
1896
                     symbol wasn't found.  (Unfortunately, this might also
1897
                     be a valid address.)  Anyway, if it *does* return 0,
1898
                     it is likely that the value was set correctly to begin
1899
                     with... */
1900
                  if (minsym_valu != 0)
1901
                    nlist.n_value = minsym_valu;
1902
                }
1903
              if (pst && textlow_not_set
1904
                  && gdbarch_sofun_address_maybe_missing (gdbarch))
1905
                {
1906
                  pst->textlow = nlist.n_value;
1907
                  textlow_not_set = 0;
1908
                }
1909
              /* End kludge.  */
1910
 
1911
              /* Keep track of the start of the last function so we
1912
                 can handle end of function symbols.  */
1913
              last_function_start = nlist.n_value;
1914
 
1915
              /* In reordered executables this function may lie outside
1916
                 the bounds created by N_SO symbols.  If that's the case
1917
                 use the address of this function as the low bound for
1918
                 the partial symbol table.  */
1919
              if (pst
1920
                  && (textlow_not_set
1921
                      || (nlist.n_value < pst->textlow
1922
                          && (nlist.n_value
1923
                              != ANOFFSET (objfile->section_offsets,
1924
                                           SECT_OFF_TEXT (objfile))))))
1925
                {
1926
                  pst->textlow = nlist.n_value;
1927
                  textlow_not_set = 0;
1928
                }
1929
              add_psymbol_to_list (sym_name, sym_len, 1,
1930
                                   VAR_DOMAIN, LOC_BLOCK,
1931
                                   &objfile->static_psymbols,
1932
                                   0, nlist.n_value,
1933
                                   psymtab_language, objfile);
1934
              continue;
1935
 
1936
              /* Global functions were ignored here, but now they
1937
                 are put into the global psymtab like one would expect.
1938
                 They're also in the minimal symbol table.  */
1939
            case 'F':
1940
              if (! pst)
1941
                {
1942
                  int name_len = p - namestring;
1943
                  char *name = xmalloc (name_len + 1);
1944
 
1945
                  memcpy (name, namestring, name_len);
1946
                  name[name_len] = '\0';
1947
                  function_outside_compilation_unit_complaint (name);
1948
                  xfree (name);
1949
                }
1950
              nlist.n_value += ANOFFSET (objfile->section_offsets,
1951
                                         SECT_OFF_TEXT (objfile));
1952
              /* Kludges for ELF/STABS with Sun ACC */
1953
              last_function_name = namestring;
1954
              /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
1955
                 value for the bottom of the text seg in those cases. */
1956
              if (nlist.n_value == ANOFFSET (objfile->section_offsets,
1957
                                             SECT_OFF_TEXT (objfile))
1958
                  && gdbarch_sofun_address_maybe_missing (gdbarch))
1959
                {
1960
                  CORE_ADDR minsym_valu =
1961
                    find_stab_function_addr (namestring,
1962
                                             pst ? pst->filename : NULL,
1963
                                             objfile);
1964
 
1965
                  /* find_stab_function_addr will return 0 if the minimal
1966
                     symbol wasn't found.  (Unfortunately, this might also
1967
                     be a valid address.)  Anyway, if it *does* return 0,
1968
                     it is likely that the value was set correctly to begin
1969
                     with... */
1970
                  if (minsym_valu != 0)
1971
                    nlist.n_value = minsym_valu;
1972
                }
1973
              if (pst && textlow_not_set
1974
                  && gdbarch_sofun_address_maybe_missing (gdbarch))
1975
                {
1976
                  pst->textlow = nlist.n_value;
1977
                  textlow_not_set = 0;
1978
                }
1979
              /* End kludge.  */
1980
 
1981
              /* Keep track of the start of the last function so we
1982
                 can handle end of function symbols.  */
1983
              last_function_start = nlist.n_value;
1984
 
1985
              /* In reordered executables this function may lie outside
1986
                 the bounds created by N_SO symbols.  If that's the case
1987
                 use the address of this function as the low bound for
1988
                 the partial symbol table.  */
1989
              if (pst
1990
                  && (textlow_not_set
1991
                      || (nlist.n_value < pst->textlow
1992
                          && (nlist.n_value
1993
                              != ANOFFSET (objfile->section_offsets,
1994
                                           SECT_OFF_TEXT (objfile))))))
1995
                {
1996
                  pst->textlow = nlist.n_value;
1997
                  textlow_not_set = 0;
1998
                }
1999
              add_psymbol_to_list (sym_name, sym_len, 1,
2000
                                   VAR_DOMAIN, LOC_BLOCK,
2001
                                   &objfile->global_psymbols,
2002
                                   0, nlist.n_value,
2003
                                   psymtab_language, objfile);
2004
              continue;
2005
 
2006
              /* Two things show up here (hopefully); static symbols of
2007
                 local scope (static used inside braces) or extensions
2008
                 of structure symbols.  We can ignore both.  */
2009
            case 'V':
2010
            case '(':
2011
            case '0':
2012
            case '1':
2013
            case '2':
2014
            case '3':
2015
            case '4':
2016
            case '5':
2017
            case '6':
2018
            case '7':
2019
            case '8':
2020
            case '9':
2021
            case '-':
2022
            case '#':   /* for symbol identification (used in live ranges) */
2023
              continue;
2024
 
2025
            case ':':
2026
              /* It is a C++ nested symbol.  We don't need to record it
2027
                 (I don't think); if we try to look up foo::bar::baz,
2028
                 then symbols for the symtab containing foo should get
2029
                 read in, I think.  */
2030
              /* Someone says sun cc puts out symbols like
2031
                 /foo/baz/maclib::/usr/local/bin/maclib,
2032
                 which would get here with a symbol type of ':'.  */
2033
              continue;
2034
 
2035
            default:
2036
              /* Unexpected symbol descriptor.  The second and subsequent stabs
2037
                 of a continued stab can show up here.  The question is
2038
                 whether they ever can mimic a normal stab--it would be
2039
                 nice if not, since we certainly don't want to spend the
2040
                 time searching to the end of every string looking for
2041
                 a backslash.  */
2042
 
2043
              complaint (&symfile_complaints, _("unknown symbol descriptor `%c'"),
2044
                         p[1]);
2045
 
2046
              /* Ignore it; perhaps it is an extension that we don't
2047
                 know about.  */
2048
              continue;
2049
            }
2050
        }
2051
 
2052
        case N_EXCL:
2053
 
2054
          namestring = set_namestring (objfile, &nlist);
2055
 
2056
          /* Find the corresponding bincl and mark that psymtab on the
2057
             psymtab dependency list */
2058
          {
2059
            struct partial_symtab *needed_pst =
2060
              find_corresponding_bincl_psymtab (namestring, nlist.n_value);
2061
 
2062
            /* If this include file was defined earlier in this file,
2063
               leave it alone.  */
2064
            if (needed_pst == pst)
2065
              continue;
2066
 
2067
            if (needed_pst)
2068
              {
2069
                int i;
2070
                int found = 0;
2071
 
2072
                for (i = 0; i < dependencies_used; i++)
2073
                  if (dependency_list[i] == needed_pst)
2074
                    {
2075
                      found = 1;
2076
                      break;
2077
                    }
2078
 
2079
                /* If it's already in the list, skip the rest.  */
2080
                if (found)
2081
                  continue;
2082
 
2083
                dependency_list[dependencies_used++] = needed_pst;
2084
                if (dependencies_used >= dependencies_allocated)
2085
                  {
2086
                    struct partial_symtab **orig = dependency_list;
2087
 
2088
                    dependency_list =
2089
                      (struct partial_symtab **)
2090
                      alloca ((dependencies_allocated *= 2)
2091
                              * sizeof (struct partial_symtab *));
2092
                    memcpy (dependency_list, orig,
2093
                            (dependencies_used
2094
                             * sizeof (struct partial_symtab *)));
2095
#ifdef DEBUG_INFO
2096
                    fprintf_unfiltered (gdb_stderr,
2097
                                        "Had to reallocate dependency list.\n");
2098
                    fprintf_unfiltered (gdb_stderr,
2099
                                        "New dependencies allocated: %d\n",
2100
                                        dependencies_allocated);
2101
#endif
2102
                  }
2103
              }
2104
          }
2105
          continue;
2106
 
2107
        case N_ENDM:
2108
          /* Solaris 2 end of module, finish current partial symbol table.
2109
             end_psymtab will set pst->texthigh to the proper value, which
2110
             is necessary if a module compiled without debugging info
2111
             follows this module.  */
2112
          if (pst && gdbarch_sofun_address_maybe_missing (gdbarch))
2113
            {
2114
              end_psymtab (pst, psymtab_include_list, includes_used,
2115
                           symnum * symbol_size,
2116
                           (CORE_ADDR) 0,
2117
                           dependency_list, dependencies_used, textlow_not_set);
2118
              pst = (struct partial_symtab *) 0;
2119
              includes_used = 0;
2120
              dependencies_used = 0;
2121
              has_line_numbers = 0;
2122
            }
2123
          continue;
2124
 
2125
        case N_RBRAC:
2126
#ifdef HANDLE_RBRAC
2127
          HANDLE_RBRAC (nlist.n_value);
2128
          continue;
2129
#endif
2130
        case N_EINCL:
2131
        case N_DSLINE:
2132
        case N_BSLINE:
2133
        case N_SSYM:            /* Claim: Structure or union element.
2134
                                   Hopefully, I can ignore this.  */
2135
        case N_ENTRY:           /* Alternate entry point; can ignore. */
2136
        case N_MAIN:            /* Can definitely ignore this.   */
2137
        case N_CATCH:           /* These are GNU C++ extensions */
2138
        case N_EHDECL:          /* that can safely be ignored here. */
2139
        case N_LENG:
2140
        case N_BCOMM:
2141
        case N_ECOMM:
2142
        case N_ECOML:
2143
        case N_FNAME:
2144
        case N_SLINE:
2145
        case N_RSYM:
2146
        case N_PSYM:
2147
        case N_LBRAC:
2148
        case N_NSYMS:           /* Ultrix 4.0: symbol count */
2149
        case N_DEFD:            /* GNU Modula-2 */
2150
        case N_ALIAS:           /* SunPro F77: alias name, ignore for now.  */
2151
 
2152
        case N_OBJ:             /* useless types from Solaris */
2153
        case N_OPT:
2154
        case N_PATCH:
2155
          /* These symbols aren't interesting; don't worry about them */
2156
 
2157
          continue;
2158
 
2159
        default:
2160
          /* If we haven't found it yet, ignore it.  It's probably some
2161
             new type we don't know about yet.  */
2162
          unknown_symtype_complaint (hex_string (nlist.n_type));
2163
          continue;
2164
        }
2165
    }
2166
 
2167
  /* If there's stuff to be cleaned up, clean it up.  */
2168
  if (pst)
2169
    {
2170
      /* Don't set pst->texthigh lower than it already is.  */
2171
      CORE_ADDR text_end =
2172
        (lowest_text_address == (CORE_ADDR) -1
2173
         ? (text_addr + ANOFFSET (objfile->section_offsets,
2174
                                  SECT_OFF_TEXT (objfile)))
2175
         : lowest_text_address)
2176
        + text_size;
2177
 
2178
      end_psymtab (pst, psymtab_include_list, includes_used,
2179
                   symnum * symbol_size,
2180
                   text_end > pst->texthigh ? text_end : pst->texthigh,
2181
                   dependency_list, dependencies_used, textlow_not_set);
2182
    }
2183
 
2184
  do_cleanups (back_to);
2185
}
2186
 
2187
/* Allocate and partially fill a partial symtab.  It will be
2188
   completely filled at the end of the symbol list.
2189
 
2190
   SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
2191
   is the address relative to which its symbols are (incremental) or 0
2192
   (normal). */
2193
 
2194
static struct partial_symtab *
2195
start_psymtab (struct objfile *objfile, char *filename, CORE_ADDR textlow,
2196
               int ldsymoff, struct partial_symbol **global_syms,
2197
               struct partial_symbol **static_syms)
2198
{
2199
  struct partial_symtab *result =
2200
    start_psymtab_common (objfile, objfile->section_offsets,
2201
                          filename, textlow, global_syms, static_syms);
2202
 
2203
  result->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
2204
                                               sizeof (struct symloc));
2205
  LDSYMOFF (result) = ldsymoff;
2206
  result->read_symtab = dbx_psymtab_to_symtab;
2207
  SYMBOL_SIZE (result) = symbol_size;
2208
  SYMBOL_OFFSET (result) = symbol_table_offset;
2209
  STRING_OFFSET (result) = string_table_offset;
2210
  FILE_STRING_OFFSET (result) = file_string_table_offset;
2211
 
2212
#ifdef HAVE_ELF
2213
  /* If we're handling an ELF file, drag some section-relocation info
2214
     for this source file out of the ELF symbol table, to compensate for
2215
     Sun brain death.  This replaces the section_offsets in this psymtab,
2216
     if successful.  */
2217
  elfstab_offset_sections (objfile, result);
2218
#endif
2219
 
2220
  /* Deduce the source language from the filename for this psymtab. */
2221
  psymtab_language = deduce_language_from_filename (filename);
2222
 
2223
  return result;
2224
}
2225
 
2226
/* Close off the current usage of PST.
2227
   Returns PST or NULL if the partial symtab was empty and thrown away.
2228
 
2229
   FIXME:  List variables and peculiarities of same.  */
2230
 
2231
struct partial_symtab *
2232
end_psymtab (struct partial_symtab *pst, char **include_list, int num_includes,
2233
             int capping_symbol_offset, CORE_ADDR capping_text,
2234
             struct partial_symtab **dependency_list, int number_dependencies,
2235
             int textlow_not_set)
2236
{
2237
  int i;
2238
  struct objfile *objfile = pst->objfile;
2239
  struct gdbarch *gdbarch = get_objfile_arch (objfile);
2240
 
2241
  if (capping_symbol_offset != -1)
2242
    LDSYMLEN (pst) = capping_symbol_offset - LDSYMOFF (pst);
2243
  pst->texthigh = capping_text;
2244
 
2245
  /* Under Solaris, the N_SO symbols always have a value of 0,
2246
     instead of the usual address of the .o file.  Therefore,
2247
     we have to do some tricks to fill in texthigh and textlow.
2248
     The first trick is: if we see a static
2249
     or global function, and the textlow for the current pst
2250
     is not set (ie: textlow_not_set), then we use that function's
2251
     address for the textlow of the pst.  */
2252
 
2253
  /* Now, to fill in texthigh, we remember the last function seen
2254
     in the .o file.  Also, there's a hack in
2255
     bfd/elf.c and gdb/elfread.c to pass the ELF st_size field
2256
     to here via the misc_info field.  Therefore, we can fill in
2257
     a reliable texthigh by taking the address plus size of the
2258
     last function in the file.  */
2259
 
2260
  if (pst->texthigh == 0 && last_function_name
2261
      && gdbarch_sofun_address_maybe_missing (gdbarch))
2262
    {
2263
      char *p;
2264
      int n;
2265
      struct minimal_symbol *minsym;
2266
 
2267
      p = strchr (last_function_name, ':');
2268
      if (p == NULL)
2269
        p = last_function_name;
2270
      n = p - last_function_name;
2271
      p = alloca (n + 2);
2272
      strncpy (p, last_function_name, n);
2273
      p[n] = 0;
2274
 
2275
      minsym = lookup_minimal_symbol (p, pst->filename, objfile);
2276
      if (minsym == NULL)
2277
        {
2278
          /* Sun Fortran appends an underscore to the minimal symbol name,
2279
             try again with an appended underscore if the minimal symbol
2280
             was not found.  */
2281
          p[n] = '_';
2282
          p[n + 1] = 0;
2283
          minsym = lookup_minimal_symbol (p, pst->filename, objfile);
2284
        }
2285
 
2286
      if (minsym)
2287
        pst->texthigh = SYMBOL_VALUE_ADDRESS (minsym) + MSYMBOL_SIZE (minsym);
2288
 
2289
      last_function_name = NULL;
2290
    }
2291
 
2292
  if (!gdbarch_sofun_address_maybe_missing (gdbarch))
2293
    ;
2294
  /* this test will be true if the last .o file is only data */
2295
  else if (textlow_not_set)
2296
    pst->textlow = pst->texthigh;
2297
  else
2298
    {
2299
      struct partial_symtab *p1;
2300
 
2301
      /* If we know our own starting text address, then walk through all other
2302
         psymtabs for this objfile, and if any didn't know their ending text
2303
         address, set it to our starting address.  Take care to not set our
2304
         own ending address to our starting address, nor to set addresses on
2305
         `dependency' files that have both textlow and texthigh zero.  */
2306
 
2307
      ALL_OBJFILE_PSYMTABS (objfile, p1)
2308
      {
2309
        if (p1->texthigh == 0 && p1->textlow != 0 && p1 != pst)
2310
          {
2311
            p1->texthigh = pst->textlow;
2312
            /* if this file has only data, then make textlow match texthigh */
2313
            if (p1->textlow == 0)
2314
              p1->textlow = p1->texthigh;
2315
          }
2316
      }
2317
    }
2318
 
2319
  /* End of kludge for patching Solaris textlow and texthigh.  */
2320
 
2321
  pst->n_global_syms =
2322
    objfile->global_psymbols.next - (objfile->global_psymbols.list
2323
                                     + pst->globals_offset);
2324
  pst->n_static_syms =
2325
    objfile->static_psymbols.next - (objfile->static_psymbols.list
2326
                                     + pst->statics_offset);
2327
 
2328
  pst->number_of_dependencies = number_dependencies;
2329
  if (number_dependencies)
2330
    {
2331
      pst->dependencies = (struct partial_symtab **)
2332
        obstack_alloc (&objfile->objfile_obstack,
2333
                       number_dependencies * sizeof (struct partial_symtab *));
2334
      memcpy (pst->dependencies, dependency_list,
2335
              number_dependencies * sizeof (struct partial_symtab *));
2336
    }
2337
  else
2338
    pst->dependencies = 0;
2339
 
2340
  for (i = 0; i < num_includes; i++)
2341
    {
2342
      struct partial_symtab *subpst =
2343
        allocate_psymtab (include_list[i], objfile);
2344
 
2345
      /* Copy the sesction_offsets array from the main psymtab. */
2346
      subpst->section_offsets = pst->section_offsets;
2347
      subpst->read_symtab_private =
2348
        obstack_alloc (&objfile->objfile_obstack, sizeof (struct symloc));
2349
      LDSYMOFF (subpst) =
2350
        LDSYMLEN (subpst) =
2351
        subpst->textlow =
2352
        subpst->texthigh = 0;
2353
 
2354
      /* We could save slight bits of space by only making one of these,
2355
         shared by the entire set of include files.  FIXME-someday.  */
2356
      subpst->dependencies = (struct partial_symtab **)
2357
        obstack_alloc (&objfile->objfile_obstack,
2358
                       sizeof (struct partial_symtab *));
2359
      subpst->dependencies[0] = pst;
2360
      subpst->number_of_dependencies = 1;
2361
 
2362
      subpst->globals_offset =
2363
        subpst->n_global_syms =
2364
        subpst->statics_offset =
2365
        subpst->n_static_syms = 0;
2366
 
2367
      subpst->readin = 0;
2368
      subpst->symtab = 0;
2369
      subpst->read_symtab = pst->read_symtab;
2370
    }
2371
 
2372
  sort_pst_symbols (pst);
2373
 
2374
  if (num_includes == 0
2375
      && number_dependencies == 0
2376
      && pst->n_global_syms == 0
2377
      && pst->n_static_syms == 0
2378
      && has_line_numbers == 0)
2379
    {
2380
      /* Throw away this psymtab, it's empty.  We can't deallocate it, since
2381
         it is on the obstack, but we can forget to chain it on the list.  */
2382
      /* Empty psymtabs happen as a result of header files which don't have
2383
         any symbols in them.  There can be a lot of them.  But this check
2384
         is wrong, in that a psymtab with N_SLINE entries but nothing else
2385
         is not empty, but we don't realize that.  Fixing that without slowing
2386
         things down might be tricky.  */
2387
 
2388
      discard_psymtab (pst);
2389
 
2390
      /* Indicate that psymtab was thrown away.  */
2391
      pst = (struct partial_symtab *) NULL;
2392
    }
2393
  return pst;
2394
}
2395
 
2396
static void
2397
dbx_psymtab_to_symtab_1 (struct partial_symtab *pst)
2398
{
2399
  struct cleanup *old_chain;
2400
  int i;
2401
 
2402
  if (!pst)
2403
    return;
2404
 
2405
  if (pst->readin)
2406
    {
2407
      fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in.  \
2408
Shouldn't happen.\n",
2409
                          pst->filename);
2410
      return;
2411
    }
2412
 
2413
  /* Read in all partial symtabs on which this one is dependent */
2414
  for (i = 0; i < pst->number_of_dependencies; i++)
2415
    if (!pst->dependencies[i]->readin)
2416
      {
2417
        /* Inform about additional files that need to be read in.  */
2418
        if (info_verbose)
2419
          {
2420
            fputs_filtered (" ", gdb_stdout);
2421
            wrap_here ("");
2422
            fputs_filtered ("and ", gdb_stdout);
2423
            wrap_here ("");
2424
            printf_filtered ("%s...", pst->dependencies[i]->filename);
2425
            wrap_here ("");     /* Flush output */
2426
            gdb_flush (gdb_stdout);
2427
          }
2428
        dbx_psymtab_to_symtab_1 (pst->dependencies[i]);
2429
      }
2430
 
2431
  if (LDSYMLEN (pst))           /* Otherwise it's a dummy */
2432
    {
2433
      /* Init stuff necessary for reading in symbols */
2434
      stabsread_init ();
2435
      buildsym_init ();
2436
      old_chain = make_cleanup (really_free_pendings, 0);
2437
      file_string_table_offset = FILE_STRING_OFFSET (pst);
2438
      symbol_size = SYMBOL_SIZE (pst);
2439
 
2440
      /* Read in this file's symbols */
2441
      bfd_seek (pst->objfile->obfd, SYMBOL_OFFSET (pst), SEEK_SET);
2442
      read_ofile_symtab (pst);
2443
 
2444
      do_cleanups (old_chain);
2445
    }
2446
 
2447
  pst->readin = 1;
2448
}
2449
 
2450
/* Read in all of the symbols for a given psymtab for real.
2451
   Be verbose about it if the user wants that.  */
2452
 
2453
static void
2454
dbx_psymtab_to_symtab (struct partial_symtab *pst)
2455
{
2456
  bfd *sym_bfd;
2457
  struct cleanup *back_to = NULL;
2458
 
2459
  if (!pst)
2460
    return;
2461
 
2462
  if (pst->readin)
2463
    {
2464
      fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in.  \
2465
Shouldn't happen.\n",
2466
                          pst->filename);
2467
      return;
2468
    }
2469
 
2470
  if (LDSYMLEN (pst) || pst->number_of_dependencies)
2471
    {
2472
      /* Print the message now, before reading the string table,
2473
         to avoid disconcerting pauses.  */
2474
      if (info_verbose)
2475
        {
2476
          printf_filtered ("Reading in symbols for %s...", pst->filename);
2477
          gdb_flush (gdb_stdout);
2478
        }
2479
 
2480
      sym_bfd = pst->objfile->obfd;
2481
 
2482
      next_symbol_text_func = dbx_next_symbol_text;
2483
 
2484
      if (DBX_STAB_SECTION (pst->objfile))
2485
        {
2486
          stabs_data
2487
            = symfile_relocate_debug_section (pst->objfile,
2488
                                              DBX_STAB_SECTION (pst->objfile),
2489
                                              NULL);
2490
 
2491
          if (stabs_data)
2492
            back_to = make_cleanup (free_current_contents,
2493
                                    (void *) &stabs_data);
2494
        }
2495
 
2496
      dbx_psymtab_to_symtab_1 (pst);
2497
 
2498
      if (back_to)
2499
        do_cleanups (back_to);
2500
 
2501
      /* Match with global symbols.  This only needs to be done once,
2502
         after all of the symtabs and dependencies have been read in.   */
2503
      scan_file_globals (pst->objfile);
2504
 
2505
      /* Finish up the debug error message.  */
2506
      if (info_verbose)
2507
        printf_filtered ("done.\n");
2508
    }
2509
}
2510
 
2511
/* Read in a defined section of a specific object file's symbols. */
2512
 
2513
static void
2514
read_ofile_symtab (struct partial_symtab *pst)
2515
{
2516
  char *namestring;
2517
  struct external_nlist *bufp;
2518
  struct internal_nlist nlist;
2519
  unsigned char type;
2520
  unsigned max_symnum;
2521
  bfd *abfd;
2522
  struct objfile *objfile;
2523
  int sym_offset;               /* Offset to start of symbols to read */
2524
  int sym_size;                 /* Size of symbols to read */
2525
  CORE_ADDR text_offset;        /* Start of text segment for symbols */
2526
  int text_size;                /* Size of text segment for symbols */
2527
  struct section_offsets *section_offsets;
2528
 
2529
  objfile = pst->objfile;
2530
  sym_offset = LDSYMOFF (pst);
2531
  sym_size = LDSYMLEN (pst);
2532
  text_offset = pst->textlow;
2533
  text_size = pst->texthigh - pst->textlow;
2534
  /* This cannot be simply objfile->section_offsets because of
2535
     elfstab_offset_sections() which initializes the psymtab section
2536
     offsets information in a special way, and that is different from
2537
     objfile->section_offsets. */
2538
  section_offsets = pst->section_offsets;
2539
 
2540
  current_objfile = objfile;
2541
  subfile_stack = NULL;
2542
 
2543
  stringtab_global = DBX_STRINGTAB (objfile);
2544
  last_source_file = NULL;
2545
 
2546
  abfd = objfile->obfd;
2547
  symfile_bfd = objfile->obfd;  /* Implicit param to next_text_symbol */
2548
  symbuf_end = symbuf_idx = 0;
2549
  symbuf_read = 0;
2550
  symbuf_left = sym_offset + sym_size;
2551
 
2552
  /* It is necessary to actually read one symbol *before* the start
2553
     of this symtab's symbols, because the GCC_COMPILED_FLAG_SYMBOL
2554
     occurs before the N_SO symbol.
2555
 
2556
     Detecting this in read_dbx_symtab
2557
     would slow down initial readin, so we look for it here instead.  */
2558
  if (!processing_acc_compilation && sym_offset >= (int) symbol_size)
2559
    {
2560
      stabs_seek (sym_offset - symbol_size);
2561
      fill_symbuf (abfd);
2562
      bufp = &symbuf[symbuf_idx++];
2563
      INTERNALIZE_SYMBOL (nlist, bufp, abfd);
2564
      OBJSTAT (objfile, n_stabs++);
2565
 
2566
      namestring = set_namestring (objfile, &nlist);
2567
 
2568
      processing_gcc_compilation = 0;
2569
      if (nlist.n_type == N_TEXT)
2570
        {
2571
          const char *tempstring = namestring;
2572
 
2573
          if (strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL) == 0)
2574
            processing_gcc_compilation = 1;
2575
          else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0)
2576
            processing_gcc_compilation = 2;
2577
          if (tempstring[0] == bfd_get_symbol_leading_char (symfile_bfd))
2578
            ++tempstring;
2579
          if (strncmp (tempstring, "__gnu_compiled", 14) == 0)
2580
            processing_gcc_compilation = 2;
2581
        }
2582
 
2583
      /* Try to select a C++ demangling based on the compilation unit
2584
         producer. */
2585
 
2586
#if 0
2587
      /* For now, stay with AUTO_DEMANGLING for g++ output, as we don't
2588
         know whether it will use the old style or v3 mangling.  */
2589
      if (processing_gcc_compilation)
2590
        {
2591
          if (AUTO_DEMANGLING)
2592
            {
2593
              set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
2594
            }
2595
        }
2596
#endif
2597
    }
2598
  else
2599
    {
2600
      /* The N_SO starting this symtab is the first symbol, so we
2601
         better not check the symbol before it.  I'm not this can
2602
         happen, but it doesn't hurt to check for it.  */
2603
      stabs_seek (sym_offset);
2604
      processing_gcc_compilation = 0;
2605
    }
2606
 
2607
  if (symbuf_idx == symbuf_end)
2608
    fill_symbuf (abfd);
2609
  bufp = &symbuf[symbuf_idx];
2610
  if (bfd_h_get_8 (abfd, bufp->e_type) != N_SO)
2611
    error (_("First symbol in segment of executable not a source symbol"));
2612
 
2613
  max_symnum = sym_size / symbol_size;
2614
 
2615
  for (symnum = 0;
2616
       symnum < max_symnum;
2617
       symnum++)
2618
    {
2619
      QUIT;                     /* Allow this to be interruptable */
2620
      if (symbuf_idx == symbuf_end)
2621
        fill_symbuf (abfd);
2622
      bufp = &symbuf[symbuf_idx++];
2623
      INTERNALIZE_SYMBOL (nlist, bufp, abfd);
2624
      OBJSTAT (objfile, n_stabs++);
2625
 
2626
      type = bfd_h_get_8 (abfd, bufp->e_type);
2627
 
2628
      namestring = set_namestring (objfile, &nlist);
2629
 
2630
      if (type & N_STAB)
2631
        {
2632
          if (sizeof (nlist.n_value) > 4
2633
              /* We are a 64-bit debugger debugging a 32-bit program.  */
2634
              && (type == N_LSYM || type == N_PSYM))
2635
              /* We have to be careful with the n_value in the case of N_LSYM
2636
                 and N_PSYM entries, because they are signed offsets from frame
2637
                 pointer, but we actually read them as unsigned 32-bit values.
2638
                 This is not a problem for 32-bit debuggers, for which negative
2639
                 values end up being interpreted correctly (as negative
2640
                 offsets) due to integer overflow.
2641
                 But we need to sign-extend the value for 64-bit debuggers,
2642
                 or we'll end up interpreting negative values as very large
2643
                 positive offsets.  */
2644
            nlist.n_value = (nlist.n_value ^ 0x80000000) - 0x80000000;
2645
          process_one_symbol (type, nlist.n_desc, nlist.n_value,
2646
                              namestring, section_offsets, objfile);
2647
        }
2648
      /* We skip checking for a new .o or -l file; that should never
2649
         happen in this routine. */
2650
      else if (type == N_TEXT)
2651
        {
2652
          /* I don't think this code will ever be executed, because
2653
             the GCC_COMPILED_FLAG_SYMBOL usually is right before
2654
             the N_SO symbol which starts this source file.
2655
             However, there is no reason not to accept
2656
             the GCC_COMPILED_FLAG_SYMBOL anywhere.  */
2657
 
2658
          if (strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL) == 0)
2659
            processing_gcc_compilation = 1;
2660
          else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0)
2661
            processing_gcc_compilation = 2;
2662
 
2663
#if 0
2664
          /* For now, stay with AUTO_DEMANGLING for g++ output, as we don't
2665
             know whether it will use the old style or v3 mangling.  */
2666
          if (AUTO_DEMANGLING)
2667
            {
2668
              set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
2669
            }
2670
#endif
2671
        }
2672
      else if (type & N_EXT || type == (unsigned char) N_TEXT
2673
               || type == (unsigned char) N_NBTEXT)
2674
        {
2675
          /* Global symbol: see if we came across a dbx defintion for
2676
             a corresponding symbol.  If so, store the value.  Remove
2677
             syms from the chain when their values are stored, but
2678
             search the whole chain, as there may be several syms from
2679
             different files with the same name. */
2680
          /* This is probably not true.  Since the files will be read
2681
             in one at a time, each reference to a global symbol will
2682
             be satisfied in each file as it appears. So we skip this
2683
             section. */
2684
          ;
2685
        }
2686
    }
2687
 
2688
  /* In a Solaris elf file, this variable, which comes from the
2689
     value of the N_SO symbol, will still be 0.  Luckily, text_offset,
2690
     which comes from pst->textlow is correct. */
2691
  if (last_source_start_addr == 0)
2692
    last_source_start_addr = text_offset;
2693
 
2694
  /* In reordered executables last_source_start_addr may not be the
2695
     lower bound for this symtab, instead use text_offset which comes
2696
     from pst->textlow which is correct.  */
2697
  if (last_source_start_addr > text_offset)
2698
    last_source_start_addr = text_offset;
2699
 
2700
  pst->symtab = end_symtab (text_offset + text_size, objfile,
2701
                            SECT_OFF_TEXT (objfile));
2702
 
2703
  end_stabs ();
2704
 
2705
  current_objfile = NULL;
2706
}
2707
 
2708
 
2709
/* This handles a single symbol from the symbol-file, building symbols
2710
   into a GDB symtab.  It takes these arguments and an implicit argument.
2711
 
2712
   TYPE is the type field of the ".stab" symbol entry.
2713
   DESC is the desc field of the ".stab" entry.
2714
   VALU is the value field of the ".stab" entry.
2715
   NAME is the symbol name, in our address space.
2716
   SECTION_OFFSETS is a set of amounts by which the sections of this
2717
   object file were relocated when it was loaded into memory.  Note
2718
   that these section_offsets are not the objfile->section_offsets but
2719
   the pst->section_offsets.  All symbols that refer to memory
2720
   locations need to be offset by these amounts.
2721
   OBJFILE is the object file from which we are reading symbols.  It
2722
   is used in end_symtab.  */
2723
 
2724
void
2725
process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
2726
                    struct section_offsets *section_offsets,
2727
                    struct objfile *objfile)
2728
{
2729
  struct gdbarch *gdbarch = get_objfile_arch (objfile);
2730
  struct context_stack *new;
2731
  /* This remembers the address of the start of a function.  It is
2732
     used because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries
2733
     are relative to the current function's start address.  On systems
2734
     other than Solaris 2, this just holds the SECT_OFF_TEXT value,
2735
     and is used to relocate these symbol types rather than
2736
     SECTION_OFFSETS.  */
2737
  static CORE_ADDR function_start_offset;
2738
 
2739
  /* This holds the address of the start of a function, without the
2740
     system peculiarities of function_start_offset.  */
2741
  static CORE_ADDR last_function_start;
2742
 
2743
  /* If this is nonzero, we've seen an N_SLINE since the start of the
2744
     current function.  We use this to tell us to move the first sline
2745
     to the beginning of the function regardless of what its given
2746
     value is. */
2747
  static int sline_found_in_function = 1;
2748
 
2749
  /* If this is nonzero, we've seen a non-gcc N_OPT symbol for this
2750
     source file.  Used to detect the SunPRO solaris compiler.  */
2751
  static int n_opt_found;
2752
 
2753
  /* The stab type used for the definition of the last function.
2754
     N_STSYM or N_GSYM for SunOS4 acc; N_FUN for other compilers.  */
2755
  static int function_stab_type = 0;
2756
 
2757
  if (!block_address_function_relative)
2758
    {
2759
      /* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
2760
         function start address, so just use the text offset.  */
2761
      function_start_offset =
2762
        ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
2763
    }
2764
 
2765
  /* Something is wrong if we see real data before seeing a source
2766
     file name.  */
2767
 
2768
  if (last_source_file == NULL && type != (unsigned char) N_SO)
2769
    {
2770
      /* Ignore any symbols which appear before an N_SO symbol.
2771
         Currently no one puts symbols there, but we should deal
2772
         gracefully with the case.  A complain()t might be in order,
2773
         but this should not be an error ().  */
2774
      return;
2775
    }
2776
 
2777
  switch (type)
2778
    {
2779
    case N_FUN:
2780
    case N_FNAME:
2781
 
2782
      if (*name == '\000')
2783
        {
2784
          /* This N_FUN marks the end of a function.  This closes off
2785
             the current block.  */
2786
          struct block *block;
2787
 
2788
          if (context_stack_depth <= 0)
2789
            {
2790
              lbrac_mismatch_complaint (symnum);
2791
              break;
2792
            }
2793
 
2794
          /* The following check is added before recording line 0 at
2795
             end of function so as to handle hand-generated stabs
2796
             which may have an N_FUN stabs at the end of the function,
2797
             but no N_SLINE stabs.  */
2798
          if (sline_found_in_function)
2799
            {
2800
              CORE_ADDR addr = last_function_start + valu;
2801
 
2802
              record_line (current_subfile, 0,
2803
                           gdbarch_addr_bits_remove (gdbarch, addr));
2804
            }
2805
 
2806
          within_function = 0;
2807
          new = pop_context ();
2808
 
2809
          /* Make a block for the local symbols within.  */
2810
          block = finish_block (new->name, &local_symbols, new->old_blocks,
2811
                                new->start_addr, new->start_addr + valu,
2812
                                objfile);
2813
 
2814
          /* For C++, set the block's scope.  */
2815
          if (SYMBOL_LANGUAGE (new->name) == language_cplus)
2816
            cp_set_block_scope (new->name, block, &objfile->objfile_obstack,
2817
                                "", 0);
2818
 
2819
          /* May be switching to an assembler file which may not be using
2820
             block relative stabs, so reset the offset.  */
2821
          if (block_address_function_relative)
2822
            function_start_offset = 0;
2823
 
2824
          break;
2825
        }
2826
 
2827
      sline_found_in_function = 0;
2828
 
2829
      /* Relocate for dynamic loading.  */
2830
      valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
2831
      valu = gdbarch_smash_text_address (gdbarch, valu);
2832
      last_function_start = valu;
2833
 
2834
      goto define_a_symbol;
2835
 
2836
    case N_LBRAC:
2837
      /* This "symbol" just indicates the start of an inner lexical
2838
         context within a function.  */
2839
 
2840
      /* Ignore extra outermost context from SunPRO cc and acc.  */
2841
      if (n_opt_found && desc == 1)
2842
        break;
2843
 
2844
      if (block_address_function_relative)
2845
        /* Relocate for Sun ELF acc fn-relative syms.  */
2846
        valu += function_start_offset;
2847
      else
2848
        /* On most machines, the block addresses are relative to the
2849
           N_SO, the linker did not relocate them (sigh).  */
2850
        valu += last_source_start_addr;
2851
 
2852
      new = push_context (desc, valu);
2853
      break;
2854
 
2855
    case N_RBRAC:
2856
      /* This "symbol" just indicates the end of an inner lexical
2857
         context that was started with N_LBRAC.  */
2858
 
2859
      /* Ignore extra outermost context from SunPRO cc and acc.  */
2860
      if (n_opt_found && desc == 1)
2861
        break;
2862
 
2863
      if (block_address_function_relative)
2864
        /* Relocate for Sun ELF acc fn-relative syms.  */
2865
        valu += function_start_offset;
2866
      else
2867
        /* On most machines, the block addresses are relative to the
2868
           N_SO, the linker did not relocate them (sigh).  */
2869
        valu += last_source_start_addr;
2870
 
2871
      if (context_stack_depth <= 0)
2872
        {
2873
          lbrac_mismatch_complaint (symnum);
2874
          break;
2875
        }
2876
 
2877
      new = pop_context ();
2878
      if (desc != new->depth)
2879
        lbrac_mismatch_complaint (symnum);
2880
 
2881
      if (local_symbols != NULL)
2882
        {
2883
          /* GCC development snapshots from March to December of
2884
             2000 would output N_LSYM entries after N_LBRAC
2885
             entries.  As a consequence, these symbols are simply
2886
             discarded.  Complain if this is the case.  */
2887
          complaint (&symfile_complaints, _("\
2888
misplaced N_LBRAC entry; discarding local symbols which have \
2889
no enclosing block"));
2890
        }
2891
      local_symbols = new->locals;
2892
 
2893
      if (context_stack_depth > 1)
2894
        {
2895
          /* This is not the outermost LBRAC...RBRAC pair in the
2896
             function, its local symbols preceded it, and are the ones
2897
             just recovered from the context stack.  Define the block
2898
             for them (but don't bother if the block contains no
2899
             symbols.  Should we complain on blocks without symbols?
2900
             I can't think of any useful purpose for them).  */
2901
          if (local_symbols != NULL)
2902
            {
2903
              /* Muzzle a compiler bug that makes end < start.
2904
 
2905
                 ??? Which compilers?  Is this ever harmful?.  */
2906
              if (new->start_addr > valu)
2907
                {
2908
                  complaint (&symfile_complaints,
2909
                             _("block start larger than block end"));
2910
                  new->start_addr = valu;
2911
                }
2912
              /* Make a block for the local symbols within.  */
2913
              finish_block (0, &local_symbols, new->old_blocks,
2914
                            new->start_addr, valu, objfile);
2915
            }
2916
        }
2917
      else
2918
        {
2919
          /* This is the outermost LBRAC...RBRAC pair.  There is no
2920
             need to do anything; leave the symbols that preceded it
2921
             to be attached to the function's own block.  We need to
2922
             indicate that we just moved outside of the function.  */
2923
          within_function = 0;
2924
        }
2925
 
2926
      break;
2927
 
2928
    case N_FN:
2929
    case N_FN_SEQ:
2930
      /* This kind of symbol indicates the start of an object file.
2931
         Relocate for dynamic loading.  */
2932
      valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
2933
      break;
2934
 
2935
    case N_SO:
2936
      /* This type of symbol indicates the start of data for one
2937
         source file.  Finish the symbol table of the previous source
2938
         file (if any) and start accumulating a new symbol table.
2939
         Relocate for dynamic loading.  */
2940
      valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
2941
 
2942
      n_opt_found = 0;
2943
 
2944
      if (last_source_file)
2945
        {
2946
          /* Check if previous symbol was also an N_SO (with some
2947
             sanity checks).  If so, that one was actually the
2948
             directory name, and the current one is the real file
2949
             name.  Patch things up. */
2950
          if (previous_stab_code == (unsigned char) N_SO)
2951
            {
2952
              patch_subfile_names (current_subfile, name);
2953
              break;            /* Ignore repeated SOs */
2954
            }
2955
          end_symtab (valu, objfile, SECT_OFF_TEXT (objfile));
2956
          end_stabs ();
2957
        }
2958
 
2959
      /* Null name means this just marks the end of text for this .o
2960
         file.  Don't start a new symtab in this case.  */
2961
      if (*name == '\000')
2962
        break;
2963
 
2964
      if (block_address_function_relative)
2965
        function_start_offset = 0;
2966
 
2967
      start_stabs ();
2968
      start_symtab (name, NULL, valu);
2969
      record_debugformat ("stabs");
2970
      break;
2971
 
2972
    case N_SOL:
2973
      /* This type of symbol indicates the start of data for a
2974
         sub-source-file, one whose contents were copied or included
2975
         in the compilation of the main source file (whose name was
2976
         given in the N_SO symbol).  Relocate for dynamic loading.  */
2977
      valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
2978
      start_subfile (name, current_subfile->dirname);
2979
      break;
2980
 
2981
    case N_BINCL:
2982
      push_subfile ();
2983
      add_new_header_file (name, valu);
2984
      start_subfile (name, current_subfile->dirname);
2985
      break;
2986
 
2987
    case N_EINCL:
2988
      start_subfile (pop_subfile (), current_subfile->dirname);
2989
      break;
2990
 
2991
    case N_EXCL:
2992
      add_old_header_file (name, valu);
2993
      break;
2994
 
2995
    case N_SLINE:
2996
      /* This type of "symbol" really just records one line-number --
2997
         core-address correspondence.  Enter it in the line list for
2998
         this symbol table.  */
2999
 
3000
      /* Relocate for dynamic loading and for ELF acc
3001
         function-relative symbols.  */
3002
      valu += function_start_offset;
3003
 
3004
      /* GCC 2.95.3 emits the first N_SLINE stab somwehere in the
3005
         middle of the prologue instead of right at the start of the
3006
         function.  To deal with this we record the address for the
3007
         first N_SLINE stab to be the start of the function instead of
3008
         the listed location.  We really shouldn't to this.  When
3009
         compiling with optimization, this first N_SLINE stab might be
3010
         optimized away.  Other (non-GCC) compilers don't emit this
3011
         stab at all.  There is no real harm in having an extra
3012
         numbered line, although it can be a bit annoying for the
3013
         user.  However, it totally screws up our testsuite.
3014
 
3015
         So for now, keep adjusting the address of the first N_SLINE
3016
         stab, but only for code compiled with GCC.  */
3017
 
3018
      if (within_function && sline_found_in_function == 0)
3019
        {
3020
          CORE_ADDR addr = processing_gcc_compilation == 2 ?
3021
                           last_function_start : valu;
3022
 
3023
          record_line (current_subfile, desc,
3024
                       gdbarch_addr_bits_remove (gdbarch, addr));
3025
          sline_found_in_function = 1;
3026
        }
3027
      else
3028
        record_line (current_subfile, desc,
3029
                     gdbarch_addr_bits_remove (gdbarch, valu));
3030
      break;
3031
 
3032
    case N_BCOMM:
3033
      common_block_start (name, objfile);
3034
      break;
3035
 
3036
    case N_ECOMM:
3037
      common_block_end (objfile);
3038
      break;
3039
 
3040
      /* The following symbol types need to have the appropriate
3041
         offset added to their value; then we process symbol
3042
         definitions in the name.  */
3043
 
3044
    case N_STSYM:               /* Static symbol in data segment.  */
3045
    case N_LCSYM:               /* Static symbol in BSS segment.  */
3046
    case N_ROSYM:               /* Static symbol in read-only data segment.  */
3047
      /* HORRID HACK DEPT.  However, it's Sun's furgin' fault.
3048
         Solaris 2's stabs-in-elf makes *most* symbols relative but
3049
         leaves a few absolute (at least for Solaris 2.1 and version
3050
         2.0.1 of the SunPRO compiler).  N_STSYM and friends sit on
3051
         the fence.  .stab "foo:S...",N_STSYM is absolute (ld
3052
         relocates it) .stab "foo:V...",N_STSYM is relative (section
3053
         base subtracted).  This leaves us no choice but to search for
3054
         the 'S' or 'V'...  (or pass the whole section_offsets stuff
3055
         down ONE MORE function call level, which we really don't want
3056
         to do).  */
3057
      {
3058
        char *p;
3059
 
3060
        /* Normal object file and NLMs have non-zero text seg offsets,
3061
           but don't need their static syms offset in this fashion.
3062
           XXX - This is really a crock that should be fixed in the
3063
           solib handling code so that I don't have to work around it
3064
           here.  */
3065
 
3066
        if (!symfile_relocatable)
3067
          {
3068
            p = strchr (name, ':');
3069
            if (p != 0 && p[1] == 'S')
3070
              {
3071
                /* The linker relocated it.  We don't want to add an
3072
                   elfstab_offset_sections-type offset, but we *do*
3073
                   want to add whatever solib.c passed to
3074
                   symbol_file_add as addr (this is known to affect
3075
                   SunOS 4, and I suspect ELF too).  Since
3076
                   elfstab_offset_sections currently does not muck
3077
                   with the text offset (there is no Ttext.text
3078
                   symbol), we can get addr from the text offset.  If
3079
                   elfstab_offset_sections ever starts dealing with
3080
                   the text offset, and we still need to do this, we
3081
                   need to invent a SECT_OFF_ADDR_KLUDGE or something.  */
3082
                valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
3083
                goto define_a_symbol;
3084
              }
3085
          }
3086
        /* Since it's not the kludge case, re-dispatch to the right
3087
           handler.  */
3088
        switch (type)
3089
          {
3090
          case N_STSYM:
3091
            goto case_N_STSYM;
3092
          case N_LCSYM:
3093
            goto case_N_LCSYM;
3094
          case N_ROSYM:
3095
            goto case_N_ROSYM;
3096
          default:
3097
            internal_error (__FILE__, __LINE__,
3098
                            _("failed internal consistency check"));
3099
          }
3100
      }
3101
 
3102
    case_N_STSYM:               /* Static symbol in data segment.  */
3103
    case N_DSLINE:              /* Source line number, data segment.  */
3104
      valu += ANOFFSET (section_offsets, SECT_OFF_DATA (objfile));
3105
      goto define_a_symbol;
3106
 
3107
    case_N_LCSYM:               /* Static symbol in BSS segment.  */
3108
    case N_BSLINE:              /* Source line number, BSS segment.  */
3109
      /* N_BROWS: overlaps with N_BSLINE.  */
3110
      valu += ANOFFSET (section_offsets, SECT_OFF_BSS (objfile));
3111
      goto define_a_symbol;
3112
 
3113
    case_N_ROSYM:               /* Static symbol in read-only data segment.  */
3114
      valu += ANOFFSET (section_offsets, SECT_OFF_RODATA (objfile));
3115
      goto define_a_symbol;
3116
 
3117
    case N_ENTRY:               /* Alternate entry point.  */
3118
      /* Relocate for dynamic loading.  */
3119
      valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
3120
      goto define_a_symbol;
3121
 
3122
      /* The following symbol types we don't know how to process.
3123
         Handle them in a "default" way, but complain to people who
3124
         care.  */
3125
    default:
3126
    case N_CATCH:               /* Exception handler catcher.  */
3127
    case N_EHDECL:              /* Exception handler name.  */
3128
    case N_PC:                  /* Global symbol in Pascal.  */
3129
    case N_M2C:                 /* Modula-2 compilation unit.  */
3130
      /* N_MOD2: overlaps with N_EHDECL.  */
3131
    case N_SCOPE:               /* Modula-2 scope information.  */
3132
    case N_ECOML:               /* End common (local name).  */
3133
    case N_NBTEXT:              /* Gould Non-Base-Register symbols???  */
3134
    case N_NBDATA:
3135
    case N_NBBSS:
3136
    case N_NBSTS:
3137
    case N_NBLCS:
3138
      unknown_symtype_complaint (hex_string (type));
3139
      /* FALLTHROUGH */
3140
 
3141
      /* The following symbol types don't need the address field
3142
         relocated, since it is either unused, or is absolute.  */
3143
    define_a_symbol:
3144
    case N_GSYM:                /* Global variable.  */
3145
    case N_NSYMS:               /* Number of symbols (Ultrix).  */
3146
    case N_NOMAP:               /* No map?  (Ultrix).  */
3147
    case N_RSYM:                /* Register variable.  */
3148
    case N_DEFD:                /* Modula-2 GNU module dependency.  */
3149
    case N_SSYM:                /* Struct or union element.  */
3150
    case N_LSYM:                /* Local symbol in stack.  */
3151
    case N_PSYM:                /* Parameter variable.  */
3152
    case N_LENG:                /* Length of preceding symbol type.  */
3153
      if (name)
3154
        {
3155
          int deftype;
3156
          char *colon_pos = strchr (name, ':');
3157
 
3158
          if (colon_pos == NULL)
3159
            deftype = '\0';
3160
          else
3161
            deftype = colon_pos[1];
3162
 
3163
          switch (deftype)
3164
            {
3165
            case 'f':
3166
            case 'F':
3167
              function_stab_type = type;
3168
 
3169
              /* Deal with the SunPRO 3.0 compiler which omits the
3170
                 address from N_FUN symbols.  */
3171
              if (type == N_FUN
3172
                  && valu == ANOFFSET (section_offsets,
3173
                                       SECT_OFF_TEXT (objfile))
3174
                  && gdbarch_sofun_address_maybe_missing (gdbarch))
3175
                {
3176
                  CORE_ADDR minsym_valu =
3177
                    find_stab_function_addr (name, last_source_file, objfile);
3178
 
3179
                  /* The function find_stab_function_addr will return
3180
 
3181
                     (Unfortunately, this might also be a valid
3182
                     address.)  Anyway, if it *does* return 0, it is
3183
                     likely that the value was set correctly to begin
3184
                     with...  */
3185
                  if (minsym_valu != 0)
3186
                    valu = minsym_valu;
3187
                }
3188
 
3189
              if (block_address_function_relative)
3190
                /* For Solaris 2 compilers, the block addresses and
3191
                   N_SLINE's are relative to the start of the
3192
                   function.  On normal systems, and when using GCC on
3193
                   Solaris 2, these addresses are just absolute, or
3194
                   relative to the N_SO, depending on
3195
                   BLOCK_ADDRESS_ABSOLUTE.  */
3196
                function_start_offset = valu;
3197
 
3198
              within_function = 1;
3199
 
3200
              if (context_stack_depth > 1)
3201
                {
3202
                  complaint (&symfile_complaints,
3203
                             _("unmatched N_LBRAC before symtab pos %d"),
3204
                             symnum);
3205
                  break;
3206
                }
3207
 
3208
              if (context_stack_depth > 0)
3209
                {
3210
                  struct block *block;
3211
 
3212
                  new = pop_context ();
3213
                  /* Make a block for the local symbols within.  */
3214
                  block = finish_block (new->name, &local_symbols,
3215
                                        new->old_blocks, new->start_addr,
3216
                                        valu, objfile);
3217
 
3218
                  /* For C++, set the block's scope.  */
3219
                  if (SYMBOL_LANGUAGE (new->name) == language_cplus)
3220
                    cp_set_block_scope (new->name, block,
3221
                                        &objfile->objfile_obstack,
3222
                                        "", 0);
3223
                }
3224
 
3225
              new = push_context (0, valu);
3226
              new->name = define_symbol (valu, name, desc, type, objfile);
3227
              break;
3228
 
3229
            default:
3230
              define_symbol (valu, name, desc, type, objfile);
3231
              break;
3232
            }
3233
        }
3234
      break;
3235
 
3236
      /* We use N_OPT to carry the gcc2_compiled flag.  Sun uses it
3237
         for a bunch of other flags, too.  Someday we may parse their
3238
         flags; for now we ignore theirs and hope they'll ignore ours.  */
3239
    case N_OPT:                 /* Solaris 2: Compiler options.  */
3240
      if (name)
3241
        {
3242
          if (strcmp (name, GCC2_COMPILED_FLAG_SYMBOL) == 0)
3243
            {
3244
              processing_gcc_compilation = 2;
3245
#if 0                           /* Works, but is experimental.  -fnf */
3246
              /* For now, stay with AUTO_DEMANGLING for g++ output, as
3247
                 we don't know whether it will use the old style or v3
3248
                 mangling.  */
3249
              if (AUTO_DEMANGLING)
3250
                {
3251
                  set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
3252
                }
3253
#endif
3254
            }
3255
          else
3256
            n_opt_found = 1;
3257
        }
3258
      break;
3259
 
3260
    case N_MAIN:                /* Name of main routine.  */
3261
      /* FIXME: If one has a symbol file with N_MAIN and then replaces
3262
         it with a symbol file with "main" and without N_MAIN.  I'm
3263
         not sure exactly what rule to follow but probably something
3264
         like: N_MAIN takes precedence over "main" no matter what
3265
         objfile it is in; If there is more than one N_MAIN, choose
3266
         the one in the symfile_objfile; If there is more than one
3267
         N_MAIN within a given objfile, complain() and choose
3268
         arbitrarily. (kingdon) */
3269
      if (name != NULL)
3270
        set_main_name (name);
3271
      break;
3272
 
3273
      /* The following symbol types can be ignored.  */
3274
    case N_OBJ:                 /* Solaris 2: Object file dir and name.  */
3275
    case N_PATCH:               /* Solaris 2: Patch Run Time Checker.  */
3276
      /* N_UNDF:                   Solaris 2: File separator mark.  */
3277
      /* N_UNDF: -- we will never encounter it, since we only process
3278
         one file's symbols at once.  */
3279
    case N_ENDM:                /* Solaris 2: End of module.  */
3280
    case N_ALIAS:               /* SunPro F77: alias name, ignore for now.  */
3281
      break;
3282
    }
3283
 
3284
  /* '#' is a GNU C extension to allow one symbol to refer to another
3285
     related symbol.
3286
 
3287
     Generally this is used so that an alias can refer to its main
3288
     symbol.  */
3289
  if (name[0] == '#')
3290
    {
3291
      /* Initialize symbol reference names and determine if this is a
3292
         definition.  If a symbol reference is being defined, go ahead
3293
         and add it.  Otherwise, just return.  */
3294
 
3295
      char *s = name;
3296
      int refnum;
3297
 
3298
      /* If this stab defines a new reference ID that is not on the
3299
         reference list, then put it on the reference list.
3300
 
3301
         We go ahead and advance NAME past the reference, even though
3302
         it is not strictly necessary at this time.  */
3303
      refnum = symbol_reference_defined (&s);
3304
      if (refnum >= 0)
3305
        if (!ref_search (refnum))
3306
          ref_add (refnum, 0, name, valu);
3307
      name = s;
3308
    }
3309
 
3310
  previous_stab_code = type;
3311
}
3312
 
3313
/* FIXME: The only difference between this and elfstab_build_psymtabs
3314
   is the call to install_minimal_symbols for elf, and the support for
3315
   split sections.  If the differences are really that small, the code
3316
   should be shared.  */
3317
 
3318
/* Scan and build partial symbols for an coff symbol file.
3319
   The coff file has already been processed to get its minimal symbols.
3320
 
3321
   This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
3322
   rolled into one.
3323
 
3324
   OBJFILE is the object file we are reading symbols from.
3325
   ADDR is the address relative to which the symbols are (e.g.
3326
   the base address of the text segment).
3327
   TEXTADDR is the address of the text section.
3328
   TEXTSIZE is the size of the text section.
3329
   STABSECTS is the list of .stab sections in OBJFILE.
3330
   STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
3331
   .stabstr section exists.
3332
 
3333
   This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
3334
   adjusted for coff details. */
3335
 
3336
void
3337
coffstab_build_psymtabs (struct objfile *objfile,
3338
                         CORE_ADDR textaddr, unsigned int textsize,
3339
                         struct stab_section_list *stabsects,
3340
                         file_ptr stabstroffset, unsigned int stabstrsize)
3341
{
3342
  int val;
3343
  bfd *sym_bfd = objfile->obfd;
3344
  char *name = bfd_get_filename (sym_bfd);
3345
  struct dbx_symfile_info *info;
3346
  unsigned int stabsize;
3347
 
3348
  /* There is already a dbx_symfile_info allocated by our caller.
3349
     It might even contain some info from the coff symtab to help us.  */
3350
  info = objfile->deprecated_sym_stab_info;
3351
 
3352
  DBX_TEXT_ADDR (objfile) = textaddr;
3353
  DBX_TEXT_SIZE (objfile) = textsize;
3354
 
3355
#define COFF_STABS_SYMBOL_SIZE  12      /* XXX FIXME XXX */
3356
  DBX_SYMBOL_SIZE (objfile) = COFF_STABS_SYMBOL_SIZE;
3357
  DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
3358
 
3359
  if (stabstrsize > bfd_get_size (sym_bfd))
3360
    error (_("ridiculous string table size: %d bytes"), stabstrsize);
3361
  DBX_STRINGTAB (objfile) = (char *)
3362
    obstack_alloc (&objfile->objfile_obstack, stabstrsize + 1);
3363
  OBJSTAT (objfile, sz_strtab += stabstrsize + 1);
3364
 
3365
  /* Now read in the string table in one big gulp.  */
3366
 
3367
  val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
3368
  if (val < 0)
3369
    perror_with_name (name);
3370
  val = bfd_bread (DBX_STRINGTAB (objfile), stabstrsize, sym_bfd);
3371
  if (val != stabstrsize)
3372
    perror_with_name (name);
3373
 
3374
  stabsread_new_init ();
3375
  buildsym_new_init ();
3376
  free_header_files ();
3377
  init_header_files ();
3378
 
3379
  processing_acc_compilation = 1;
3380
 
3381
  /* In a coff file, we've already installed the minimal symbols that came
3382
     from the coff (non-stab) symbol table, so always act like an
3383
     incremental load here. */
3384
  if (stabsects->next == NULL)
3385
    {
3386
      stabsize = bfd_section_size (sym_bfd, stabsects->section);
3387
      DBX_SYMCOUNT (objfile) = stabsize / DBX_SYMBOL_SIZE (objfile);
3388
      DBX_SYMTAB_OFFSET (objfile) = stabsects->section->filepos;
3389
    }
3390
  else
3391
    {
3392
      struct stab_section_list *stabsect;
3393
 
3394
      DBX_SYMCOUNT (objfile) = 0;
3395
      for (stabsect = stabsects; stabsect != NULL; stabsect = stabsect->next)
3396
        {
3397
          stabsize = bfd_section_size (sym_bfd, stabsect->section);
3398
          DBX_SYMCOUNT (objfile) += stabsize / DBX_SYMBOL_SIZE (objfile);
3399
        }
3400
 
3401
      DBX_SYMTAB_OFFSET (objfile) = stabsects->section->filepos;
3402
 
3403
      symbuf_sections = stabsects->next;
3404
      symbuf_left = bfd_section_size (sym_bfd, stabsects->section);
3405
      symbuf_read = 0;
3406
    }
3407
 
3408
  dbx_symfile_read (objfile, 0);
3409
}
3410
 
3411
/* Scan and build partial symbols for an ELF symbol file.
3412
   This ELF file has already been processed to get its minimal symbols.
3413
 
3414
   This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
3415
   rolled into one.
3416
 
3417
   OBJFILE is the object file we are reading symbols from.
3418
   ADDR is the address relative to which the symbols are (e.g.
3419
   the base address of the text segment).
3420
   STABSECT is the BFD section information for the .stab section.
3421
   STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
3422
   .stabstr section exists.
3423
 
3424
   This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
3425
   adjusted for elf details. */
3426
 
3427
void
3428
elfstab_build_psymtabs (struct objfile *objfile, asection *stabsect,
3429
                        file_ptr stabstroffset, unsigned int stabstrsize)
3430
{
3431
  int val;
3432
  bfd *sym_bfd = objfile->obfd;
3433
  char *name = bfd_get_filename (sym_bfd);
3434
  struct dbx_symfile_info *info;
3435
  struct cleanup *back_to = NULL;
3436
 
3437
  /* There is already a dbx_symfile_info allocated by our caller.
3438
     It might even contain some info from the ELF symtab to help us.  */
3439
  info = objfile->deprecated_sym_stab_info;
3440
 
3441
  /* Find the first and last text address.  dbx_symfile_read seems to
3442
     want this.  */
3443
  find_text_range (sym_bfd, objfile);
3444
 
3445
#define ELF_STABS_SYMBOL_SIZE   12      /* XXX FIXME XXX */
3446
  DBX_SYMBOL_SIZE (objfile) = ELF_STABS_SYMBOL_SIZE;
3447
  DBX_SYMCOUNT (objfile)
3448
    = bfd_section_size (objfile->obfd, stabsect) / DBX_SYMBOL_SIZE (objfile);
3449
  DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
3450
  DBX_SYMTAB_OFFSET (objfile) = stabsect->filepos;
3451
  DBX_STAB_SECTION (objfile) = stabsect;
3452
 
3453
  if (stabstrsize > bfd_get_size (sym_bfd))
3454
    error (_("ridiculous string table size: %d bytes"), stabstrsize);
3455
  DBX_STRINGTAB (objfile) = (char *)
3456
    obstack_alloc (&objfile->objfile_obstack, stabstrsize + 1);
3457
  OBJSTAT (objfile, sz_strtab += stabstrsize + 1);
3458
 
3459
  /* Now read in the string table in one big gulp.  */
3460
 
3461
  val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
3462
  if (val < 0)
3463
    perror_with_name (name);
3464
  val = bfd_bread (DBX_STRINGTAB (objfile), stabstrsize, sym_bfd);
3465
  if (val != stabstrsize)
3466
    perror_with_name (name);
3467
 
3468
  stabsread_new_init ();
3469
  buildsym_new_init ();
3470
  free_header_files ();
3471
  init_header_files ();
3472
 
3473
  processing_acc_compilation = 1;
3474
 
3475
  symbuf_read = 0;
3476
  symbuf_left = bfd_section_size (objfile->obfd, stabsect);
3477
  stabs_data = symfile_relocate_debug_section (objfile, stabsect, NULL);
3478
  if (stabs_data)
3479
    back_to = make_cleanup (free_current_contents, (void *) &stabs_data);
3480
 
3481
  /* In an elf file, we've already installed the minimal symbols that came
3482
     from the elf (non-stab) symbol table, so always act like an
3483
     incremental load here.  dbx_symfile_read should not generate any new
3484
     minimal symbols, since we will have already read the ELF dynamic symbol
3485
     table and normal symbol entries won't be in the ".stab" section; but in
3486
     case it does, it will install them itself.  */
3487
  dbx_symfile_read (objfile, 0);
3488
 
3489
  if (back_to)
3490
    do_cleanups (back_to);
3491
}
3492
 
3493
/* Scan and build partial symbols for a file with special sections for stabs
3494
   and stabstrings.  The file has already been processed to get its minimal
3495
   symbols, and any other symbols that might be necessary to resolve GSYMs.
3496
 
3497
   This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
3498
   rolled into one.
3499
 
3500
   OBJFILE is the object file we are reading symbols from.
3501
   ADDR is the address relative to which the symbols are (e.g. the base address
3502
   of the text segment).
3503
   STAB_NAME is the name of the section that contains the stabs.
3504
   STABSTR_NAME is the name of the section that contains the stab strings.
3505
 
3506
   This routine is mostly copied from dbx_symfile_init and dbx_symfile_read. */
3507
 
3508
void
3509
stabsect_build_psymtabs (struct objfile *objfile, char *stab_name,
3510
                         char *stabstr_name, char *text_name)
3511
{
3512
  int val;
3513
  bfd *sym_bfd = objfile->obfd;
3514
  char *name = bfd_get_filename (sym_bfd);
3515
  asection *stabsect;
3516
  asection *stabstrsect;
3517
  asection *text_sect;
3518
 
3519
  stabsect = bfd_get_section_by_name (sym_bfd, stab_name);
3520
  stabstrsect = bfd_get_section_by_name (sym_bfd, stabstr_name);
3521
 
3522
  if (!stabsect)
3523
    return;
3524
 
3525
  if (!stabstrsect)
3526
    error (_("stabsect_build_psymtabs:  Found stabs (%s), but not string \
3527
section (%s)"),
3528
           stab_name, stabstr_name);
3529
 
3530
  objfile->deprecated_sym_stab_info = (struct dbx_symfile_info *)
3531
    xmalloc (sizeof (struct dbx_symfile_info));
3532
  memset (objfile->deprecated_sym_stab_info, 0,
3533
          sizeof (struct dbx_symfile_info));
3534
 
3535
  text_sect = bfd_get_section_by_name (sym_bfd, text_name);
3536
  if (!text_sect)
3537
    error (_("Can't find %s section in symbol file"), text_name);
3538
  DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
3539
  DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
3540
 
3541
  DBX_SYMBOL_SIZE (objfile) = sizeof (struct external_nlist);
3542
  DBX_SYMCOUNT (objfile) = bfd_section_size (sym_bfd, stabsect)
3543
    / DBX_SYMBOL_SIZE (objfile);
3544
  DBX_STRINGTAB_SIZE (objfile) = bfd_section_size (sym_bfd, stabstrsect);
3545
  DBX_SYMTAB_OFFSET (objfile) = stabsect->filepos;      /* XXX - FIXME: POKING INSIDE BFD DATA STRUCTURES */
3546
 
3547
  if (DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
3548
    error (_("ridiculous string table size: %d bytes"),
3549
           DBX_STRINGTAB_SIZE (objfile));
3550
  DBX_STRINGTAB (objfile) = (char *)
3551
    obstack_alloc (&objfile->objfile_obstack, DBX_STRINGTAB_SIZE (objfile) + 1);
3552
  OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile) + 1);
3553
 
3554
  /* Now read in the string table in one big gulp.  */
3555
 
3556
  val = bfd_get_section_contents (sym_bfd,      /* bfd */
3557
                                  stabstrsect,  /* bfd section */
3558
                                  DBX_STRINGTAB (objfile), /* input buffer */
3559
                                  0,     /* offset into section */
3560
                                  DBX_STRINGTAB_SIZE (objfile)); /* amount to read */
3561
 
3562
  if (!val)
3563
    perror_with_name (name);
3564
 
3565
  stabsread_new_init ();
3566
  buildsym_new_init ();
3567
  free_header_files ();
3568
  init_header_files ();
3569
 
3570
  /* Now, do an incremental load */
3571
 
3572
  processing_acc_compilation = 1;
3573
  dbx_symfile_read (objfile, 0);
3574
}
3575
 
3576
static struct sym_fns aout_sym_fns =
3577
{
3578
  bfd_target_aout_flavour,
3579
  dbx_new_init,         /* sym_new_init: init anything gbl to entire symtab */
3580
  dbx_symfile_init,     /* sym_init: read initial info, setup for sym_read() */
3581
  dbx_symfile_read,             /* sym_read: read a symbol file into symtab */
3582
  dbx_symfile_finish,           /* sym_finish: finished with file, cleanup */
3583
  default_symfile_offsets, /* sym_offsets: parse user's offsets to
3584
                              internal form */
3585
  default_symfile_segments,     /* sym_segments: Get segment information from
3586
                                   a file.  */
3587
  NULL,                         /* sym_read_linetable */
3588
  default_symfile_relocate,     /* sym_relocate: Relocate a debug section.  */
3589
  &psym_functions,
3590
  NULL                          /* next: pointer to next struct sym_fns */
3591
};
3592
 
3593
void
3594
_initialize_dbxread (void)
3595
{
3596
  add_symtab_fns (&aout_sym_fns);
3597
}

powered by: WebSVN 2.1.0

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