]> Git Repo - binutils.git/blob - gdb/dbxread.c
Expose .edata section
[binutils.git] / gdb / dbxread.c
1 /* Read dbx symbol tables and convert to internal format, for GDB.
2    Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995
3    Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
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(USG) || defined(__CYGNUSCLIB__)
39 #include <sys/types.h>
40 #include <fcntl.h>
41 #endif
42
43 #include <obstack.h>
44 #include <sys/param.h>
45 #ifndef NO_SYS_FILE
46 #include <sys/file.h>
47 #endif
48 #include "gdb_stat.h"
49 #include <ctype.h>
50 #include "symtab.h"
51 #include "breakpoint.h"
52 #include "command.h"
53 #include "target.h"
54 #include "gdbcore.h"            /* for bfd stuff */
55 #include "libaout.h"            /* FIXME Secret internal BFD stuff for a.out */
56 #include "symfile.h"
57 #include "objfiles.h"
58 #include "buildsym.h"
59 #include "stabsread.h"
60 #include "gdb-stabs.h"
61 #include "demangle.h"
62 #include "language.h"           /* Needed inside partial-stab.h */
63 #include "complaints.h"
64
65 #include "aout/aout64.h"
66 #include "aout/stab_gnu.h"      /* We always use GNU stabs, not native, now */
67
68 \f
69 /* We put a pointer to this structure in the read_symtab_private field
70    of the psymtab.  */
71
72 struct symloc {
73
74   /* Offset within the file symbol table of first local symbol for this
75      file.  */
76
77   int ldsymoff;
78
79   /* Length (in bytes) of the section of the symbol table devoted to
80      this file's symbols (actually, the section bracketed may contain
81      more than just this file's symbols).  If ldsymlen is 0, the only
82      reason for this thing's existence is the dependency list.  Nothing
83      else will happen when it is read in.  */
84
85   int ldsymlen;
86
87   /* The size of each symbol in the symbol file (in external form).  */
88
89   int symbol_size;
90
91   /* Further information needed to locate the symbols if they are in
92      an ELF file.  */
93
94   int symbol_offset;
95   int string_offset;
96   int file_string_offset;
97 };
98
99 #define LDSYMOFF(p) (((struct symloc *)((p)->read_symtab_private))->ldsymoff)
100 #define LDSYMLEN(p) (((struct symloc *)((p)->read_symtab_private))->ldsymlen)
101 #define SYMLOC(p) ((struct symloc *)((p)->read_symtab_private))
102 #define SYMBOL_SIZE(p) (SYMLOC(p)->symbol_size)
103 #define SYMBOL_OFFSET(p) (SYMLOC(p)->symbol_offset)
104 #define STRING_OFFSET(p) (SYMLOC(p)->string_offset)
105 #define FILE_STRING_OFFSET(p) (SYMLOC(p)->file_string_offset)
106
107 \f
108 /* Macro to determine which symbols to ignore when reading the first symbol
109    of a file.  Some machines override this definition. */
110 #ifndef IGNORE_SYMBOL
111 /* This code is used on Ultrix systems.  Ignore it */
112 #define IGNORE_SYMBOL(type)  (type == (int)N_NSYMS)
113 #endif
114
115 /* Remember what we deduced to be the source language of this psymtab. */
116
117 static enum language psymtab_language = language_unknown;
118
119 /* Nonzero means give verbose info on gdb action.  From main.c.  */
120 extern int info_verbose;
121
122 /* The BFD for this file -- implicit parameter to next_symbol_text.  */
123
124 static bfd *symfile_bfd;
125
126 /* The size of each symbol in the symbol file (in external form).
127    This is set by dbx_symfile_read when building psymtabs, and by
128    dbx_psymtab_to_symtab when building symtabs.  */
129
130 static unsigned symbol_size;
131
132 /* This is the offset of the symbol table in the executable file */
133 static unsigned symbol_table_offset;
134
135 /* This is the offset of the string table in the executable file */
136 static unsigned string_table_offset;
137
138 /* For elf+stab executables, the n_strx field is not a simple index
139    into the string table.  Instead, each .o file has a base offset
140    in the string table, and the associated symbols contain offsets
141    from this base.  The following two variables contain the base
142    offset for the current and next .o files. */
143 static unsigned int file_string_table_offset;
144 static unsigned int next_file_string_table_offset;
145
146 /* .o and NLM files contain unrelocated addresses which are based at 0.  When
147    non-zero, this flag disables some of the special cases for Solaris elf+stab
148    text addresses at location 0. */
149
150 static int symfile_relocatable = 0;
151
152   /* If this is nonzero, N_LBRAC, N_RBRAC, and N_SLINE entries are relative
153      to the function start address.  */
154
155 static int block_address_function_relative = 0;
156 \f
157 /* The lowest text address we have yet encountered.  This is needed
158    because in an a.out file, there is no header field which tells us
159    what address the program is actually going to be loaded at, so we
160    need to make guesses based on the symbols (which *are* relocated to
161    reflect the address it will be loaded at).  */
162 static CORE_ADDR lowest_text_address;
163
164 /* Complaints about the symbols we have encountered.  */
165
166 struct complaint lbrac_complaint = 
167   {"bad block start address patched", 0, 0};
168
169 struct complaint string_table_offset_complaint =
170   {"bad string table offset in symbol %d", 0, 0};
171
172 struct complaint unknown_symtype_complaint =
173   {"unknown symbol type %s", 0, 0};
174
175 struct complaint unknown_symchar_complaint =
176   {"unknown symbol descriptor `%c'", 0, 0};
177
178 struct complaint lbrac_rbrac_complaint =
179   {"block start larger than block end", 0, 0};
180
181 struct complaint lbrac_unmatched_complaint =
182   {"unmatched N_LBRAC before symtab pos %d", 0, 0};
183
184 struct complaint lbrac_mismatch_complaint =
185   {"N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d", 0, 0};
186
187 struct complaint repeated_header_complaint =
188   {"\"repeated\" header file %s not previously seen, at symtab pos %d", 0, 0};
189 \f
190 /* During initial symbol readin, we need to have a structure to keep
191    track of which psymtabs have which bincls in them.  This structure
192    is used during readin to setup the list of dependencies within each
193    partial symbol table. */
194
195 struct header_file_location
196 {
197   char *name;                   /* Name of header file */
198   int instance;                 /* See above */
199   struct partial_symtab *pst;   /* Partial symtab that has the
200                                    BINCL/EINCL defs for this file */
201 };
202
203 /* The actual list and controling variables */
204 static struct header_file_location *bincl_list, *next_bincl;
205 static int bincls_allocated;
206
207 /* Local function prototypes */
208
209 static void
210 free_header_files PARAMS ((void));
211
212 static void
213 init_header_files PARAMS ((void));
214
215 static void
216 read_ofile_symtab PARAMS ((struct partial_symtab *));
217
218 static void
219 dbx_psymtab_to_symtab PARAMS ((struct partial_symtab *));
220
221 static void
222 dbx_psymtab_to_symtab_1 PARAMS ((struct partial_symtab *));
223
224 static void
225 read_dbx_dynamic_symtab PARAMS ((struct section_offsets *,
226                                  struct objfile *objfile));
227
228 static void
229 read_dbx_symtab PARAMS ((struct section_offsets *, struct objfile *,
230                          CORE_ADDR, int));
231
232 static void
233 free_bincl_list PARAMS ((struct objfile *));
234
235 static struct partial_symtab *
236 find_corresponding_bincl_psymtab PARAMS ((char *, int));
237
238 static void
239 add_bincl_to_list PARAMS ((struct partial_symtab *, char *, int));
240
241 static void
242 init_bincl_list PARAMS ((int, struct objfile *));
243
244 static char *
245 dbx_next_symbol_text PARAMS ((void));
246
247 static void
248 fill_symbuf PARAMS ((bfd *));
249
250 static void
251 dbx_symfile_init PARAMS ((struct objfile *));
252
253 static void
254 dbx_new_init PARAMS ((struct objfile *));
255
256 static void
257 dbx_symfile_read PARAMS ((struct objfile *, struct section_offsets *, int));
258
259 static void
260 dbx_symfile_finish PARAMS ((struct objfile *));
261
262 static void
263 record_minimal_symbol PARAMS ((char *, CORE_ADDR, int, struct objfile *));
264
265 static void
266 add_new_header_file PARAMS ((char *, int));
267
268 static void
269 add_old_header_file PARAMS ((char *, int));
270
271 static void
272 add_this_object_header_file PARAMS ((int));
273
274 /* Free up old header file tables */
275
276 static void
277 free_header_files ()
278 {
279   register int i;
280
281   if (header_files != NULL)
282     {
283       for (i = 0; i < n_header_files; i++)
284         {
285           free (header_files[i].name);
286         }
287       free ((PTR)header_files);
288       header_files = NULL;
289       n_header_files = 0;
290     }
291   if (this_object_header_files)
292     {
293       free ((PTR)this_object_header_files);
294       this_object_header_files = NULL;
295     }
296   n_allocated_header_files = 0;
297   n_allocated_this_object_header_files = 0;
298 }
299
300 /* Allocate new header file tables */
301
302 static void
303 init_header_files ()
304 {
305   n_header_files = 0;
306   n_allocated_header_files = 10;
307   header_files = (struct header_file *)
308     xmalloc (10 * sizeof (struct header_file));
309
310   n_allocated_this_object_header_files = 10;
311   this_object_header_files = (int *) xmalloc (10 * sizeof (int));
312 }
313
314 /* Add header file number I for this object file
315    at the next successive FILENUM.  */
316
317 static void
318 add_this_object_header_file (i)
319      int i;
320 {
321   if (n_this_object_header_files == n_allocated_this_object_header_files)
322     {
323       n_allocated_this_object_header_files *= 2;
324       this_object_header_files
325         = (int *) xrealloc ((char *) this_object_header_files,
326                             n_allocated_this_object_header_files * sizeof (int));
327     }
328
329   this_object_header_files[n_this_object_header_files++] = i;
330 }
331
332 /* Add to this file an "old" header file, one already seen in
333    a previous object file.  NAME is the header file's name.
334    INSTANCE is its instance code, to select among multiple
335    symbol tables for the same header file.  */
336
337 static void
338 add_old_header_file (name, instance)
339      char *name;
340      int instance;
341 {
342   register struct header_file *p = header_files;
343   register int i;
344
345   for (i = 0; i < n_header_files; i++)
346     if (STREQ (p[i].name, name) && instance == p[i].instance)
347       {
348         add_this_object_header_file (i);
349         return;
350       }
351   complain (&repeated_header_complaint, name, symnum);
352 }
353
354 /* Add to this file a "new" header file: definitions for its types follow.
355    NAME is the header file's name.
356    Most often this happens only once for each distinct header file,
357    but not necessarily.  If it happens more than once, INSTANCE has
358    a different value each time, and references to the header file
359    use INSTANCE values to select among them.
360
361    dbx output contains "begin" and "end" markers for each new header file,
362    but at this level we just need to know which files there have been;
363    so we record the file when its "begin" is seen and ignore the "end".  */
364
365 static void
366 add_new_header_file (name, instance)
367      char *name;
368      int instance;
369 {
370   register int i;
371
372   /* Make sure there is room for one more header file.  */
373
374   if (n_header_files == n_allocated_header_files)
375     {
376       n_allocated_header_files *= 2;
377       header_files = (struct header_file *)
378         xrealloc ((char *) header_files,
379                   (n_allocated_header_files * sizeof (struct header_file)));
380     }
381
382   /* Create an entry for this header file.  */
383
384   i = n_header_files++;
385   header_files[i].name = savestring (name, strlen(name));
386   header_files[i].instance = instance;
387   header_files[i].length = 10;
388   header_files[i].vector
389     = (struct type **) xmalloc (10 * sizeof (struct type *));
390   memset (header_files[i].vector, 0, 10 * sizeof (struct type *));
391
392   add_this_object_header_file (i);
393 }
394
395 #if 0
396 static struct type **
397 explicit_lookup_type (real_filenum, index)
398      int real_filenum, index;
399 {
400   register struct header_file *f = &header_files[real_filenum];
401
402   if (index >= f->length)
403     {
404       f->length *= 2;
405       f->vector = (struct type **)
406         xrealloc (f->vector, f->length * sizeof (struct type *));
407       memset (&f->vector[f->length / 2],
408              '\0', f->length * sizeof (struct type *) / 2);
409     }
410   return &f->vector[index];
411 }
412 #endif
413 \f
414 static void
415 record_minimal_symbol (name, address, type, objfile)
416      char *name;
417      CORE_ADDR address;
418      int type;
419      struct objfile *objfile;
420 {
421   enum minimal_symbol_type ms_type;
422   int section;
423
424   switch (type)
425     {
426     case N_TEXT | N_EXT:
427       ms_type = mst_text;
428       section = SECT_OFF_TEXT;
429       break;
430     case N_DATA | N_EXT:
431       ms_type = mst_data;
432       section = SECT_OFF_DATA;
433       break;
434     case N_BSS | N_EXT:
435       ms_type = mst_bss;
436       section = SECT_OFF_BSS;
437       break;
438     case N_ABS | N_EXT:
439       ms_type = mst_abs;
440       section = -1;
441       break;
442 #ifdef N_SETV
443     case N_SETV | N_EXT:
444       ms_type = mst_data;
445       section = SECT_OFF_DATA;
446       break;
447     case N_SETV:
448       /* I don't think this type actually exists; since a N_SETV is the result
449          of going over many .o files, it doesn't make sense to have one
450          file local.  */
451       ms_type = mst_file_data;
452       section = SECT_OFF_DATA;
453       break;
454 #endif
455     case N_TEXT:
456     case N_NBTEXT:
457     case N_FN:
458     case N_FN_SEQ:
459       ms_type = mst_file_text;
460       section = SECT_OFF_TEXT;
461       break;
462     case N_DATA:
463       ms_type = mst_file_data;
464
465       /* Check for __DYNAMIC, which is used by Sun shared libraries. 
466          Record it as global even if it's local, not global, so
467          lookup_minimal_symbol can find it.  We don't check symbol_leading_char
468          because for SunOS4 it always is '_'.  */
469       if (name[8] == 'C' && STREQ ("__DYNAMIC", name))
470         ms_type = mst_data;
471
472       /* Same with virtual function tables, both global and static.  */
473       {
474         char *tempstring = name;
475         if (tempstring[0] == bfd_get_symbol_leading_char (objfile->obfd))
476           ++tempstring;
477         if (VTBL_PREFIX_P ((tempstring)))
478           ms_type = mst_data;
479       }
480       section = SECT_OFF_DATA;
481       break;
482     case N_BSS:
483       ms_type = mst_file_bss;
484       section = SECT_OFF_BSS;
485       break;
486     default:
487       ms_type = mst_unknown;
488       section = -1;
489       break;
490   }
491
492   if ((ms_type == mst_file_text || ms_type == mst_text)
493       && address < lowest_text_address)
494     lowest_text_address = address;
495
496   prim_record_minimal_symbol_and_info
497     (obsavestring (name, strlen (name), &objfile -> symbol_obstack),
498      address,
499      ms_type,
500      NULL,
501      section,
502      objfile);
503 }
504 \f
505 /* Scan and build partial symbols for a symbol file.
506    We have been initialized by a call to dbx_symfile_init, which 
507    put all the relevant info into a "struct dbx_symfile_info",
508    hung off the objfile structure.
509
510    SECTION_OFFSETS contains offsets relative to which the symbols in the
511    various sections are (depending where the sections were actually loaded).
512    MAINLINE is true if we are reading the main symbol
513    table (as opposed to a shared lib or dynamically loaded file).  */
514
515 static void
516 dbx_symfile_read (objfile, section_offsets, mainline)
517      struct objfile *objfile;
518      struct section_offsets *section_offsets;
519      int mainline;      /* FIXME comments above */
520 {
521   bfd *sym_bfd;
522   int val;
523   struct cleanup *back_to;
524
525   val = strlen (objfile->name);
526
527   /* .o and .nlm files are relocatables with text, data and bss segs based at
528      0.  This flag disables special (Solaris stabs-in-elf only) fixups for
529      symbols with a value of 0.  XXX - This is a Krock.  Solaris stabs-in-elf
530      should be fixed to determine pst->textlow without using this text seg of
531      0 fixup crap. */
532
533   if (strcmp (&objfile->name[val-2], ".o") == 0
534       || strcmp (&objfile->name[val-4], ".nlm") == 0)
535     symfile_relocatable = 1;
536
537   /* This is true for Solaris (and all other systems which put stabs
538      in sections, hopefully, since it would be silly to do things
539      differently from Solaris), and false for SunOS4 and other a.out
540      file formats.  */
541   block_address_function_relative =
542     ((0 == strncmp (bfd_get_target (objfile->obfd), "elf", 3))
543      || (0 == strncmp (bfd_get_target (objfile->obfd), "som", 3))
544      || (0 == strncmp (bfd_get_target (objfile->obfd), "coff", 4))
545      || (0 == strncmp (bfd_get_target (objfile->obfd), "pe", 2))
546      || (0 == strncmp (bfd_get_target (objfile->obfd), "nlm", 3)));
547
548   sym_bfd = objfile->obfd;
549   val = bfd_seek (objfile->obfd, DBX_SYMTAB_OFFSET (objfile), SEEK_SET);
550   if (val < 0)
551     perror_with_name (objfile->name);
552
553   /* If we are reinitializing, or if we have never loaded syms yet, init */
554   if (mainline
555       || objfile->global_psymbols.size == 0
556       || objfile->static_psymbols.size == 0)
557     init_psymbol_list (objfile, DBX_SYMCOUNT (objfile));
558
559   symbol_size = DBX_SYMBOL_SIZE (objfile);
560   symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
561
562   pending_blocks = 0;
563   back_to = make_cleanup (really_free_pendings, 0);
564
565   init_minimal_symbol_collection ();
566   make_cleanup (discard_minimal_symbols, 0);
567
568   /* Now that the symbol table data of the executable file are all in core,
569      process them and define symbols accordingly.  */
570
571   read_dbx_symtab (section_offsets, objfile,
572                    DBX_TEXT_ADDR (objfile),
573                    DBX_TEXT_SIZE (objfile));
574
575   /* Add the dynamic symbols.  */
576
577   read_dbx_dynamic_symtab (section_offsets, 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 (ignore)
593      struct objfile *ignore;
594 {
595   stabsread_new_init ();
596   buildsym_new_init ();
597   init_header_files ();
598 }
599
600
601 /* dbx_symfile_init ()
602    is the dbx-specific initialization routine for reading symbols.
603    It is passed a struct objfile which contains, among other things,
604    the BFD for the file whose symbols are being read, and a slot for a pointer
605    to "private data" which we fill with goodies.
606
607    We read the string table into malloc'd space and stash a pointer to it.
608
609    Since BFD doesn't know how to read debug symbols in a format-independent
610    way (and may never do so...), we have to do it ourselves.  We will never
611    be called unless this is an a.out (or very similar) file. 
612    FIXME, there should be a cleaner peephole into the BFD environment here.  */
613
614 #define DBX_STRINGTAB_SIZE_SIZE sizeof(long)   /* FIXME */
615
616 static void
617 dbx_symfile_init (objfile)
618      struct objfile *objfile;
619 {
620   int val;
621   bfd *sym_bfd = objfile->obfd;
622   char *name = bfd_get_filename (sym_bfd);
623   asection *text_sect;
624   unsigned char size_temp[DBX_STRINGTAB_SIZE_SIZE];
625
626   /* Allocate struct to keep track of the symfile */
627   objfile->sym_stab_info = (PTR)
628     xmmalloc (objfile -> md, sizeof (struct dbx_symfile_info));
629
630   /* FIXME POKING INSIDE BFD DATA STRUCTURES */
631 #define STRING_TABLE_OFFSET     (sym_bfd->origin + obj_str_filepos (sym_bfd))
632 #define SYMBOL_TABLE_OFFSET     (sym_bfd->origin + obj_sym_filepos (sym_bfd))
633
634   /* FIXME POKING INSIDE BFD DATA STRUCTURES */
635
636   DBX_SYMFILE_INFO (objfile)->stab_section_info = NULL;
637   
638   text_sect = bfd_get_section_by_name (sym_bfd, ".text");
639   if (!text_sect)
640     error ("Can't find .text section in symbol file");
641   DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
642   DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
643
644   DBX_SYMBOL_SIZE (objfile) = obj_symbol_entry_size (sym_bfd);
645   DBX_SYMCOUNT (objfile) = bfd_get_symcount (sym_bfd);
646   DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
647
648   /* Read the string table and stash it away in the psymbol_obstack.  It is
649      only needed as long as we need to expand psymbols into full symbols,
650      so when we blow away the psymbol the string table goes away as well.
651      Note that gdb used to use the results of attempting to malloc the
652      string table, based on the size it read, as a form of sanity check
653      for botched byte swapping, on the theory that a byte swapped string
654      table size would be so totally bogus that the malloc would fail.  Now
655      that we put in on the psymbol_obstack, we can't do this since gdb gets
656      a fatal error (out of virtual memory) if the size is bogus.  We can
657      however at least check to see if the size is less than the size of
658      the size field itself, or larger than the size of the entire file.
659      Note that all valid string tables have a size greater than zero, since
660      the bytes used to hold the size are included in the count. */
661
662   if (STRING_TABLE_OFFSET == 0)
663     {
664       /* It appears that with the existing bfd code, STRING_TABLE_OFFSET
665          will never be zero, even when there is no string table.  This
666          would appear to be a bug in bfd. */
667       DBX_STRINGTAB_SIZE (objfile) = 0;
668       DBX_STRINGTAB (objfile) = NULL;
669     }
670   else
671     {
672       val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
673       if (val < 0)
674         perror_with_name (name);
675       
676       memset ((PTR) size_temp, 0, sizeof (size_temp));
677       val = bfd_read ((PTR) size_temp, sizeof (size_temp), 1, sym_bfd);
678       if (val < 0)
679         {
680           perror_with_name (name);
681         }
682       else if (val == 0)
683         {
684           /* With the existing bfd code, STRING_TABLE_OFFSET will be set to
685              EOF if there is no string table, and attempting to read the size
686              from EOF will read zero bytes. */
687           DBX_STRINGTAB_SIZE (objfile) = 0;
688           DBX_STRINGTAB (objfile) = NULL;
689         }
690       else
691         {
692           /* Read some data that would appear to be the string table size.
693              If there really is a string table, then it is probably the right
694              size.  Byteswap if necessary and validate the size.  Note that
695              the minimum is DBX_STRINGTAB_SIZE_SIZE.  If we just read some
696              random data that happened to be at STRING_TABLE_OFFSET, because
697              bfd can't tell us there is no string table, the sanity checks may
698              or may not catch this. */
699           DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
700           
701           if (DBX_STRINGTAB_SIZE (objfile) < sizeof (size_temp)
702               || DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
703             error ("ridiculous string table size (%d bytes).",
704                    DBX_STRINGTAB_SIZE (objfile));
705           
706           DBX_STRINGTAB (objfile) =
707             (char *) obstack_alloc (&objfile -> psymbol_obstack,
708                                     DBX_STRINGTAB_SIZE (objfile));
709           
710           /* Now read in the string table in one big gulp.  */
711           
712           val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
713           if (val < 0)
714             perror_with_name (name);
715           val = bfd_read (DBX_STRINGTAB (objfile), DBX_STRINGTAB_SIZE (objfile), 1,
716                           sym_bfd);
717           if (val != DBX_STRINGTAB_SIZE (objfile))
718             perror_with_name (name);
719         }
720     }
721 }
722
723 /* Perform any local cleanups required when we are done with a particular
724    objfile.  I.E, we are in the process of discarding all symbol information
725    for an objfile, freeing up all memory held for it, and unlinking the
726    objfile struct from the global list of known objfiles. */
727
728 static void
729 dbx_symfile_finish (objfile)
730      struct objfile *objfile;
731 {
732   if (objfile->sym_stab_info != NULL)
733     {
734       mfree (objfile -> md, objfile->sym_stab_info);
735     }
736   free_header_files ();
737 }
738
739 \f
740 /* Buffer for reading the symbol table entries.  */
741 static struct internal_nlist symbuf[4096];
742 static int symbuf_idx;
743 static int symbuf_end;
744
745 /* Name of last function encountered.  Used in Solaris to approximate
746    object file boundaries.  */
747 static char *last_function_name;
748
749 /* The address in memory of the string table of the object file we are
750    reading (which might not be the "main" object file, but might be a
751    shared library or some other dynamically loaded thing).  This is
752    set by read_dbx_symtab when building psymtabs, and by
753    read_ofile_symtab when building symtabs, and is used only by
754    next_symbol_text.  FIXME: If that is true, we don't need it when
755    building psymtabs, right?  */
756 static char *stringtab_global;
757
758 /* These variables are used to control fill_symbuf when the stabs
759    symbols are not contiguous (as may be the case when a COFF file is
760    linked using --split-by-reloc).  */
761 static struct stab_section_list *symbuf_sections;
762 static unsigned int symbuf_left;
763 static unsigned int symbuf_read;
764
765 /* Refill the symbol table input buffer
766    and set the variables that control fetching entries from it.
767    Reports an error if no data available.
768    This function can read past the end of the symbol table
769    (into the string table) but this does no harm.  */
770
771 static void
772 fill_symbuf (sym_bfd)
773      bfd *sym_bfd;
774 {
775   unsigned int count;
776   int nbytes;
777
778   if (symbuf_sections == NULL)
779     count = sizeof (symbuf);
780   else
781     {
782       if (symbuf_left <= 0)
783         {
784           file_ptr filepos = symbuf_sections->section->filepos;
785           if (bfd_seek (sym_bfd, filepos, SEEK_SET) != 0)
786             perror_with_name (bfd_get_filename (sym_bfd));
787           symbuf_left = bfd_section_size (sym_bfd, symbuf_sections->section);
788           symbol_table_offset = filepos - symbuf_read;
789           symbuf_sections = symbuf_sections->next;
790         }
791
792       count = symbuf_left;
793       if (count > sizeof (symbuf))
794         count = sizeof (symbuf);
795     }
796
797   nbytes = bfd_read ((PTR)symbuf, count, 1, sym_bfd);
798   if (nbytes < 0)
799     perror_with_name (bfd_get_filename (sym_bfd));
800   else if (nbytes == 0)
801     error ("Premature end of file reading symbol table");
802   symbuf_end = nbytes / symbol_size;
803   symbuf_idx = 0;
804   symbuf_left -= nbytes;
805   symbuf_read += nbytes;
806 }
807
808 #define SWAP_SYMBOL(symp, abfd) \
809   { \
810     (symp)->n_strx = bfd_h_get_32(abfd,                 \
811                                 (unsigned char *)&(symp)->n_strx);      \
812     (symp)->n_desc = bfd_h_get_16 (abfd,                        \
813                                 (unsigned char *)&(symp)->n_desc);      \
814     (symp)->n_value = bfd_h_get_32 (abfd,                       \
815                                 (unsigned char *)&(symp)->n_value);     \
816   }
817
818 /* Invariant: The symbol pointed to by symbuf_idx is the first one
819    that hasn't been swapped.  Swap the symbol at the same time
820    that symbuf_idx is incremented.  */
821
822 /* dbx allows the text of a symbol name to be continued into the
823    next symbol name!  When such a continuation is encountered
824    (a \ at the end of the text of a name)
825    call this function to get the continuation.  */
826
827 static char *
828 dbx_next_symbol_text ()
829 {
830   if (symbuf_idx == symbuf_end)
831     fill_symbuf (symfile_bfd);
832   symnum++;
833   SWAP_SYMBOL(&symbuf[symbuf_idx], symfile_bfd);
834   return symbuf[symbuf_idx++].n_strx + stringtab_global
835           + file_string_table_offset;
836 }
837 \f
838 /* Initialize the list of bincls to contain none and have some
839    allocated.  */
840
841 static void
842 init_bincl_list (number, objfile)
843      int number;
844      struct objfile *objfile;
845 {
846   bincls_allocated = number;
847   next_bincl = bincl_list = (struct header_file_location *)
848     xmmalloc (objfile -> md, bincls_allocated * sizeof(struct header_file_location));
849 }
850
851 /* Add a bincl to the list.  */
852
853 static void
854 add_bincl_to_list (pst, name, instance)
855      struct partial_symtab *pst;
856      char *name;
857      int instance;
858 {
859   if (next_bincl >= bincl_list + bincls_allocated)
860     {
861       int offset = next_bincl - bincl_list;
862       bincls_allocated *= 2;
863       bincl_list = (struct header_file_location *)
864         xmrealloc (pst->objfile->md, (char *)bincl_list,
865                   bincls_allocated * sizeof (struct header_file_location));
866       next_bincl = bincl_list + offset;
867     }
868   next_bincl->pst = pst;
869   next_bincl->instance = instance;
870   next_bincl++->name = name;
871 }
872
873 /* Given a name, value pair, find the corresponding
874    bincl in the list.  Return the partial symtab associated
875    with that header_file_location.  */
876
877 static struct partial_symtab *
878 find_corresponding_bincl_psymtab (name, instance)
879      char *name;
880      int instance;
881 {
882   struct header_file_location *bincl;
883
884   for (bincl = bincl_list; bincl < next_bincl; bincl++)
885     if (bincl->instance == instance
886         && STREQ (name, bincl->name))
887       return bincl->pst;
888
889   complain (&repeated_header_complaint, name, symnum);
890   return (struct partial_symtab *) 0;
891 }
892
893 /* Free the storage allocated for the bincl list.  */
894
895 static void
896 free_bincl_list (objfile)
897      struct objfile *objfile;
898 {
899   mfree (objfile -> md, (PTR)bincl_list);
900   bincls_allocated = 0;
901 }
902
903 /* Scan a SunOs dynamic symbol table for symbols of interest and
904    add them to the minimal symbol table.  */
905
906 static void
907 read_dbx_dynamic_symtab (section_offsets, objfile)
908      struct section_offsets *section_offsets;
909      struct objfile *objfile;
910 {
911   bfd *abfd = objfile->obfd;
912   struct cleanup *back_to;
913   int counter;
914   long dynsym_size;
915   long dynsym_count;
916   asymbol **dynsyms;
917   asymbol **symptr;
918   arelent **relptr;
919   long dynrel_size;
920   long dynrel_count;
921   arelent **dynrels;
922   CORE_ADDR sym_value;
923   char *name;
924
925   /* Check that the symbol file has dynamic symbols that we know about.
926      bfd_arch_unknown can happen if we are reading a sun3 symbol file
927      on a sun4 host (and vice versa) and bfd is not configured
928      --with-target=all.  This would trigger an assertion in bfd/sunos.c,
929      so we ignore the dynamic symbols in this case.  */
930   if (bfd_get_flavour (abfd) != bfd_target_aout_flavour
931       || (bfd_get_file_flags (abfd) & DYNAMIC) == 0
932       || bfd_get_arch (abfd) == bfd_arch_unknown)
933     return;
934
935   dynsym_size = bfd_get_dynamic_symtab_upper_bound (abfd);
936   if (dynsym_size < 0)
937     return;
938
939   dynsyms = (asymbol **) xmalloc (dynsym_size);
940   back_to = make_cleanup (free, dynsyms);
941
942   dynsym_count = bfd_canonicalize_dynamic_symtab (abfd, dynsyms);
943   if (dynsym_count < 0)
944     {
945       do_cleanups (back_to);
946       return;
947     }
948
949   /* Enter dynamic symbols into the minimal symbol table
950      if this is a stripped executable.  */
951   if (bfd_get_symcount (abfd) <= 0)
952     {
953       symptr = dynsyms;
954       for (counter = 0; counter < dynsym_count; counter++, symptr++)
955         {
956           asymbol *sym = *symptr;
957           asection *sec;
958           int type;
959
960           sec = bfd_get_section (sym);
961
962           /* BFD symbols are section relative.  */
963           sym_value = sym->value + sec->vma;
964
965           if (bfd_get_section_flags (abfd, sec) & SEC_CODE)
966             {
967               sym_value += ANOFFSET (section_offsets, SECT_OFF_TEXT);
968               type = N_TEXT;
969             }
970           else if (bfd_get_section_flags (abfd, sec) & SEC_DATA)
971             {
972               sym_value += ANOFFSET (section_offsets, SECT_OFF_DATA);
973               type = N_DATA;
974             }
975           else if (bfd_get_section_flags (abfd, sec) & SEC_ALLOC)
976             {
977               sym_value += ANOFFSET (section_offsets, SECT_OFF_BSS);
978               type = N_BSS;
979             }
980           else
981             continue;
982
983           if (sym->flags & BSF_GLOBAL)
984             type |= N_EXT;
985
986           record_minimal_symbol ((char *) bfd_asymbol_name (sym), sym_value,
987                                  type, objfile);
988         }
989     }
990
991   /* Symbols from shared libraries have a dynamic relocation entry
992      that points to the associated slot in the procedure linkage table.
993      We make a mininal symbol table entry with type mst_solib_trampoline
994      at the address in the procedure linkage table.  */
995   dynrel_size = bfd_get_dynamic_reloc_upper_bound (abfd);
996   if (dynrel_size < 0)
997     {
998       do_cleanups (back_to);
999       return;
1000     }
1001   
1002   dynrels = (arelent **) xmalloc (dynrel_size);
1003   make_cleanup (free, dynrels);
1004
1005   dynrel_count = bfd_canonicalize_dynamic_reloc (abfd, dynrels, dynsyms);
1006   if (dynrel_count < 0)
1007     {
1008       do_cleanups (back_to);
1009       return;
1010     }
1011
1012   for (counter = 0, relptr = dynrels;
1013        counter < dynrel_count;
1014        counter++, relptr++)
1015     {
1016       arelent *rel = *relptr;
1017       CORE_ADDR address =
1018         rel->address + ANOFFSET (section_offsets, SECT_OFF_DATA);
1019
1020       switch (bfd_get_arch (abfd))
1021         {
1022         case bfd_arch_sparc:
1023           if (rel->howto->type != RELOC_JMP_SLOT)
1024             continue;
1025           break;
1026         case bfd_arch_m68k:
1027           /* `16' is the type BFD produces for a jump table relocation.  */
1028           if (rel->howto->type != 16)
1029             continue;
1030
1031           /* Adjust address in the jump table to point to
1032              the start of the bsr instruction.  */
1033           address -= 2;
1034           break;
1035         default:
1036           continue;
1037         }
1038
1039       name = (char *) bfd_asymbol_name (*rel->sym_ptr_ptr);
1040       prim_record_minimal_symbol
1041         (obsavestring (name, strlen (name), &objfile -> symbol_obstack),
1042          address,
1043          mst_solib_trampoline,
1044          objfile);
1045     }
1046
1047   do_cleanups (back_to);
1048 }
1049
1050 /* Given pointers to an a.out symbol table in core containing dbx
1051    style data, setup partial_symtab's describing each source file for
1052    which debugging information is available.
1053    SYMFILE_NAME is the name of the file we are reading from
1054    and SECTION_OFFSETS is the set of offsets for the various sections
1055    of the file (a set of zeros if the mainline program).  */
1056
1057 static void
1058 read_dbx_symtab (section_offsets, objfile, text_addr, text_size)
1059      struct section_offsets *section_offsets;
1060      struct objfile *objfile;
1061      CORE_ADDR text_addr;
1062      int text_size;
1063 {
1064   register struct internal_nlist *bufp = 0;     /* =0 avoids gcc -Wall glitch */
1065   register char *namestring;
1066   int nsl;
1067   int past_first_source_file = 0;
1068   CORE_ADDR last_o_file_start = 0;
1069   struct cleanup *back_to;
1070   bfd *abfd;
1071
1072   /* Current partial symtab */
1073   struct partial_symtab *pst;
1074
1075   /* List of current psymtab's include files */
1076   char **psymtab_include_list;
1077   int includes_allocated;
1078   int includes_used;
1079
1080   /* Index within current psymtab dependency list */
1081   struct partial_symtab **dependency_list;
1082   int dependencies_used, dependencies_allocated;
1083
1084   /* FIXME.  We probably want to change stringtab_global rather than add this
1085      while processing every symbol entry.  FIXME.  */
1086   file_string_table_offset = 0;
1087   next_file_string_table_offset = 0;
1088
1089   stringtab_global = DBX_STRINGTAB (objfile);
1090   
1091   pst = (struct partial_symtab *) 0;
1092
1093   includes_allocated = 30;
1094   includes_used = 0;
1095   psymtab_include_list = (char **) alloca (includes_allocated *
1096                                            sizeof (char *));
1097
1098   dependencies_allocated = 30;
1099   dependencies_used = 0;
1100   dependency_list =
1101     (struct partial_symtab **) alloca (dependencies_allocated *
1102                                        sizeof (struct partial_symtab *));
1103
1104   /* Init bincl list */
1105   init_bincl_list (20, objfile);
1106   back_to = make_cleanup (free_bincl_list, objfile);
1107
1108   last_source_file = NULL;
1109
1110   lowest_text_address = (CORE_ADDR)-1;
1111
1112   symfile_bfd = objfile->obfd;  /* For next_text_symbol */
1113   abfd = objfile->obfd;
1114   symbuf_end = symbuf_idx = 0;
1115   next_symbol_text_func = dbx_next_symbol_text;
1116
1117   for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++)
1118     {
1119       /* Get the symbol for this run and pull out some info */
1120       QUIT;     /* allow this to be interruptable */
1121       if (symbuf_idx == symbuf_end)
1122         fill_symbuf (abfd);
1123       bufp = &symbuf[symbuf_idx++];
1124
1125       /*
1126        * Special case to speed up readin.
1127        */
1128       if (bufp->n_type == (unsigned char)N_SLINE) continue;
1129
1130       SWAP_SYMBOL (bufp, abfd);
1131
1132       /* Ok.  There is a lot of code duplicated in the rest of this
1133          switch statement (for efficiency reasons).  Since I don't
1134          like duplicating code, I will do my penance here, and
1135          describe the code which is duplicated:
1136
1137          *) The assignment to namestring.
1138          *) The call to strchr.
1139          *) The addition of a partial symbol the the two partial
1140             symbol lists.  This last is a large section of code, so
1141             I've imbedded it in the following macro.
1142          */
1143       
1144 /* Set namestring based on bufp.  If the string table index is invalid, 
1145    give a fake name, and print a single error message per symbol file read,
1146    rather than abort the symbol reading or flood the user with messages.  */
1147
1148 /*FIXME: Too many adds and indirections in here for the inner loop.  */
1149 #define SET_NAMESTRING()\
1150   if (((unsigned)bufp->n_strx + file_string_table_offset) >=            \
1151       DBX_STRINGTAB_SIZE (objfile)) {                                   \
1152     complain (&string_table_offset_complaint, symnum);                  \
1153     namestring = "<bad string table offset>";                           \
1154   } else                                                                \
1155     namestring = bufp->n_strx + file_string_table_offset +              \
1156                  DBX_STRINGTAB (objfile)
1157
1158 #define CUR_SYMBOL_TYPE bufp->n_type
1159 #define CUR_SYMBOL_VALUE bufp->n_value
1160 #define DBXREAD_ONLY
1161 #define START_PSYMTAB(ofile,secoff,fname,low,symoff,global_syms,static_syms)\
1162   start_psymtab(ofile, secoff, fname, low, symoff, global_syms, static_syms)
1163 #define END_PSYMTAB(pst,ilist,ninc,c_off,c_text,dep_list,n_deps)\
1164   end_psymtab(pst,ilist,ninc,c_off,c_text,dep_list,n_deps)
1165
1166 #include "partial-stab.h"
1167     }
1168
1169   /* If there's stuff to be cleaned up, clean it up.  */
1170   if (DBX_SYMCOUNT (objfile) > 0                        /* We have some syms */
1171 /*FIXME, does this have a bug at start address 0? */
1172       && last_o_file_start
1173       && objfile -> ei.entry_point < bufp->n_value
1174       && objfile -> ei.entry_point >= last_o_file_start)
1175     {
1176       objfile -> ei.entry_file_lowpc = last_o_file_start;
1177       objfile -> ei.entry_file_highpc = bufp->n_value;
1178     }
1179
1180   if (pst)
1181     {
1182       end_psymtab (pst, psymtab_include_list, includes_used,
1183                    symnum * symbol_size,
1184                    (lowest_text_address == (CORE_ADDR)-1
1185                     ? (text_addr + section_offsets->offsets[SECT_OFF_TEXT])
1186                     : lowest_text_address)
1187                    + text_size,
1188                    dependency_list, dependencies_used);
1189     }
1190
1191   do_cleanups (back_to);
1192 }
1193
1194 /* Allocate and partially fill a partial symtab.  It will be
1195    completely filled at the end of the symbol list.
1196
1197    SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
1198    is the address relative to which its symbols are (incremental) or 0
1199    (normal). */
1200
1201
1202 struct partial_symtab *
1203 start_psymtab (objfile, section_offsets,
1204                filename, textlow, ldsymoff, global_syms, static_syms)
1205      struct objfile *objfile;
1206      struct section_offsets *section_offsets;
1207      char *filename;
1208      CORE_ADDR textlow;
1209      int ldsymoff;
1210      struct partial_symbol *global_syms;
1211      struct partial_symbol *static_syms;
1212 {
1213   struct partial_symtab *result =
1214       start_psymtab_common(objfile, section_offsets,
1215                            filename, textlow, global_syms, static_syms);
1216
1217   result->read_symtab_private = (char *)
1218     obstack_alloc (&objfile -> psymbol_obstack, sizeof (struct symloc));
1219   LDSYMOFF(result) = ldsymoff;
1220   result->read_symtab = dbx_psymtab_to_symtab;
1221   SYMBOL_SIZE(result) = symbol_size;
1222   SYMBOL_OFFSET(result) = symbol_table_offset;
1223   STRING_OFFSET(result) = string_table_offset;
1224   FILE_STRING_OFFSET(result) = file_string_table_offset;
1225
1226   /* If we're handling an ELF file, drag some section-relocation info
1227      for this source file out of the ELF symbol table, to compensate for
1228      Sun brain death.  This replaces the section_offsets in this psymtab,
1229      if successful.  */
1230   elfstab_offset_sections (objfile, result);
1231
1232   /* Deduce the source language from the filename for this psymtab. */
1233   psymtab_language = deduce_language_from_filename (filename);
1234
1235   return result;
1236 }
1237
1238 /* Close off the current usage of PST.  
1239    Returns PST or NULL if the partial symtab was empty and thrown away.
1240
1241    FIXME:  List variables and peculiarities of same.  */
1242
1243 struct partial_symtab *
1244 end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
1245              capping_text, dependency_list, number_dependencies)
1246      struct partial_symtab *pst;
1247      char **include_list;
1248      int num_includes;
1249      int capping_symbol_offset;
1250      CORE_ADDR capping_text;
1251      struct partial_symtab **dependency_list;
1252      int number_dependencies;
1253 {
1254   int i;
1255   struct objfile *objfile = pst -> objfile;
1256
1257   if (capping_symbol_offset != -1)
1258       LDSYMLEN(pst) = capping_symbol_offset - LDSYMOFF(pst);
1259   pst->texthigh = capping_text;
1260
1261 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
1262   /* Under Solaris, the N_SO symbols always have a value of 0,
1263      instead of the usual address of the .o file.  Therefore,
1264      we have to do some tricks to fill in texthigh and textlow.
1265      The first trick is in partial-stab.h: if we see a static
1266      or global function, and the textlow for the current pst
1267      is still 0, then we use that function's address for 
1268      the textlow of the pst.  */
1269
1270   /* Now, to fill in texthigh, we remember the last function seen
1271      in the .o file (also in partial-stab.h).  Also, there's a hack in
1272      bfd/elf.c and gdb/elfread.c to pass the ELF st_size field
1273      to here via the misc_info field.  Therefore, we can fill in
1274      a reliable texthigh by taking the address plus size of the
1275      last function in the file.  */
1276
1277   if (pst->texthigh == 0 && last_function_name) {
1278     char *p;
1279     int n;
1280     struct minimal_symbol *minsym;
1281
1282     p = strchr (last_function_name, ':');
1283     if (p == NULL)
1284       p = last_function_name;
1285     n = p - last_function_name;
1286     p = alloca (n + 1);
1287     strncpy (p, last_function_name, n);
1288     p[n] = 0;
1289     
1290     minsym = lookup_minimal_symbol (p, pst->filename, objfile);
1291
1292     if (minsym)
1293       pst->texthigh = SYMBOL_VALUE_ADDRESS (minsym) +
1294         (long) MSYMBOL_INFO (minsym);
1295
1296     last_function_name = NULL;
1297   }
1298
1299   /* this test will be true if the last .o file is only data */
1300   if (pst->textlow == 0)
1301     /* This loses if the text section really starts at address zero
1302        (generally true when we are debugging a .o file, for example).
1303        That is why this whole thing is inside SOFUN_ADDRESS_MAYBE_MISSING.  */
1304     pst->textlow = pst->texthigh;
1305
1306   /* If we know our own starting text address, then walk through all other
1307      psymtabs for this objfile, and if any didn't know their ending text
1308      address, set it to our starting address.  Take care to not set our
1309      own ending address to our starting address, nor to set addresses on
1310      `dependency' files that have both textlow and texthigh zero.  */
1311   if (pst->textlow) {
1312     struct partial_symtab *p1;
1313
1314     ALL_OBJFILE_PSYMTABS (objfile, p1) {
1315       if (p1->texthigh == 0  && p1->textlow != 0 && p1 != pst) {
1316         p1->texthigh = pst->textlow;
1317         /* if this file has only data, then make textlow match texthigh */
1318         if (p1->textlow == 0)
1319           p1->textlow = p1->texthigh;
1320       }
1321     }
1322   }
1323
1324   /* End of kludge for patching Solaris textlow and texthigh.  */
1325 #endif /* SOFUN_ADDRESS_MAYBE_MISSING.  */
1326
1327   pst->n_global_syms =
1328     objfile->global_psymbols.next - (objfile->global_psymbols.list + pst->globals_offset);
1329   pst->n_static_syms =
1330     objfile->static_psymbols.next - (objfile->static_psymbols.list + pst->statics_offset);
1331
1332   pst->number_of_dependencies = number_dependencies;
1333   if (number_dependencies)
1334     {
1335       pst->dependencies = (struct partial_symtab **)
1336         obstack_alloc (&objfile->psymbol_obstack,
1337                        number_dependencies * sizeof (struct partial_symtab *));
1338       memcpy (pst->dependencies, dependency_list,
1339              number_dependencies * sizeof (struct partial_symtab *));
1340     }
1341   else
1342     pst->dependencies = 0;
1343
1344   for (i = 0; i < num_includes; i++)
1345     {
1346       struct partial_symtab *subpst =
1347         allocate_psymtab (include_list[i], objfile);
1348
1349       subpst->section_offsets = pst->section_offsets;
1350       subpst->read_symtab_private =
1351           (char *) obstack_alloc (&objfile->psymbol_obstack,
1352                                   sizeof (struct symloc));
1353       LDSYMOFF(subpst) =
1354         LDSYMLEN(subpst) =
1355           subpst->textlow =
1356             subpst->texthigh = 0;
1357
1358       /* We could save slight bits of space by only making one of these,
1359          shared by the entire set of include files.  FIXME-someday.  */
1360       subpst->dependencies = (struct partial_symtab **)
1361         obstack_alloc (&objfile->psymbol_obstack,
1362                        sizeof (struct partial_symtab *));
1363       subpst->dependencies[0] = pst;
1364       subpst->number_of_dependencies = 1;
1365
1366       subpst->globals_offset =
1367         subpst->n_global_syms =
1368           subpst->statics_offset =
1369             subpst->n_static_syms = 0;
1370
1371       subpst->readin = 0;
1372       subpst->symtab = 0;
1373       subpst->read_symtab = pst->read_symtab;
1374     }
1375
1376   sort_pst_symbols (pst);
1377
1378   /* If there is already a psymtab or symtab for a file of this name, remove it.
1379      (If there is a symtab, more drastic things also happen.)
1380      This happens in VxWorks.  */
1381   free_named_symtabs (pst->filename);
1382
1383   if (num_includes == 0
1384       && number_dependencies == 0
1385       && pst->n_global_syms == 0
1386       && pst->n_static_syms == 0)
1387     {
1388       /* Throw away this psymtab, it's empty.  We can't deallocate it, since
1389          it is on the obstack, but we can forget to chain it on the list.  */
1390       /* Empty psymtabs happen as a result of header files which don't have
1391          any symbols in them.  There can be a lot of them.  But this check
1392          is wrong, in that a psymtab with N_SLINE entries but nothing else
1393          is not empty, but we don't realize that.  Fixing that without slowing
1394          things down might be tricky.  */
1395       struct partial_symtab *prev_pst;
1396
1397       /* First, snip it out of the psymtab chain */
1398
1399       if (pst->objfile->psymtabs == pst)
1400         pst->objfile->psymtabs = pst->next;
1401       else
1402         for (prev_pst = pst->objfile->psymtabs; prev_pst; prev_pst = pst->next)
1403           if (prev_pst->next == pst)
1404             prev_pst->next = pst->next;
1405
1406       /* Next, put it on a free list for recycling */
1407
1408       pst->next = pst->objfile->free_psymtabs;
1409       pst->objfile->free_psymtabs = pst;
1410
1411       /* Indicate that psymtab was thrown away.  */
1412       pst = (struct partial_symtab *)NULL;
1413     }
1414   return pst;
1415 }
1416 \f
1417 static void
1418 dbx_psymtab_to_symtab_1 (pst)
1419      struct partial_symtab *pst;
1420 {
1421   struct cleanup *old_chain;
1422   int i;
1423   
1424   if (!pst)
1425     return;
1426
1427   if (pst->readin)
1428     {
1429       fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in.  Shouldn't happen.\n",
1430                pst->filename);
1431       return;
1432     }
1433
1434   /* Read in all partial symtabs on which this one is dependent */
1435   for (i = 0; i < pst->number_of_dependencies; i++)
1436     if (!pst->dependencies[i]->readin)
1437       {
1438         /* Inform about additional files that need to be read in.  */
1439         if (info_verbose)
1440           {
1441             fputs_filtered (" ", gdb_stdout);
1442             wrap_here ("");
1443             fputs_filtered ("and ", gdb_stdout);
1444             wrap_here ("");
1445             printf_filtered ("%s...", pst->dependencies[i]->filename);
1446             wrap_here ("");             /* Flush output */
1447             gdb_flush (gdb_stdout);
1448           }
1449         dbx_psymtab_to_symtab_1 (pst->dependencies[i]);
1450       }
1451
1452   if (LDSYMLEN(pst))            /* Otherwise it's a dummy */
1453     {
1454       /* Init stuff necessary for reading in symbols */
1455       stabsread_init ();
1456       buildsym_init ();
1457       old_chain = make_cleanup (really_free_pendings, 0);
1458       file_string_table_offset = FILE_STRING_OFFSET (pst);
1459       symbol_size = SYMBOL_SIZE (pst);
1460
1461       /* Read in this file's symbols */
1462       bfd_seek (pst->objfile->obfd, SYMBOL_OFFSET (pst), SEEK_SET);
1463       read_ofile_symtab (pst);
1464       sort_symtab_syms (pst->symtab);
1465
1466       do_cleanups (old_chain);
1467     }
1468
1469   pst->readin = 1;
1470 }
1471
1472 /* Read in all of the symbols for a given psymtab for real.
1473    Be verbose about it if the user wants that.  */
1474
1475 static void
1476 dbx_psymtab_to_symtab (pst)
1477      struct partial_symtab *pst;
1478 {
1479   bfd *sym_bfd;
1480
1481   if (!pst)
1482     return;
1483
1484   if (pst->readin)
1485     {
1486       fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in.  Shouldn't happen.\n",
1487                pst->filename);
1488       return;
1489     }
1490
1491   if (LDSYMLEN(pst) || pst->number_of_dependencies)
1492     {
1493       /* Print the message now, before reading the string table,
1494          to avoid disconcerting pauses.  */
1495       if (info_verbose)
1496         {
1497           printf_filtered ("Reading in symbols for %s...", pst->filename);
1498           gdb_flush (gdb_stdout);
1499         }
1500
1501       sym_bfd = pst->objfile->obfd;
1502
1503       next_symbol_text_func = dbx_next_symbol_text;
1504
1505       dbx_psymtab_to_symtab_1 (pst);
1506
1507       /* Match with global symbols.  This only needs to be done once,
1508          after all of the symtabs and dependencies have been read in.   */
1509       scan_file_globals (pst->objfile);
1510
1511       /* Finish up the debug error message.  */
1512       if (info_verbose)
1513         printf_filtered ("done.\n");
1514     }
1515 }
1516
1517 /* Read in a defined section of a specific object file's symbols. */
1518   
1519 static void
1520 read_ofile_symtab (pst)
1521      struct partial_symtab *pst;
1522 {
1523   register char *namestring;
1524   register struct internal_nlist *bufp;
1525   unsigned char type;
1526   unsigned max_symnum;
1527   register bfd *abfd;
1528   struct objfile *objfile;
1529   int sym_offset;               /* Offset to start of symbols to read */
1530   int sym_size;                 /* Size of symbols to read */
1531   CORE_ADDR text_offset;        /* Start of text segment for symbols */
1532   int text_size;                /* Size of text segment for symbols */
1533   struct section_offsets *section_offsets;
1534
1535   objfile = pst->objfile;
1536   sym_offset = LDSYMOFF(pst);
1537   sym_size = LDSYMLEN(pst);
1538   text_offset = pst->textlow;
1539   text_size = pst->texthigh - pst->textlow;
1540   section_offsets = pst->section_offsets;
1541
1542   current_objfile = objfile;
1543   subfile_stack = NULL;
1544
1545   stringtab_global = DBX_STRINGTAB (objfile);
1546   last_source_file = NULL;
1547
1548   abfd = objfile->obfd;
1549   symfile_bfd = objfile->obfd;  /* Implicit param to next_text_symbol */
1550   symbuf_end = symbuf_idx = 0;
1551
1552   /* It is necessary to actually read one symbol *before* the start
1553      of this symtab's symbols, because the GCC_COMPILED_FLAG_SYMBOL
1554      occurs before the N_SO symbol.
1555
1556      Detecting this in read_dbx_symtab
1557      would slow down initial readin, so we look for it here instead.  */
1558   if (!processing_acc_compilation && sym_offset >= (int)symbol_size)
1559     {
1560       bfd_seek (symfile_bfd, sym_offset - symbol_size, SEEK_CUR);
1561       fill_symbuf (abfd);
1562       bufp = &symbuf[symbuf_idx++];
1563       SWAP_SYMBOL (bufp, abfd);
1564
1565       SET_NAMESTRING ();
1566
1567       processing_gcc_compilation = 0;
1568       if (bufp->n_type == N_TEXT)
1569         {
1570           const char *tempstring = namestring;
1571
1572           if (STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
1573             processing_gcc_compilation = 1;
1574           else if (STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
1575             processing_gcc_compilation = 2;
1576           if (tempstring[0] == bfd_get_symbol_leading_char (symfile_bfd))
1577             ++tempstring;
1578           if (STREQN (tempstring, "__gnu_compiled", 14))
1579             processing_gcc_compilation = 2;
1580         }
1581
1582       /* Try to select a C++ demangling based on the compilation unit
1583          producer. */
1584
1585       if (processing_gcc_compilation)
1586         {
1587           if (AUTO_DEMANGLING)
1588             {
1589               set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1590             }
1591         }
1592     }
1593   else
1594     {
1595       /* The N_SO starting this symtab is the first symbol, so we
1596          better not check the symbol before it.  I'm not this can
1597          happen, but it doesn't hurt to check for it.  */
1598       bfd_seek (symfile_bfd, sym_offset, SEEK_CUR);
1599       processing_gcc_compilation = 0;
1600     }
1601
1602   if (symbuf_idx == symbuf_end)
1603     fill_symbuf (abfd);
1604   bufp = &symbuf[symbuf_idx];
1605   if (bufp->n_type != (unsigned char)N_SO)
1606     error("First symbol in segment of executable not a source symbol");
1607
1608   max_symnum = sym_size / symbol_size;
1609
1610   for (symnum = 0;
1611        symnum < max_symnum;
1612        symnum++)
1613     {
1614       QUIT;                     /* Allow this to be interruptable */
1615       if (symbuf_idx == symbuf_end)
1616         fill_symbuf(abfd);
1617       bufp = &symbuf[symbuf_idx++];
1618       SWAP_SYMBOL (bufp, abfd);
1619
1620       type = bufp->n_type;
1621
1622       SET_NAMESTRING ();
1623
1624       if (type & N_STAB) {
1625           process_one_symbol (type, bufp->n_desc, bufp->n_value,
1626                               namestring, section_offsets, objfile);
1627       }
1628       /* We skip checking for a new .o or -l file; that should never
1629          happen in this routine. */
1630       else if (type == N_TEXT)
1631         {
1632           /* I don't think this code will ever be executed, because
1633              the GCC_COMPILED_FLAG_SYMBOL usually is right before
1634              the N_SO symbol which starts this source file.
1635              However, there is no reason not to accept
1636              the GCC_COMPILED_FLAG_SYMBOL anywhere.  */
1637
1638           if (STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
1639             processing_gcc_compilation = 1;
1640           else if (STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
1641             processing_gcc_compilation = 2;
1642
1643           if (AUTO_DEMANGLING)
1644             {
1645               set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1646             }
1647         }
1648       else if (type & N_EXT || type == (unsigned char)N_TEXT
1649                || type == (unsigned char)N_NBTEXT
1650                ) {
1651           /* Global symbol: see if we came across a dbx defintion for
1652              a corresponding symbol.  If so, store the value.  Remove
1653              syms from the chain when their values are stored, but
1654              search the whole chain, as there may be several syms from
1655              different files with the same name. */
1656           /* This is probably not true.  Since the files will be read
1657              in one at a time, each reference to a global symbol will
1658              be satisfied in each file as it appears. So we skip this
1659              section. */
1660           ;
1661         }
1662     }
1663
1664   current_objfile = NULL;
1665
1666   /* In a Solaris elf file, this variable, which comes from the
1667      value of the N_SO symbol, will still be 0.  Luckily, text_offset,
1668      which comes from pst->textlow is correct. */
1669   if (last_source_start_addr == 0)
1670     last_source_start_addr = text_offset;
1671
1672   pst->symtab = end_symtab (text_offset + text_size, 0, 0, objfile,
1673                             SECT_OFF_TEXT);
1674   end_stabs ();
1675 }
1676
1677 \f
1678 /* This handles a single symbol from the symbol-file, building symbols
1679    into a GDB symtab.  It takes these arguments and an implicit argument.
1680
1681    TYPE is the type field of the ".stab" symbol entry.
1682    DESC is the desc field of the ".stab" entry.
1683    VALU is the value field of the ".stab" entry.
1684    NAME is the symbol name, in our address space.
1685    SECTION_OFFSETS is a set of amounts by which the sections of this object
1686           file were relocated when it was loaded into memory.
1687           All symbols that refer
1688           to memory locations need to be offset by these amounts.
1689    OBJFILE is the object file from which we are reading symbols.
1690                It is used in end_symtab.  */
1691
1692 void
1693 process_one_symbol (type, desc, valu, name, section_offsets, objfile)
1694      int type, desc;
1695      CORE_ADDR valu;
1696      char *name;
1697      struct section_offsets *section_offsets;
1698      struct objfile *objfile;
1699 {
1700 #ifdef SUN_FIXED_LBRAC_BUG
1701   /* If SUN_FIXED_LBRAC_BUG is defined, then it tells us whether we need
1702      to correct the address of N_LBRAC's.  If it is not defined, then
1703      we never need to correct the addresses.  */
1704
1705   /* This records the last pc address we've seen.  We depend on there being
1706      an SLINE or FUN or SO before the first LBRAC, since the variable does
1707      not get reset in between reads of different symbol files.  */
1708   static CORE_ADDR last_pc_address;
1709 #endif
1710
1711   register struct context_stack *new;
1712   /* This remembers the address of the start of a function.  It is used
1713      because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries are
1714      relative to the current function's start address.  On systems
1715      other than Solaris 2, this just holds the SECT_OFF_TEXT value, and is
1716      used to relocate these symbol types rather than SECTION_OFFSETS.  */
1717   static CORE_ADDR function_start_offset;
1718
1719   /* If this is nonzero, we've seen a non-gcc N_OPT symbol for this source
1720      file.  Used to detect the SunPRO solaris compiler.  */
1721   static int n_opt_found;
1722
1723   /* The stab type used for the definition of the last function.
1724      N_STSYM or N_GSYM for SunOS4 acc; N_FUN for other compilers.  */
1725   static int function_stab_type = 0;
1726
1727   if (!block_address_function_relative)
1728     /* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
1729        function start address, so just use the text offset.  */
1730     function_start_offset = ANOFFSET (section_offsets, SECT_OFF_TEXT);
1731
1732   /* Something is wrong if we see real data before
1733      seeing a source file name.  */
1734
1735   if (last_source_file == NULL && type != (unsigned char)N_SO)
1736     {
1737       /* Ignore any symbols which appear before an N_SO symbol.  Currently
1738          no one puts symbols there, but we should deal gracefully with the
1739          case.  A complain()t might be in order (if !IGNORE_SYMBOL (type)),
1740          but this should not be an error ().  */
1741       return;
1742     }
1743
1744   switch (type)
1745     {
1746     case N_FUN:
1747     case N_FNAME:
1748       /* Relocate for dynamic loading */
1749       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1750       goto define_a_symbol;
1751
1752     case N_LBRAC:
1753       /* This "symbol" just indicates the start of an inner lexical
1754          context within a function.  */
1755
1756       /* Ignore extra outermost context from SunPRO cc and acc.  */
1757       if (n_opt_found && desc == 1)
1758         break;
1759
1760 #if defined(BLOCK_ADDRESS_ABSOLUTE)
1761       /* Relocate for dynamic loading (?).  */
1762       valu += function_start_offset;
1763 #else
1764       if (block_address_function_relative)
1765         /* Relocate for Sun ELF acc fn-relative syms.  */
1766         valu += function_start_offset;
1767       else
1768         /* On most machines, the block addresses are relative to the
1769            N_SO, the linker did not relocate them (sigh).  */
1770         valu += last_source_start_addr;
1771 #endif
1772
1773 #ifdef SUN_FIXED_LBRAC_BUG
1774       if (!SUN_FIXED_LBRAC_BUG && valu < last_pc_address) {
1775         /* Patch current LBRAC pc value to match last handy pc value */
1776         complain (&lbrac_complaint);
1777         valu = last_pc_address;
1778       }
1779 #endif
1780       new = push_context (desc, valu);
1781       break;
1782
1783     case N_RBRAC:
1784       /* This "symbol" just indicates the end of an inner lexical
1785          context that was started with N_LBRAC.  */
1786
1787       /* Ignore extra outermost context from SunPRO cc and acc.  */
1788       if (n_opt_found && desc == 1)
1789         break;
1790
1791 #if defined(BLOCK_ADDRESS_ABSOLUTE)
1792       /* Relocate for dynamic loading (?).  */
1793       valu += function_start_offset;
1794 #else
1795       if (block_address_function_relative)
1796         /* Relocate for Sun ELF acc fn-relative syms.  */
1797         valu += function_start_offset;
1798       else
1799         /* On most machines, the block addresses are relative to the
1800            N_SO, the linker did not relocate them (sigh).  */
1801         valu += last_source_start_addr;
1802 #endif
1803
1804       new = pop_context();
1805       if (desc != new->depth)
1806         complain (&lbrac_mismatch_complaint, symnum);
1807
1808       /* Some compilers put the variable decls inside of an
1809          LBRAC/RBRAC block.  This macro should be nonzero if this
1810          is true.  DESC is N_DESC from the N_RBRAC symbol.
1811          GCC_P is true if we've detected the GCC_COMPILED_SYMBOL
1812          or the GCC2_COMPILED_SYMBOL.  */
1813 #if !defined (VARIABLES_INSIDE_BLOCK)
1814 #define VARIABLES_INSIDE_BLOCK(desc, gcc_p) 0
1815 #endif
1816
1817       /* Can only use new->locals as local symbols here if we're in
1818          gcc or on a machine that puts them before the lbrack.  */
1819       if (!VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1820         local_symbols = new->locals;
1821
1822       if (context_stack_depth
1823           > !VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1824         {
1825           /* This is not the outermost LBRAC...RBRAC pair in the function,
1826              its local symbols preceded it, and are the ones just recovered
1827              from the context stack.  Define the block for them (but don't
1828              bother if the block contains no symbols.  Should we complain
1829              on blocks without symbols?  I can't think of any useful purpose
1830              for them).  */
1831           if (local_symbols != NULL)
1832             {
1833               /* Muzzle a compiler bug that makes end < start.  (which
1834                  compilers?  Is this ever harmful?).  */
1835               if (new->start_addr > valu)
1836                 {
1837                   complain (&lbrac_rbrac_complaint);
1838                   new->start_addr = valu;
1839                 }
1840               /* Make a block for the local symbols within.  */
1841               finish_block (0, &local_symbols, new->old_blocks,
1842                             new->start_addr, valu, objfile);
1843             }
1844         }
1845       else
1846         {
1847           /* This is the outermost LBRAC...RBRAC pair.  There is no
1848              need to do anything; leave the symbols that preceded it
1849              to be attached to the function's own block.  We need to
1850              indicate that we just moved outside of the function.  */
1851           within_function = 0;
1852         }
1853
1854       if (VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1855         /* Now pop locals of block just finished.  */
1856         local_symbols = new->locals;
1857       break;
1858
1859     case N_FN:
1860     case N_FN_SEQ:
1861       /* This kind of symbol indicates the start of an object file.  */
1862       /* Relocate for dynamic loading */
1863       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1864       break;
1865
1866     case N_SO:
1867       /* This type of symbol indicates the start of data
1868          for one source file.
1869          Finish the symbol table of the previous source file
1870          (if any) and start accumulating a new symbol table.  */
1871       /* Relocate for dynamic loading */
1872       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1873
1874       n_opt_found = 0;
1875
1876 #ifdef SUN_FIXED_LBRAC_BUG
1877       last_pc_address = valu;   /* Save for SunOS bug circumcision */
1878 #endif
1879
1880 #ifdef PCC_SOL_BROKEN
1881       /* pcc bug, occasionally puts out SO for SOL.  */
1882       if (context_stack_depth > 0)
1883         {
1884           start_subfile (name, NULL);
1885           break;
1886         }
1887 #endif
1888       if (last_source_file)
1889         {
1890           /* Check if previous symbol was also an N_SO (with some
1891              sanity checks).  If so, that one was actually the directory
1892              name, and the current one is the real file name.
1893              Patch things up. */           
1894           if (previous_stab_code == (unsigned char) N_SO)
1895             {
1896               patch_subfile_names (current_subfile, name);
1897               break;            /* Ignore repeated SOs */
1898             }
1899           end_symtab (valu, 0, 0, objfile, SECT_OFF_TEXT);
1900           end_stabs ();
1901         }
1902
1903       /* Null name means this just marks the end of text for this .o file.
1904          Don't start a new symtab in this case.  */
1905       if (*name == '\000')
1906         break;
1907
1908       start_stabs ();
1909       start_symtab (name, NULL, valu);
1910       break;
1911
1912     case N_SOL:
1913       /* This type of symbol indicates the start of data for
1914          a sub-source-file, one whose contents were copied or
1915          included in the compilation of the main source file
1916          (whose name was given in the N_SO symbol.)  */
1917       /* Relocate for dynamic loading */
1918       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1919       start_subfile (name, current_subfile->dirname);
1920       break;
1921
1922     case N_BINCL:
1923       push_subfile ();
1924       add_new_header_file (name, valu);
1925       start_subfile (name, current_subfile->dirname);
1926       break;
1927
1928     case N_EINCL:
1929       start_subfile (pop_subfile (), current_subfile->dirname);
1930       break;
1931
1932     case N_EXCL:
1933       add_old_header_file (name, valu);
1934       break;
1935
1936     case N_SLINE:
1937       /* This type of "symbol" really just records
1938          one line-number -- core-address correspondence.
1939          Enter it in the line list for this symbol table.  */
1940       /* Relocate for dynamic loading and for ELF acc fn-relative syms.  */
1941       valu += function_start_offset;
1942 #ifdef SUN_FIXED_LBRAC_BUG
1943       last_pc_address = valu;   /* Save for SunOS bug circumcision */
1944 #endif
1945       record_line (current_subfile, desc, valu);
1946       break;
1947
1948     case N_BCOMM:
1949       common_block_start (name, objfile);
1950       break;
1951
1952     case N_ECOMM:
1953       common_block_end (objfile);
1954       break;
1955
1956     /* The following symbol types need to have the appropriate offset added
1957        to their value; then we process symbol definitions in the name.  */
1958
1959     case N_STSYM:               /* Static symbol in data seg */
1960     case N_LCSYM:               /* Static symbol in BSS seg */
1961     case N_ROSYM:               /* Static symbol in Read-only data seg */
1962      /* HORRID HACK DEPT.  However, it's Sun's furgin' fault.
1963         Solaris2's stabs-in-elf makes *most* symbols relative
1964         but leaves a few absolute (at least for Solaris 2.1 and version
1965         2.0.1 of the SunPRO compiler).  N_STSYM and friends sit on the fence.
1966         .stab "foo:S...",N_STSYM        is absolute (ld relocates it)
1967         .stab "foo:V...",N_STSYM        is relative (section base subtracted).
1968         This leaves us no choice but to search for the 'S' or 'V'...
1969         (or pass the whole section_offsets stuff down ONE MORE function
1970         call level, which we really don't want to do).  */
1971       {
1972         char *p;
1973
1974         /* .o files and NLMs have non-zero text seg offsets, but don't need
1975            their static syms offset in this fashion.  XXX - This is really a
1976            crock that should be fixed in the solib handling code so that I
1977            don't have to work around it here. */
1978
1979         if (!symfile_relocatable)
1980           {
1981             p = strchr (name, ':');
1982             if (p != 0 && p[1] == 'S')
1983               {
1984                 /* The linker relocated it.  We don't want to add an
1985                    elfstab_offset_sections-type offset, but we *do* want
1986                    to add whatever solib.c passed to symbol_file_add as
1987                    addr (this is known to affect SunOS4, and I suspect ELF
1988                    too).  Since elfstab_offset_sections currently does not
1989                    muck with the text offset (there is no Ttext.text
1990                    symbol), we can get addr from the text offset.  If
1991                    elfstab_offset_sections ever starts dealing with the
1992                    text offset, and we still need to do this, we need to
1993                    invent a SECT_OFF_ADDR_KLUDGE or something.  */
1994                 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1995                 goto define_a_symbol;
1996               }
1997           }
1998         /* Since it's not the kludge case, re-dispatch to the right handler. */
1999         switch (type) {
2000         case N_STSYM:   goto case_N_STSYM;
2001         case N_LCSYM:   goto case_N_LCSYM;
2002         case N_ROSYM:   goto case_N_ROSYM;
2003         default:        abort();
2004         }
2005       }
2006
2007     case_N_STSYM:               /* Static symbol in data seg */
2008     case N_DSLINE:              /* Source line number, data seg */
2009       valu += ANOFFSET (section_offsets, SECT_OFF_DATA);
2010       goto define_a_symbol;
2011
2012     case_N_LCSYM:               /* Static symbol in BSS seg */
2013     case N_BSLINE:              /* Source line number, bss seg */
2014     /*   N_BROWS:       overlaps with N_BSLINE */
2015       valu += ANOFFSET (section_offsets, SECT_OFF_BSS);
2016       goto define_a_symbol;
2017
2018     case_N_ROSYM:               /* Static symbol in Read-only data seg */
2019       valu += ANOFFSET (section_offsets, SECT_OFF_RODATA);
2020       goto define_a_symbol;
2021
2022     case N_ENTRY:               /* Alternate entry point */
2023       /* Relocate for dynamic loading */
2024       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2025       goto define_a_symbol;
2026
2027     /* The following symbol types we don't know how to process.  Handle
2028        them in a "default" way, but complain to people who care.  */
2029     default:
2030     case N_CATCH:               /* Exception handler catcher */
2031     case N_EHDECL:              /* Exception handler name */
2032     case N_PC:                  /* Global symbol in Pascal */
2033     case N_M2C:                 /* Modula-2 compilation unit */
2034     /*   N_MOD2:        overlaps with N_EHDECL */
2035     case N_SCOPE:               /* Modula-2 scope information */
2036     case N_ECOML:               /* End common (local name) */
2037     case N_NBTEXT:              /* Gould Non-Base-Register symbols??? */
2038     case N_NBDATA:
2039     case N_NBBSS:
2040     case N_NBSTS:
2041     case N_NBLCS:
2042       complain (&unknown_symtype_complaint, local_hex_string (type));
2043       /* FALLTHROUGH */
2044
2045     /* The following symbol types don't need the address field relocated,
2046        since it is either unused, or is absolute.  */
2047     define_a_symbol:
2048     case N_GSYM:                /* Global variable */
2049     case N_NSYMS:               /* Number of symbols (ultrix) */
2050     case N_NOMAP:               /* No map?  (ultrix) */
2051     case N_RSYM:                /* Register variable */
2052     case N_DEFD:                /* Modula-2 GNU module dependency */
2053     case N_SSYM:                /* Struct or union element */
2054     case N_LSYM:                /* Local symbol in stack */
2055     case N_PSYM:                /* Parameter variable */
2056     case N_LENG:                /* Length of preceding symbol type */
2057       if (name)
2058         {
2059           int deftype;
2060           char *colon_pos = strchr (name, ':');
2061           if (colon_pos == NULL)
2062             deftype = '\0';
2063           else
2064             deftype = colon_pos[1];
2065
2066           switch (deftype)
2067             {
2068             case 'f':
2069             case 'F':
2070               function_stab_type = type;
2071
2072 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
2073               /* Deal with the SunPRO 3.0 compiler which omits the address
2074                  from N_FUN symbols.  */
2075               if (type == N_FUN
2076                   && valu == ANOFFSET (section_offsets, SECT_OFF_TEXT))
2077                 {
2078                   struct minimal_symbol *msym;
2079                   char *p;
2080                   int n;
2081
2082                   p = strchr (name, ':');
2083                   if (p == NULL)
2084                     p = name;
2085                   n = p - name;
2086                   p = alloca (n + 1);
2087                   strncpy (p, name, n);
2088                   p[n] = 0;
2089
2090                   msym = lookup_minimal_symbol (p, last_source_file,
2091                                                 objfile);
2092                   if (msym)
2093                     valu = SYMBOL_VALUE_ADDRESS (msym);
2094                 }
2095 #endif
2096
2097 #ifdef SUN_FIXED_LBRAC_BUG
2098               /* The Sun acc compiler, under SunOS4, puts out
2099                  functions with N_GSYM or N_STSYM.  The problem is
2100                  that the address of the symbol is no good (for N_GSYM
2101                  it doesn't even attept an address; for N_STSYM it
2102                  puts out an address but then it gets relocated
2103                  relative to the data segment, not the text segment).
2104                  Currently we can't fix this up later as we do for
2105                  some types of symbol in scan_file_globals.
2106                  Fortunately we do have a way of finding the address -
2107                  we know that the value in last_pc_address is either
2108                  the one we want (if we're dealing with the first
2109                  function in an object file), or somewhere in the
2110                  previous function. This means that we can use the
2111                  minimal symbol table to get the address.  */
2112
2113               /* Starting with release 3.0, the Sun acc compiler,
2114                  under SunOS4, puts out functions with N_FUN and a value
2115                  of zero. This gets relocated to the start of the text
2116                  segment of the module, which is no good either.
2117                  Under SunOS4 we can deal with this as N_SLINE and N_SO
2118                  entries contain valid absolute addresses.
2119                  Release 3.0 acc also puts out N_OPT entries, which makes
2120                  it possible to discern acc from cc or gcc.  */
2121
2122               if (type == N_GSYM || type == N_STSYM
2123                   || (type == N_FUN
2124                       && n_opt_found && !block_address_function_relative))
2125                 {
2126                   struct minimal_symbol *m;
2127                   int l = colon_pos - name;
2128
2129                   m = lookup_minimal_symbol_by_pc (last_pc_address);
2130                   if (m && STREQN (SYMBOL_NAME (m), name, l)
2131                       && SYMBOL_NAME (m) [l] == '\0')
2132                     /* last_pc_address was in this function */
2133                     valu = SYMBOL_VALUE (m);
2134                   else if (m && STREQN (SYMBOL_NAME (m+1), name, l)
2135                            && SYMBOL_NAME (m+1) [l] == '\0')
2136                     /* last_pc_address was in last function */
2137                     valu = SYMBOL_VALUE (m+1);
2138                   else
2139                     /* Not found - use last_pc_address (for finish_block) */
2140                     valu = last_pc_address;
2141                 }
2142
2143               last_pc_address = valu;   /* Save for SunOS bug circumcision */
2144 #endif
2145
2146               if (block_address_function_relative)
2147                 /* For Solaris 2.0 compilers, the block addresses and
2148                    N_SLINE's are relative to the start of the
2149                    function.  On normal systems, and when using gcc on
2150                    Solaris 2.0, these addresses are just absolute, or
2151                    relative to the N_SO, depending on
2152                    BLOCK_ADDRESS_ABSOLUTE.  */
2153                 function_start_offset = valu;   
2154
2155               within_function = 1;
2156               if (context_stack_depth > 0)
2157                 {
2158                   new = pop_context ();
2159                   /* Make a block for the local symbols within.  */
2160                   finish_block (new->name, &local_symbols, new->old_blocks,
2161                                 new->start_addr, valu, objfile);
2162                 }
2163               /* Stack must be empty now.  */
2164               if (context_stack_depth != 0)
2165                 complain (&lbrac_unmatched_complaint, symnum);
2166
2167               new = push_context (0, valu);
2168               new->name = define_symbol (valu, name, desc, type, objfile);
2169               break;
2170
2171             default:
2172               define_symbol (valu, name, desc, type, objfile);
2173               break;
2174             }
2175         }
2176       break;
2177
2178     /* We use N_OPT to carry the gcc2_compiled flag.  Sun uses it
2179        for a bunch of other flags, too.  Someday we may parse their
2180        flags; for now we ignore theirs and hope they'll ignore ours.  */
2181     case N_OPT:                 /* Solaris 2:  Compiler options */
2182       if (name)
2183         {
2184           if (STREQ (name, GCC2_COMPILED_FLAG_SYMBOL))
2185             {
2186               processing_gcc_compilation = 2;
2187 #if 1         /* Works, but is experimental.  -fnf */
2188               if (AUTO_DEMANGLING)
2189                 {
2190                   set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
2191                 }
2192 #endif
2193             }
2194           else
2195             n_opt_found = 1;
2196         }
2197       break;
2198
2199     /* The following symbol types can be ignored.  */
2200     case N_OBJ:                 /* Solaris 2:  Object file dir and name */
2201     /*   N_UNDF:                   Solaris 2:  file separator mark */
2202     /*   N_UNDF: -- we will never encounter it, since we only process one
2203                     file's symbols at once.  */
2204     case N_ENDM:                /* Solaris 2:  End of module */
2205     case N_MAIN:                /* Name of main routine.  */
2206       break;
2207     }
2208
2209   previous_stab_code = type;
2210 }
2211 \f
2212 /* FIXME: The only difference between this and elfstab_build_psymtabs
2213    is the call to install_minimal_symbols for elf, and the support for
2214    split sections.  If the differences are really that small, the code
2215    should be shared.  */
2216
2217 /* Scan and build partial symbols for an coff symbol file.
2218    The coff file has already been processed to get its minimal symbols.
2219
2220    This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
2221    rolled into one.
2222
2223    OBJFILE is the object file we are reading symbols from.
2224    ADDR is the address relative to which the symbols are (e.g.
2225    the base address of the text segment).
2226    MAINLINE is true if we are reading the main symbol
2227    table (as opposed to a shared lib or dynamically loaded file).
2228    TEXTADDR is the address of the text section.
2229    TEXTSIZE is the size of the text section.
2230    STABSECTS is the list of .stab sections in OBJFILE.
2231    STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
2232    .stabstr section exists.
2233
2234    This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
2235    adjusted for coff details. */
2236
2237 void
2238 coffstab_build_psymtabs (objfile, section_offsets, mainline, 
2239                                textaddr, textsize, stabsects,
2240                                stabstroffset, stabstrsize)
2241       struct objfile *objfile;
2242       struct section_offsets *section_offsets;
2243       int mainline;
2244       CORE_ADDR textaddr;
2245       unsigned int textsize;
2246       struct stab_section_list *stabsects;
2247       file_ptr stabstroffset;
2248       unsigned int stabstrsize;
2249 {
2250   int val;
2251   bfd *sym_bfd = objfile->obfd;
2252   char *name = bfd_get_filename (sym_bfd);
2253   struct dbx_symfile_info *info;
2254   unsigned int stabsize;
2255
2256   /* There is already a dbx_symfile_info allocated by our caller.
2257      It might even contain some info from the coff symtab to help us.  */
2258   info = (struct dbx_symfile_info *) objfile->sym_stab_info;
2259
2260   DBX_TEXT_ADDR (objfile) = textaddr;
2261   DBX_TEXT_SIZE (objfile) = textsize;
2262
2263 #define COFF_STABS_SYMBOL_SIZE  12      /* XXX FIXME XXX */
2264   DBX_SYMBOL_SIZE    (objfile) = COFF_STABS_SYMBOL_SIZE;
2265   DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
2266   
2267   if (stabstrsize > bfd_get_size (sym_bfd))
2268     error ("ridiculous string table size: %d bytes", stabstrsize);
2269   DBX_STRINGTAB (objfile) = (char *)
2270     obstack_alloc (&objfile->psymbol_obstack, stabstrsize+1);
2271
2272   /* Now read in the string table in one big gulp.  */
2273
2274   val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
2275   if (val < 0)
2276     perror_with_name (name);
2277   val = bfd_read (DBX_STRINGTAB (objfile), stabstrsize, 1, sym_bfd);
2278   if (val != stabstrsize)
2279     perror_with_name (name);
2280
2281   stabsread_new_init ();
2282   buildsym_new_init ();
2283   free_header_files ();
2284   init_header_files ();
2285
2286   processing_acc_compilation = 1;
2287
2288   /* In a coff file, we've already installed the minimal symbols that came
2289      from the coff (non-stab) symbol table, so always act like an
2290      incremental load here. */
2291   if (stabsects->next == NULL)
2292     {
2293       stabsize = bfd_section_size (sym_bfd, stabsects->section);
2294       DBX_SYMCOUNT (objfile) = stabsize / DBX_SYMBOL_SIZE (objfile);
2295       DBX_SYMTAB_OFFSET (objfile) = stabsects->section->filepos;
2296     }
2297   else
2298     {
2299       struct stab_section_list *stabsect;
2300
2301       DBX_SYMCOUNT (objfile) = 0;
2302       for (stabsect = stabsects; stabsect != NULL; stabsect = stabsect->next)
2303         {
2304           stabsize = bfd_section_size (sym_bfd, stabsect->section);
2305           DBX_SYMCOUNT (objfile) += stabsize / DBX_SYMBOL_SIZE (objfile);
2306         }
2307
2308       DBX_SYMTAB_OFFSET (objfile) = stabsects->section->filepos;
2309
2310       symbuf_sections = stabsects->next;
2311       symbuf_left = bfd_section_size (sym_bfd, stabsects->section);
2312       symbuf_read = 0;
2313     }
2314
2315   dbx_symfile_read (objfile, section_offsets, 0);
2316 }
2317 \f
2318 /* Scan and build partial symbols for an ELF symbol file.
2319    This ELF file has already been processed to get its minimal symbols,
2320    and any DWARF symbols that were in it.
2321
2322    This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
2323    rolled into one.
2324
2325    OBJFILE is the object file we are reading symbols from.
2326    ADDR is the address relative to which the symbols are (e.g.
2327    the base address of the text segment).
2328    MAINLINE is true if we are reading the main symbol
2329    table (as opposed to a shared lib or dynamically loaded file).
2330    STABOFFSET and STABSIZE define the location in OBJFILE where the .stab
2331    section exists.
2332    STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
2333    .stabstr section exists.
2334
2335    This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
2336    adjusted for elf details. */
2337
2338 void
2339 elfstab_build_psymtabs (objfile, section_offsets, mainline, 
2340                                staboffset, stabsize,
2341                                stabstroffset, stabstrsize)
2342       struct objfile *objfile;
2343       struct section_offsets *section_offsets;
2344       int mainline;
2345       file_ptr staboffset;
2346       unsigned int stabsize;
2347       file_ptr stabstroffset;
2348       unsigned int stabstrsize;
2349 {
2350   int val;
2351   bfd *sym_bfd = objfile->obfd;
2352   char *name = bfd_get_filename (sym_bfd);
2353   struct dbx_symfile_info *info;
2354   asection *text_sect;
2355
2356   /* There is already a dbx_symfile_info allocated by our caller.
2357      It might even contain some info from the ELF symtab to help us.  */
2358   info = (struct dbx_symfile_info *) objfile->sym_stab_info;
2359
2360   text_sect = bfd_get_section_by_name (sym_bfd, ".text");
2361   if (!text_sect)
2362     error ("Can't find .text section in symbol file");
2363   DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
2364   DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
2365
2366 #define ELF_STABS_SYMBOL_SIZE   12      /* XXX FIXME XXX */
2367   DBX_SYMBOL_SIZE    (objfile) = ELF_STABS_SYMBOL_SIZE;
2368   DBX_SYMCOUNT       (objfile) = stabsize / DBX_SYMBOL_SIZE (objfile);
2369   DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
2370   DBX_SYMTAB_OFFSET  (objfile) = staboffset;
2371   
2372   if (stabstrsize > bfd_get_size (sym_bfd))
2373     error ("ridiculous string table size: %d bytes", stabstrsize);
2374   DBX_STRINGTAB (objfile) = (char *)
2375     obstack_alloc (&objfile->psymbol_obstack, stabstrsize+1);
2376
2377   /* Now read in the string table in one big gulp.  */
2378
2379   val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
2380   if (val < 0)
2381     perror_with_name (name);
2382   val = bfd_read (DBX_STRINGTAB (objfile), stabstrsize, 1, sym_bfd);
2383   if (val != stabstrsize)
2384     perror_with_name (name);
2385
2386   stabsread_new_init ();
2387   buildsym_new_init ();
2388   free_header_files ();
2389   init_header_files ();
2390   install_minimal_symbols (objfile);
2391
2392   processing_acc_compilation = 1;
2393
2394   /* In an elf file, we've already installed the minimal symbols that came
2395      from the elf (non-stab) symbol table, so always act like an
2396      incremental load here. */
2397   dbx_symfile_read (objfile, section_offsets, 0);
2398 }
2399 \f
2400 /* Scan and build partial symbols for a file with special sections for stabs
2401    and stabstrings.  The file has already been processed to get its minimal
2402    symbols, and any other symbols that might be necessary to resolve GSYMs.
2403
2404    This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
2405    rolled into one.
2406
2407    OBJFILE is the object file we are reading symbols from.
2408    ADDR is the address relative to which the symbols are (e.g. the base address
2409         of the text segment).
2410    MAINLINE is true if we are reading the main symbol table (as opposed to a
2411             shared lib or dynamically loaded file).
2412    STAB_NAME is the name of the section that contains the stabs.
2413    STABSTR_NAME is the name of the section that contains the stab strings.
2414
2415    This routine is mostly copied from dbx_symfile_init and dbx_symfile_read. */
2416
2417 void
2418 stabsect_build_psymtabs (objfile, section_offsets, mainline, stab_name,
2419                          stabstr_name, text_name)
2420      struct objfile *objfile;
2421      struct section_offsets *section_offsets;
2422      int mainline;
2423      char *stab_name;
2424      char *stabstr_name;
2425      char *text_name;
2426 {
2427   int val;
2428   bfd *sym_bfd = objfile->obfd;
2429   char *name = bfd_get_filename (sym_bfd);
2430   asection *stabsect;
2431   asection *stabstrsect;
2432   asection *text_sect;
2433
2434   stabsect = bfd_get_section_by_name (sym_bfd, stab_name);
2435   stabstrsect = bfd_get_section_by_name (sym_bfd, stabstr_name);
2436
2437   if (!stabsect)
2438     return;
2439
2440   if (!stabstrsect)
2441     error ("stabsect_build_psymtabs:  Found stabs (%s), but not string section (%s)",
2442            stab_name, stabstr_name);
2443
2444   objfile->sym_stab_info = (PTR) xmalloc (sizeof (struct dbx_symfile_info));
2445   memset (DBX_SYMFILE_INFO (objfile), 0, sizeof (struct dbx_symfile_info));
2446
2447   text_sect = bfd_get_section_by_name (sym_bfd, text_name);
2448   if (!text_sect)
2449     error ("Can't find %s section in symbol file", text_name);
2450   DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
2451   DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
2452
2453   DBX_SYMBOL_SIZE    (objfile) = sizeof (struct external_nlist);
2454   DBX_SYMCOUNT       (objfile) = bfd_section_size (sym_bfd, stabsect)
2455     / DBX_SYMBOL_SIZE (objfile);
2456   DBX_STRINGTAB_SIZE (objfile) = bfd_section_size (sym_bfd, stabstrsect);
2457   DBX_SYMTAB_OFFSET  (objfile) = stabsect->filepos; /* XXX - FIXME: POKING INSIDE BFD DATA STRUCTURES */
2458   
2459   if (DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
2460     error ("ridiculous string table size: %d bytes", DBX_STRINGTAB_SIZE (objfile));
2461   DBX_STRINGTAB (objfile) = (char *)
2462     obstack_alloc (&objfile->psymbol_obstack, DBX_STRINGTAB_SIZE (objfile) + 1);
2463
2464   /* Now read in the string table in one big gulp.  */
2465
2466   val = bfd_get_section_contents (sym_bfd, /* bfd */
2467                                   stabstrsect, /* bfd section */
2468                                   DBX_STRINGTAB (objfile), /* input buffer */
2469                                   0, /* offset into section */
2470                                   DBX_STRINGTAB_SIZE (objfile)); /* amount to read */
2471
2472   if (!val)
2473     perror_with_name (name);
2474
2475   stabsread_new_init ();
2476   buildsym_new_init ();
2477   free_header_files ();
2478   init_header_files ();
2479   install_minimal_symbols (objfile);
2480
2481   /* Now, do an incremental load */
2482
2483   processing_acc_compilation = 1;
2484   dbx_symfile_read (objfile, section_offsets, 0);
2485 }
2486 \f
2487 /* Parse the user's idea of an offset for dynamic linking, into our idea
2488    of how to represent it for fast symbol reading.  */
2489
2490 static struct section_offsets *
2491 dbx_symfile_offsets (objfile, addr)
2492      struct objfile *objfile;
2493      CORE_ADDR addr;
2494 {
2495   struct section_offsets *section_offsets;
2496   int i;
2497
2498   objfile->num_sections = SECT_OFF_MAX;
2499   section_offsets = (struct section_offsets *)
2500     obstack_alloc (&objfile -> psymbol_obstack,
2501                    sizeof (struct section_offsets)
2502                    + sizeof (section_offsets->offsets) * (SECT_OFF_MAX-1));
2503
2504   for (i = 0; i < SECT_OFF_MAX; i++)
2505     ANOFFSET (section_offsets, i) = addr;
2506   
2507   return section_offsets;
2508 }
2509 \f
2510 static struct sym_fns aout_sym_fns =
2511 {
2512   bfd_target_aout_flavour,
2513   dbx_new_init,         /* sym_new_init: init anything gbl to entire symtab */
2514   dbx_symfile_init,     /* sym_init: read initial info, setup for sym_read() */
2515   dbx_symfile_read,     /* sym_read: read a symbol file into symtab */
2516   dbx_symfile_finish,   /* sym_finish: finished with file, cleanup */
2517   dbx_symfile_offsets,  /* sym_offsets: parse user's offsets to internal form */
2518   NULL                  /* next: pointer to next struct sym_fns */
2519 };
2520
2521 void
2522 _initialize_dbxread ()
2523 {
2524   add_symtab_fns(&aout_sym_fns);
2525 }
This page took 0.173525 seconds and 4 git commands to generate.