]> Git Repo - binutils.git/blob - gdb/dbxread.c
Thu Apr 22 14:50:05 1993 Jim Kingdon ([email protected])
[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
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., 675 Mass Ave, Cambridge, MA 02139, 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 <string.h>
37
38 #if defined(USG) || defined(__CYGNUSCLIB__)
39 #include <sys/types.h>
40 #include <fcntl.h>
41 #define L_SET 0
42 #define L_INCR 1
43 #endif
44
45 #include <obstack.h>
46 #include <sys/param.h>
47 #ifndef NO_SYS_FILE
48 #include <sys/file.h>
49 #endif
50 #include <sys/stat.h>
51 #include <ctype.h>
52 #include "symtab.h"
53 #include "breakpoint.h"
54 #include "command.h"
55 #include "target.h"
56 #include "gdbcore.h"            /* for bfd stuff */
57 #include "libbfd.h"             /* FIXME Secret internal BFD stuff (bfd_read) */
58 #include "libaout.h"            /* FIXME Secret internal BFD stuff for a.out */
59 #include "symfile.h"
60 #include "objfiles.h"
61 #include "buildsym.h"
62 #include "stabsread.h"
63 #include "gdb-stabs.h"
64 #include "demangle.h"
65 #include "language.h"           /* Needed inside partial-stab.h */
66 #include "complaints.h"
67
68 #include "aout/aout64.h"
69 #include "aout/stab_gnu.h"      /* We always use GNU stabs, not native, now */
70
71 /* Each partial symbol table entry contains a pointer to private data for the
72    read_symtab() function to use when expanding a partial symbol table entry
73    to a full symbol table entry.
74
75    For dbxread this structure contains the offset within the file symbol table
76    of first local symbol for this file, and length (in bytes) of the section
77    of the symbol table devoted to this file's symbols (actually, the section
78    bracketed may contain more than just this file's symbols).  It also contains
79    further information needed to locate the symbols if they are in an ELF file.
80
81    If ldsymlen is 0, the only reason for this thing's existence is the
82    dependency list.  Nothing else will happen when it is read in.  */
83
84 #define LDSYMOFF(p) (((struct symloc *)((p)->read_symtab_private))->ldsymoff)
85 #define LDSYMLEN(p) (((struct symloc *)((p)->read_symtab_private))->ldsymlen)
86 #define SYMLOC(p) ((struct symloc *)((p)->read_symtab_private))
87 #define SYMBOL_SIZE(p) (SYMLOC(p)->symbol_size)
88 #define SYMBOL_OFFSET(p) (SYMLOC(p)->symbol_offset)
89 #define STRING_OFFSET(p) (SYMLOC(p)->string_offset)
90 #define FILE_STRING_OFFSET(p) (SYMLOC(p)->file_string_offset)
91
92 struct symloc {
93   int ldsymoff;
94   int ldsymlen;
95   int symbol_size;
96   int symbol_offset;
97   int string_offset;
98   int file_string_offset;
99 };
100
101 /* Macro to determine which symbols to ignore when reading the first symbol
102    of a file.  Some machines override this definition. */
103 #ifndef IGNORE_SYMBOL
104 /* This code is used on Ultrix systems.  Ignore it */
105 #define IGNORE_SYMBOL(type)  (type == (int)N_NSYMS)
106 #endif
107
108 /* Macro for name of symbol to indicate a file compiled with gcc. */
109 #ifndef GCC_COMPILED_FLAG_SYMBOL
110 #define GCC_COMPILED_FLAG_SYMBOL "gcc_compiled."
111 #endif
112
113 /* Macro for name of symbol to indicate a file compiled with gcc2. */
114 #ifndef GCC2_COMPILED_FLAG_SYMBOL
115 #define GCC2_COMPILED_FLAG_SYMBOL "gcc2_compiled."
116 #endif
117
118 /* Define this as 1 if a pcc declaration of a char or short argument
119    gives the correct address.  Otherwise assume pcc gives the
120    address of the corresponding int, which is not the same on a
121    big-endian machine.  */
122
123 #ifndef BELIEVE_PCC_PROMOTION
124 #define BELIEVE_PCC_PROMOTION 0
125 #endif
126
127 /* Remember what we deduced to be the source language of this psymtab. */
128
129 static enum language psymtab_language = language_unknown;
130
131 /* Nonzero means give verbose info on gdb action.  From main.c.  */
132 extern int info_verbose;
133
134 /* The BFD for this file -- implicit parameter to next_symbol_text.  */
135
136 static bfd *symfile_bfd;
137
138 /* The size of each symbol in the symbol file (in external form).
139    This is set by dbx_symfile_read when building psymtabs, and by
140    dbx_psymtab_to_symtab when building symtabs.  */
141
142 static unsigned symbol_size;
143
144 /* This is the offset of the symbol table in the executable file */
145 static unsigned symbol_table_offset;
146
147 /* This is the offset of the string table in the executable file */
148 static unsigned string_table_offset;
149
150 /* For elf+stab executables, the n_strx field is not a simple index
151    into the string table.  Instead, each .o file has a base offset
152    in the string table, and the associated symbols contain offsets
153    from this base.  The following two variables contain the base
154    offset for the current and next .o files. */
155 static unsigned int file_string_table_offset;
156 static unsigned int next_file_string_table_offset;
157
158 /* Complaints about the symbols we have encountered.  */
159
160 struct complaint lbrac_complaint = 
161   {"bad block start address patched", 0, 0};
162
163 struct complaint string_table_offset_complaint =
164   {"bad string table offset in symbol %d", 0, 0};
165
166 struct complaint unknown_symtype_complaint =
167   {"unknown symbol type %s", 0, 0};
168
169 struct complaint unknown_symchar_complaint =
170   {"unknown symbol type character `%c'", 0, 0};
171
172 struct complaint lbrac_rbrac_complaint =
173   {"block start larger than block end", 0, 0};
174
175 struct complaint lbrac_unmatched_complaint =
176   {"unmatched N_LBRAC before symtab pos %d", 0, 0};
177
178 struct complaint lbrac_mismatch_complaint =
179   {"N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d", 0, 0};
180
181 struct complaint repeated_header_complaint =
182   {"\"repeated\" header file not previously seen, at symtab pos %d", 0, 0};
183
184 struct complaint repeated_header_name_complaint =
185   {"\"repeated\" header file not previously seen, named %s", 0, 0};
186 \f
187 /* During initial symbol readin, we need to have a structure to keep
188    track of which psymtabs have which bincls in them.  This structure
189    is used during readin to setup the list of dependencies within each
190    partial symbol table. */
191
192 struct header_file_location
193 {
194   char *name;                   /* Name of header file */
195   int instance;                 /* See above */
196   struct partial_symtab *pst;   /* Partial symtab that has the
197                                    BINCL/EINCL defs for this file */
198 };
199
200 /* The actual list and controling variables */
201 static struct header_file_location *bincl_list, *next_bincl;
202 static int bincls_allocated;
203
204 /* Local function prototypes */
205
206 static void
207 free_header_files PARAMS ((void));
208
209 static void
210 init_header_files PARAMS ((void));
211
212 static struct pending *
213 copy_pending PARAMS ((struct pending *, int, struct pending *));
214
215 static struct symtab *
216 read_ofile_symtab PARAMS ((struct objfile *, int, int, CORE_ADDR, int, 
217                            struct section_offsets *));
218
219 static void
220 dbx_psymtab_to_symtab PARAMS ((struct partial_symtab *));
221
222 static void
223 dbx_psymtab_to_symtab_1 PARAMS ((struct partial_symtab *));
224
225 static void
226 read_dbx_symtab PARAMS ((struct section_offsets *, struct objfile *,
227                          CORE_ADDR, int));
228
229 static void
230 free_bincl_list PARAMS ((struct objfile *));
231
232 static struct partial_symtab *
233 find_corresponding_bincl_psymtab PARAMS ((char *, int));
234
235 static void
236 add_bincl_to_list PARAMS ((struct partial_symtab *, char *, int));
237
238 static void
239 init_bincl_list PARAMS ((int, struct objfile *));
240
241 static void
242 init_psymbol_list PARAMS ((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, symnum);
352   complain (&repeated_header_name_complaint, name);
353 }
354
355 /* Add to this file a "new" header file: definitions for its types follow.
356    NAME is the header file's name.
357    Most often this happens only once for each distinct header file,
358    but not necessarily.  If it happens more than once, INSTANCE has
359    a different value each time, and references to the header file
360    use INSTANCE values to select among them.
361
362    dbx output contains "begin" and "end" markers for each new header file,
363    but at this level we just need to know which files there have been;
364    so we record the file when its "begin" is seen and ignore the "end".  */
365
366 static void
367 add_new_header_file (name, instance)
368      char *name;
369      int instance;
370 {
371   register int i;
372
373   /* Make sure there is room for one more header file.  */
374
375   if (n_header_files == n_allocated_header_files)
376     {
377       n_allocated_header_files *= 2;
378       header_files = (struct header_file *)
379         xrealloc ((char *) header_files,
380                   (n_allocated_header_files * sizeof (struct header_file)));
381     }
382
383   /* Create an entry for this header file.  */
384
385   i = n_header_files++;
386   header_files[i].name = savestring (name, strlen(name));
387   header_files[i].instance = instance;
388   header_files[i].length = 10;
389   header_files[i].vector
390     = (struct type **) xmalloc (10 * sizeof (struct type *));
391   memset (header_files[i].vector, 0, 10 * sizeof (struct type *));
392
393   add_this_object_header_file (i);
394 }
395
396 #if 0
397 static struct type **
398 explicit_lookup_type (real_filenum, index)
399      int real_filenum, index;
400 {
401   register struct header_file *f = &header_files[real_filenum];
402
403   if (index >= f->length)
404     {
405       f->length *= 2;
406       f->vector = (struct type **)
407         xrealloc (f->vector, f->length * sizeof (struct type *));
408       bzero (&f->vector[f->length / 2],
409              f->length * sizeof (struct type *) / 2);
410     }
411   return &f->vector[index];
412 }
413 #endif
414 \f
415 static void
416 record_minimal_symbol (name, address, type, objfile)
417      char *name;
418      CORE_ADDR address;
419      int type;
420      struct objfile *objfile;
421 {
422   enum minimal_symbol_type ms_type;
423
424   switch (type &~ N_EXT) {
425     case N_TEXT:  ms_type = mst_text; break;
426     case N_DATA:  ms_type = mst_data; break;
427     case N_BSS:   ms_type = mst_bss;  break;
428     case N_ABS:   ms_type = mst_abs;  break;
429 #ifdef N_SETV
430     case N_SETV:  ms_type = mst_data; break;
431 #endif
432     default:      ms_type = mst_unknown; break;
433   }
434
435   prim_record_minimal_symbol (obsavestring (name, strlen (name), &objfile -> symbol_obstack),
436                              address, ms_type);
437 }
438 \f
439 /* Scan and build partial symbols for a symbol file.
440    We have been initialized by a call to dbx_symfile_init, which 
441    put all the relevant info into a "struct dbx_symfile_info",
442    hung off the objfile structure.
443
444    SECTION_OFFSETS contains offsets relative to which the symbols in the
445    various sections are (depending where the sections were actually loaded).
446    MAINLINE is true if we are reading the main symbol
447    table (as opposed to a shared lib or dynamically loaded file).  */
448
449 static void
450 dbx_symfile_read (objfile, section_offsets, mainline)
451      struct objfile *objfile;
452      struct section_offsets *section_offsets;
453      int mainline;      /* FIXME comments above */
454 {
455   bfd *sym_bfd;
456   int val;
457
458   sym_bfd = objfile->obfd;
459   val = bfd_seek (objfile->obfd, DBX_SYMTAB_OFFSET (objfile), L_SET);
460   if (val < 0)
461     perror_with_name (objfile->name);
462
463   /* If we are reinitializing, or if we have never loaded syms yet, init */
464   if (mainline || objfile->global_psymbols.size == 0 || objfile->static_psymbols.size == 0)
465     init_psymbol_list (objfile);
466
467   symbol_size = DBX_SYMBOL_SIZE (objfile);
468   symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
469
470   pending_blocks = 0;
471   make_cleanup (really_free_pendings, 0);
472
473   init_minimal_symbol_collection ();
474   make_cleanup (discard_minimal_symbols, 0);
475
476   /* Now that the symbol table data of the executable file are all in core,
477      process them and define symbols accordingly.  */
478
479   read_dbx_symtab (section_offsets, objfile,
480                    bfd_section_vma  (sym_bfd, DBX_TEXT_SECT (objfile)),
481                    bfd_section_size (sym_bfd, DBX_TEXT_SECT (objfile)));
482
483   /* Install any minimal symbols that have been collected as the current
484      minimal symbols for this objfile. */
485
486   install_minimal_symbols (objfile);
487
488   if (!have_partial_symbols ()) {
489     wrap_here ("");
490     printf_filtered ("(no debugging symbols found)...");
491     wrap_here ("");
492   }
493 }
494
495 /* Initialize anything that needs initializing when a completely new
496    symbol file is specified (not just adding some symbols from another
497    file, e.g. a shared library).  */
498
499 static void
500 dbx_new_init (ignore)
501      struct objfile *ignore;
502 {
503   stabsread_new_init ();
504   buildsym_new_init ();
505   init_header_files ();
506 }
507
508
509 /* dbx_symfile_init ()
510    is the dbx-specific initialization routine for reading symbols.
511    It is passed a struct objfile which contains, among other things,
512    the BFD for the file whose symbols are being read, and a slot for a pointer
513    to "private data" which we fill with goodies.
514
515    We read the string table into malloc'd space and stash a pointer to it.
516
517    Since BFD doesn't know how to read debug symbols in a format-independent
518    way (and may never do so...), we have to do it ourselves.  We will never
519    be called unless this is an a.out (or very similar) file. 
520    FIXME, there should be a cleaner peephole into the BFD environment here.  */
521
522 #define DBX_STRINGTAB_SIZE_SIZE sizeof(long)   /* FIXME */
523
524 static void
525 dbx_symfile_init (objfile)
526      struct objfile *objfile;
527 {
528   int val;
529   bfd *sym_bfd = objfile->obfd;
530   char *name = bfd_get_filename (sym_bfd);
531   unsigned char size_temp[DBX_STRINGTAB_SIZE_SIZE];
532
533   /* Allocate struct to keep track of the symfile */
534   objfile->sym_private = (PTR)
535     xmmalloc (objfile -> md, sizeof (struct dbx_symfile_info));
536
537   /* FIXME POKING INSIDE BFD DATA STRUCTURES */
538 #define STRING_TABLE_OFFSET     (sym_bfd->origin + obj_str_filepos (sym_bfd))
539 #define SYMBOL_TABLE_OFFSET     (sym_bfd->origin + obj_sym_filepos (sym_bfd))
540
541   /* FIXME POKING INSIDE BFD DATA STRUCTURES */
542
543   DBX_SYMFILE_INFO (objfile)->stab_section_info = NULL;
544   DBX_TEXT_SECT (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
545   if (!DBX_TEXT_SECT (objfile))
546     error ("Can't find .text section in symbol file");
547
548   DBX_SYMBOL_SIZE (objfile) = obj_symbol_entry_size (sym_bfd);
549   DBX_SYMCOUNT (objfile) = bfd_get_symcount (sym_bfd);
550   DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
551
552   /* Read the string table and stash it away in the psymbol_obstack.  It is
553      only needed as long as we need to expand psymbols into full symbols,
554      so when we blow away the psymbol the string table goes away as well.
555      Note that gdb used to use the results of attempting to malloc the
556      string table, based on the size it read, as a form of sanity check
557      for botched byte swapping, on the theory that a byte swapped string
558      table size would be so totally bogus that the malloc would fail.  Now
559      that we put in on the psymbol_obstack, we can't do this since gdb gets
560      a fatal error (out of virtual memory) if the size is bogus.  We can
561      however at least check to see if the size is less than the size of
562      the size field itself, or larger than the size of the entire file.
563      Note that all valid string tables have a size greater than zero, since
564      the bytes used to hold the size are included in the count. */
565
566   if (STRING_TABLE_OFFSET == 0)
567     {
568       /* It appears that with the existing bfd code, STRING_TABLE_OFFSET
569          will never be zero, even when there is no string table.  This
570          would appear to be a bug in bfd. */
571       DBX_STRINGTAB_SIZE (objfile) = 0;
572       DBX_STRINGTAB (objfile) = NULL;
573     }
574   else
575     {
576       val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, L_SET);
577       if (val < 0)
578         perror_with_name (name);
579       
580       memset ((PTR) size_temp, 0, sizeof (size_temp));
581       val = bfd_read ((PTR) size_temp, sizeof (size_temp), 1, sym_bfd);
582       if (val < 0)
583         {
584           perror_with_name (name);
585         }
586       else if (val == 0)
587         {
588           /* With the existing bfd code, STRING_TABLE_OFFSET will be set to
589              EOF if there is no string table, and attempting to read the size
590              from EOF will read zero bytes. */
591           DBX_STRINGTAB_SIZE (objfile) = 0;
592           DBX_STRINGTAB (objfile) = NULL;
593         }
594       else
595         {
596           /* Read some data that would appear to be the string table size.
597              If there really is a string table, then it is probably the right
598              size.  Byteswap if necessary and validate the size.  Note that
599              the minimum is DBX_STRINGTAB_SIZE_SIZE.  If we just read some
600              random data that happened to be at STRING_TABLE_OFFSET, because
601              bfd can't tell us there is no string table, the sanity checks may
602              or may not catch this. */
603           DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
604           
605           if (DBX_STRINGTAB_SIZE (objfile) < sizeof (size_temp)
606               || DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
607             error ("ridiculous string table size (%d bytes).",
608                    DBX_STRINGTAB_SIZE (objfile));
609           
610           DBX_STRINGTAB (objfile) =
611             (char *) obstack_alloc (&objfile -> psymbol_obstack,
612                                     DBX_STRINGTAB_SIZE (objfile));
613           
614           /* Now read in the string table in one big gulp.  */
615           
616           val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, L_SET);
617           if (val < 0)
618             perror_with_name (name);
619           val = bfd_read (DBX_STRINGTAB (objfile), DBX_STRINGTAB_SIZE (objfile), 1,
620                           sym_bfd);
621           if (val != DBX_STRINGTAB_SIZE (objfile))
622             perror_with_name (name);
623         }
624     }
625 }
626
627 /* Perform any local cleanups required when we are done with a particular
628    objfile.  I.E, we are in the process of discarding all symbol information
629    for an objfile, freeing up all memory held for it, and unlinking the
630    objfile struct from the global list of known objfiles. */
631
632 static void
633 dbx_symfile_finish (objfile)
634      struct objfile *objfile;
635 {
636   if (objfile->sym_private != NULL)
637     {
638       mfree (objfile -> md, objfile->sym_private);
639     }
640   free_header_files ();
641 }
642
643 \f
644 /* Buffer for reading the symbol table entries.  */
645 static struct internal_nlist symbuf[4096];
646 static int symbuf_idx;
647 static int symbuf_end;
648
649 /* Name of last function encountered.  Used in Solaris to approximate
650    object file boundaries.  */
651 static char *last_function_name;
652
653 /* The address in memory of the string table of the object file we are
654    reading (which might not be the "main" object file, but might be a
655    shared library or some other dynamically loaded thing).  This is set
656    by read_dbx_symtab when building psymtabs, and by read_ofile_symtab 
657    when building symtabs, and is used only by next_symbol_text.  */
658 static char *stringtab_global;
659
660 /* Refill the symbol table input buffer
661    and set the variables that control fetching entries from it.
662    Reports an error if no data available.
663    This function can read past the end of the symbol table
664    (into the string table) but this does no harm.  */
665
666 static void
667 fill_symbuf (sym_bfd)
668      bfd *sym_bfd;
669 {
670   int nbytes = bfd_read ((PTR)symbuf, sizeof (symbuf), 1, sym_bfd);
671   if (nbytes < 0)
672     perror_with_name (bfd_get_filename (sym_bfd));
673   else if (nbytes == 0)
674     error ("Premature end of file reading symbol table");
675   symbuf_end = nbytes / symbol_size;
676   symbuf_idx = 0;
677 }
678
679 #define SWAP_SYMBOL(symp, abfd) \
680   { \
681     (symp)->n_strx = bfd_h_get_32(abfd,                 \
682                                 (unsigned char *)&(symp)->n_strx);      \
683     (symp)->n_desc = bfd_h_get_16 (abfd,                        \
684                                 (unsigned char *)&(symp)->n_desc);      \
685     (symp)->n_value = bfd_h_get_32 (abfd,                       \
686                                 (unsigned char *)&(symp)->n_value);     \
687   }
688
689 /* Invariant: The symbol pointed to by symbuf_idx is the first one
690    that hasn't been swapped.  Swap the symbol at the same time
691    that symbuf_idx is incremented.  */
692
693 /* dbx allows the text of a symbol name to be continued into the
694    next symbol name!  When such a continuation is encountered
695    (a \ at the end of the text of a name)
696    call this function to get the continuation.  */
697
698 static char *
699 dbx_next_symbol_text ()
700 {
701   if (symbuf_idx == symbuf_end)
702     fill_symbuf (symfile_bfd);
703   symnum++;
704   SWAP_SYMBOL(&symbuf[symbuf_idx], symfile_bfd);
705   return symbuf[symbuf_idx++].n_strx + stringtab_global
706           + file_string_table_offset;
707 }
708 \f
709 /* Initializes storage for all of the partial symbols that will be
710    created by read_dbx_symtab and subsidiaries.  */
711
712 static void
713 init_psymbol_list (objfile)
714      struct objfile *objfile;
715 {
716   /* Free any previously allocated psymbol lists.  */
717   if (objfile -> global_psymbols.list)
718     mfree (objfile -> md, (PTR)objfile -> global_psymbols.list);
719   if (objfile -> static_psymbols.list)
720     mfree (objfile -> md, (PTR)objfile -> static_psymbols.list);
721
722   /* Current best guess is that there are approximately a twentieth
723      of the total symbols (in a debugging file) are global or static
724      oriented symbols */
725   objfile -> global_psymbols.size = DBX_SYMCOUNT (objfile) / 10;
726   objfile -> static_psymbols.size = DBX_SYMCOUNT (objfile) / 10;
727   objfile -> global_psymbols.next = objfile -> global_psymbols.list = (struct partial_symbol *)
728     xmmalloc (objfile -> md, objfile -> global_psymbols.size * sizeof (struct partial_symbol));
729   objfile -> static_psymbols.next = objfile -> static_psymbols.list = (struct partial_symbol *)
730     xmmalloc (objfile -> md, objfile -> static_psymbols.size * sizeof (struct partial_symbol));
731 }
732
733 /* Initialize the list of bincls to contain none and have some
734    allocated.  */
735
736 static void
737 init_bincl_list (number, objfile)
738      int number;
739      struct objfile *objfile;
740 {
741   bincls_allocated = number;
742   next_bincl = bincl_list = (struct header_file_location *)
743     xmmalloc (objfile -> md, bincls_allocated * sizeof(struct header_file_location));
744 }
745
746 /* Add a bincl to the list.  */
747
748 static void
749 add_bincl_to_list (pst, name, instance)
750      struct partial_symtab *pst;
751      char *name;
752      int instance;
753 {
754   if (next_bincl >= bincl_list + bincls_allocated)
755     {
756       int offset = next_bincl - bincl_list;
757       bincls_allocated *= 2;
758       bincl_list = (struct header_file_location *)
759         xmrealloc (pst->objfile->md, (char *)bincl_list,
760                   bincls_allocated * sizeof (struct header_file_location));
761       next_bincl = bincl_list + offset;
762     }
763   next_bincl->pst = pst;
764   next_bincl->instance = instance;
765   next_bincl++->name = name;
766 }
767
768 /* Given a name, value pair, find the corresponding
769    bincl in the list.  Return the partial symtab associated
770    with that header_file_location.  */
771
772 static struct partial_symtab *
773 find_corresponding_bincl_psymtab (name, instance)
774      char *name;
775      int instance;
776 {
777   struct header_file_location *bincl;
778
779   for (bincl = bincl_list; bincl < next_bincl; bincl++)
780     if (bincl->instance == instance
781         && STREQ (name, bincl->name))
782       return bincl->pst;
783
784   return (struct partial_symtab *) 0;
785 }
786
787 /* Free the storage allocated for the bincl list.  */
788
789 static void
790 free_bincl_list (objfile)
791      struct objfile *objfile;
792 {
793   mfree (objfile -> md, (PTR)bincl_list);
794   bincls_allocated = 0;
795 }
796
797 /* Given pointers to an a.out symbol table in core containing dbx
798    style data, setup partial_symtab's describing each source file for
799    which debugging information is available.
800    SYMFILE_NAME is the name of the file we are reading from
801    and SECTION_OFFSETS is the set of offsets for the various sections
802    of the file (a set of zeros if the mainline program).  */
803
804 static void
805 read_dbx_symtab (section_offsets, objfile, text_addr, text_size)
806      struct section_offsets *section_offsets;
807      struct objfile *objfile;
808      CORE_ADDR text_addr;
809      int text_size;
810 {
811   register struct internal_nlist *bufp = 0;     /* =0 avoids gcc -Wall glitch */
812   register char *namestring;
813   int nsl;
814   int past_first_source_file = 0;
815   CORE_ADDR last_o_file_start = 0;
816   struct cleanup *old_chain;
817   bfd *abfd;
818
819   /* End of the text segment of the executable file.  */
820   CORE_ADDR end_of_text_addr;
821
822   /* Current partial symtab */
823   struct partial_symtab *pst;
824
825   /* List of current psymtab's include files */
826   char **psymtab_include_list;
827   int includes_allocated;
828   int includes_used;
829
830   /* Index within current psymtab dependency list */
831   struct partial_symtab **dependency_list;
832   int dependencies_used, dependencies_allocated;
833
834   /* FIXME.  We probably want to change stringtab_global rather than add this
835      while processing every symbol entry.  FIXME.  */
836   file_string_table_offset = 0;
837   next_file_string_table_offset = 0;
838
839   stringtab_global = DBX_STRINGTAB (objfile);
840   
841   pst = (struct partial_symtab *) 0;
842
843   includes_allocated = 30;
844   includes_used = 0;
845   psymtab_include_list = (char **) alloca (includes_allocated *
846                                            sizeof (char *));
847
848   dependencies_allocated = 30;
849   dependencies_used = 0;
850   dependency_list =
851     (struct partial_symtab **) alloca (dependencies_allocated *
852                                        sizeof (struct partial_symtab *));
853
854   old_chain = make_cleanup (free_objfile, objfile);
855
856   /* Init bincl list */
857   init_bincl_list (20, objfile);
858   make_cleanup (free_bincl_list, objfile);
859
860   last_source_file = NULL;
861
862 #ifdef END_OF_TEXT_DEFAULT
863   end_of_text_addr = END_OF_TEXT_DEFAULT;
864 #else
865   end_of_text_addr = text_addr + section_offsets->offsets[SECT_OFF_TEXT]
866                                + text_size;     /* Relocate */
867 #endif
868
869   symfile_bfd = objfile->obfd;  /* For next_text_symbol */
870   abfd = objfile->obfd;
871   symbuf_end = symbuf_idx = 0;
872   next_symbol_text_func = dbx_next_symbol_text;
873
874   for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++)
875     {
876       /* Get the symbol for this run and pull out some info */
877       QUIT;     /* allow this to be interruptable */
878       if (symbuf_idx == symbuf_end)
879         fill_symbuf (abfd);
880       bufp = &symbuf[symbuf_idx++];
881
882       /*
883        * Special case to speed up readin.
884        */
885       if (bufp->n_type == (unsigned char)N_SLINE) continue;
886
887       SWAP_SYMBOL (bufp, abfd);
888
889       /* Ok.  There is a lot of code duplicated in the rest of this
890          switch statement (for efficiency reasons).  Since I don't
891          like duplicating code, I will do my penance here, and
892          describe the code which is duplicated:
893
894          *) The assignment to namestring.
895          *) The call to strchr.
896          *) The addition of a partial symbol the the two partial
897             symbol lists.  This last is a large section of code, so
898             I've imbedded it in the following macro.
899          */
900       
901 /* Set namestring based on bufp.  If the string table index is invalid, 
902    give a fake name, and print a single error message per symbol file read,
903    rather than abort the symbol reading or flood the user with messages.  */
904
905 /*FIXME: Too many adds and indirections in here for the inner loop.  */
906 #define SET_NAMESTRING()\
907   if (((unsigned)bufp->n_strx + file_string_table_offset) >=            \
908       DBX_STRINGTAB_SIZE (objfile)) {                                   \
909     complain (&string_table_offset_complaint, symnum);                  \
910     namestring = "foo";                                                 \
911   } else                                                                \
912     namestring = bufp->n_strx + file_string_table_offset +              \
913                  DBX_STRINGTAB (objfile)
914
915 #define CUR_SYMBOL_TYPE bufp->n_type
916 #define CUR_SYMBOL_VALUE bufp->n_value
917 #define DBXREAD_ONLY
918 #define START_PSYMTAB(ofile,secoff,fname,low,symoff,global_syms,static_syms)\
919   start_psymtab(ofile, secoff, fname, low, symoff, global_syms, static_syms)
920 #define END_PSYMTAB(pst,ilist,ninc,c_off,c_text,dep_list,n_deps)\
921   end_psymtab(pst,ilist,ninc,c_off,c_text,dep_list,n_deps)
922
923 #include "partial-stab.h"
924     }
925
926   /* If there's stuff to be cleaned up, clean it up.  */
927   if (DBX_SYMCOUNT (objfile) > 0                        /* We have some syms */
928 /*FIXME, does this have a bug at start address 0? */
929       && last_o_file_start
930       && objfile -> ei.entry_point < bufp->n_value
931       && objfile -> ei.entry_point >= last_o_file_start)
932     {
933       objfile -> ei.entry_file_lowpc = last_o_file_start;
934       objfile -> ei.entry_file_highpc = bufp->n_value;
935     }
936
937   if (pst)
938     {
939       end_psymtab (pst, psymtab_include_list, includes_used,
940                    symnum * symbol_size, end_of_text_addr,
941                    dependency_list, dependencies_used);
942     }
943
944   free_bincl_list (objfile);
945   discard_cleanups (old_chain);
946 }
947
948 /* Allocate and partially fill a partial symtab.  It will be
949    completely filled at the end of the symbol list.
950
951    SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
952    is the address relative to which its symbols are (incremental) or 0
953    (normal). */
954
955
956 struct partial_symtab *
957 start_psymtab (objfile, section_offsets,
958                filename, textlow, ldsymoff, global_syms, static_syms)
959      struct objfile *objfile;
960      struct section_offsets *section_offsets;
961      char *filename;
962      CORE_ADDR textlow;
963      int ldsymoff;
964      struct partial_symbol *global_syms;
965      struct partial_symbol *static_syms;
966 {
967   struct partial_symtab *result =
968       start_psymtab_common(objfile, section_offsets,
969                            filename, textlow, global_syms, static_syms);
970
971   result->read_symtab_private = (char *)
972     obstack_alloc (&objfile -> psymbol_obstack, sizeof (struct symloc));
973   LDSYMOFF(result) = ldsymoff;
974   result->read_symtab = dbx_psymtab_to_symtab;
975   SYMBOL_SIZE(result) = symbol_size;
976   SYMBOL_OFFSET(result) = symbol_table_offset;
977   STRING_OFFSET(result) = string_table_offset;
978   FILE_STRING_OFFSET(result) = file_string_table_offset;
979
980   /* If we're handling an ELF file, drag some section-relocation info
981      for this source file out of the ELF symbol table, to compensate for
982      Sun brain death.  This replaces the section_offsets in this psymtab,
983      if successful.  */
984   elfstab_offset_sections (objfile, result);
985
986   /* Deduce the source language from the filename for this psymtab. */
987   psymtab_language = deduce_language_from_filename (filename);
988
989   return result;
990 }
991
992 /* Close off the current usage of a partial_symbol table entry.  This
993    involves setting the correct number of includes (with a realloc),
994    setting the high text mark, setting the symbol length in the
995    executable, and setting the length of the global and static lists
996    of psymbols.
997
998    The global symbols and static symbols are then seperately sorted.
999
1000    Then the partial symtab is put on the global list.
1001    *** List variables and peculiarities of same. ***
1002    */
1003
1004 void
1005 end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
1006              capping_text, dependency_list, number_dependencies)
1007      struct partial_symtab *pst;
1008      char **include_list;
1009      int num_includes;
1010      int capping_symbol_offset;
1011      CORE_ADDR capping_text;
1012      struct partial_symtab **dependency_list;
1013      int number_dependencies;
1014 /*     struct partial_symbol *capping_global, *capping_static;*/
1015 {
1016   int i;
1017   struct partial_symtab *p1;
1018   struct objfile *objfile = pst -> objfile;
1019
1020   if (capping_symbol_offset != -1)
1021       LDSYMLEN(pst) = capping_symbol_offset - LDSYMOFF(pst);
1022   pst->texthigh = capping_text;
1023
1024   /* Under Solaris, the N_SO symbols always have a value of 0,
1025      instead of the usual address of the .o file.  Therefore,
1026      we have to do some tricks to fill in texthigh and textlow.
1027      The first trick is in partial-stab.h: if we see a static
1028      or global function, and the textlow for the current pst
1029      is still 0, then we use that function's address for 
1030      the textlow of the pst.
1031
1032      Now, to fill in texthigh, we remember the last function seen
1033      in the .o file (also in partial-stab.h).  Also, there's a hack in
1034      bfd/elf.c and gdb/elfread.c to pass the ELF st_size field
1035      to here via the misc_info field.  Therefore, we can fill in
1036      a reliable texthigh by taking the address plus size of the
1037      last function in the file.
1038
1039      Unfortunately, that does not cover the case where the last function
1040      in the file is static.  See the paragraph below for more comments
1041      on this situation.
1042
1043      Finally, if we have a valid textlow for the current file, we run
1044      down the partial_symtab_list filling in previous texthighs that
1045      are still unknown.  */
1046
1047   if (pst->texthigh == 0 && last_function_name) {
1048     char *p;
1049     int n;
1050     struct minimal_symbol *minsym;
1051
1052     p = strchr (last_function_name, ':');
1053     if (p == NULL)
1054       p = last_function_name;
1055     n = p - last_function_name;
1056     p = alloca (n + 1);
1057     strncpy (p, last_function_name, n);
1058     p[n] = 0;
1059     
1060     minsym = lookup_minimal_symbol (p, objfile);
1061
1062     if (minsym) {
1063       pst->texthigh = SYMBOL_VALUE_ADDRESS (minsym) +
1064         (int) MSYMBOL_INFO (minsym);
1065     } else {
1066       /* This file ends with a static function, and it's
1067          difficult to imagine how hard it would be to track down
1068          the elf symbol.  Luckily, most of the time no one will notice,
1069          since the next file will likely be compiled with -g, so
1070          the code below will copy the first fuction's start address 
1071          back to our texthigh variable.  (Also, if this file is the
1072          last one in a dynamically linked program, texthigh already
1073          has the right value.)  If the next file isn't compiled
1074          with -g, then the last function in this file winds up owning
1075          all of the text space up to the next -g file, or the end (minus
1076          shared libraries).  This only matters for single stepping,
1077          and even then it will still work, except that it will single
1078          step through all of the covered functions, instead of setting
1079          breakpoints around them as it usualy does.  This makes it
1080          pretty slow, but at least it doesn't fail.
1081
1082          We can fix this with a fairly big change to bfd, but we need
1083          to coordinate better with Cygnus if we want to do that.  FIXME.  */
1084     }
1085     last_function_name = NULL;
1086   }
1087
1088   /* this test will be true if the last .o file is only data */
1089   if (pst->textlow == 0)
1090     pst->textlow = pst->texthigh;
1091
1092   /* If we know our own starting text address, then walk through all other
1093      psymtabs for this objfile, and if any didn't know their ending text
1094      address, set it to our starting address.  Take care to not set our
1095      own ending address to our starting address, nor to set addresses on
1096      `dependency' files that have both textlow and texthigh zero.  */
1097   if (pst->textlow) {
1098     ALL_OBJFILE_PSYMTABS (objfile, p1) {
1099       if (p1->texthigh == 0  && p1->textlow != 0 && p1 != pst) {
1100         p1->texthigh = pst->textlow;
1101         /* if this file has only data, then make textlow match texthigh */
1102         if (p1->textlow == 0)
1103           p1->textlow = p1->texthigh;
1104       }
1105     }
1106   }
1107
1108   /* End of kludge for patching Solaris textlow and texthigh.  */
1109
1110
1111   pst->n_global_syms =
1112     objfile->global_psymbols.next - (objfile->global_psymbols.list + pst->globals_offset);
1113   pst->n_static_syms =
1114     objfile->static_psymbols.next - (objfile->static_psymbols.list + pst->statics_offset);
1115
1116   pst->number_of_dependencies = number_dependencies;
1117   if (number_dependencies)
1118     {
1119       pst->dependencies = (struct partial_symtab **)
1120         obstack_alloc (&objfile->psymbol_obstack,
1121                        number_dependencies * sizeof (struct partial_symtab *));
1122       memcpy (pst->dependencies, dependency_list,
1123              number_dependencies * sizeof (struct partial_symtab *));
1124     }
1125   else
1126     pst->dependencies = 0;
1127
1128   for (i = 0; i < num_includes; i++)
1129     {
1130       struct partial_symtab *subpst =
1131         allocate_psymtab (include_list[i], objfile);
1132
1133       subpst->section_offsets = pst->section_offsets;
1134       subpst->read_symtab_private =
1135           (char *) obstack_alloc (&objfile->psymbol_obstack,
1136                                   sizeof (struct symloc));
1137       LDSYMOFF(subpst) =
1138         LDSYMLEN(subpst) =
1139           subpst->textlow =
1140             subpst->texthigh = 0;
1141
1142       /* We could save slight bits of space by only making one of these,
1143          shared by the entire set of include files.  FIXME-someday.  */
1144       subpst->dependencies = (struct partial_symtab **)
1145         obstack_alloc (&objfile->psymbol_obstack,
1146                        sizeof (struct partial_symtab *));
1147       subpst->dependencies[0] = pst;
1148       subpst->number_of_dependencies = 1;
1149
1150       subpst->globals_offset =
1151         subpst->n_global_syms =
1152           subpst->statics_offset =
1153             subpst->n_static_syms = 0;
1154
1155       subpst->readin = 0;
1156       subpst->symtab = 0;
1157       subpst->read_symtab = dbx_psymtab_to_symtab;
1158     }
1159
1160   sort_pst_symbols (pst);
1161
1162   /* If there is already a psymtab or symtab for a file of this name, remove it.
1163      (If there is a symtab, more drastic things also happen.)
1164      This happens in VxWorks.  */
1165   free_named_symtabs (pst->filename);
1166
1167   if (num_includes == 0
1168    && number_dependencies == 0
1169    && pst->n_global_syms == 0
1170    && pst->n_static_syms == 0) {
1171     /* Throw away this psymtab, it's empty.  We can't deallocate it, since
1172        it is on the obstack, but we can forget to chain it on the list.  */
1173     struct partial_symtab *prev_pst;
1174
1175     /* First, snip it out of the psymtab chain */
1176
1177     if (pst->objfile->psymtabs == pst)
1178       pst->objfile->psymtabs = pst->next;
1179     else
1180       for (prev_pst = pst->objfile->psymtabs; prev_pst; prev_pst = pst->next)
1181         if (prev_pst->next == pst)
1182           prev_pst->next = pst->next;
1183
1184     /* Next, put it on a free list for recycling */
1185
1186     pst->next = pst->objfile->free_psymtabs;
1187     pst->objfile->free_psymtabs = pst;
1188   }
1189 }
1190 \f
1191 static void
1192 dbx_psymtab_to_symtab_1 (pst)
1193      struct partial_symtab *pst;
1194 {
1195   struct cleanup *old_chain;
1196   int i;
1197   
1198   if (!pst)
1199     return;
1200
1201   if (pst->readin)
1202     {
1203       fprintf (stderr, "Psymtab for %s already read in.  Shouldn't happen.\n",
1204                pst->filename);
1205       return;
1206     }
1207
1208   /* Read in all partial symtabs on which this one is dependent */
1209   for (i = 0; i < pst->number_of_dependencies; i++)
1210     if (!pst->dependencies[i]->readin)
1211       {
1212         /* Inform about additional files that need to be read in.  */
1213         if (info_verbose)
1214           {
1215             fputs_filtered (" ", stdout);
1216             wrap_here ("");
1217             fputs_filtered ("and ", stdout);
1218             wrap_here ("");
1219             printf_filtered ("%s...", pst->dependencies[i]->filename);
1220             wrap_here ("");             /* Flush output */
1221             fflush (stdout);
1222           }
1223         dbx_psymtab_to_symtab_1 (pst->dependencies[i]);
1224       }
1225
1226   if (LDSYMLEN(pst))            /* Otherwise it's a dummy */
1227     {
1228       /* Init stuff necessary for reading in symbols */
1229       stabsread_init ();
1230       buildsym_init ();
1231       old_chain = make_cleanup (really_free_pendings, 0);
1232       file_string_table_offset = FILE_STRING_OFFSET (pst);
1233       symbol_size = SYMBOL_SIZE (pst);
1234
1235       /* Read in this file's symbols */
1236       bfd_seek (pst->objfile->obfd, SYMBOL_OFFSET (pst), L_SET);
1237       pst->symtab =
1238         read_ofile_symtab (pst->objfile, LDSYMOFF(pst), LDSYMLEN(pst),
1239                            pst->textlow, pst->texthigh - pst->textlow,
1240                            pst->section_offsets);
1241       sort_symtab_syms (pst->symtab);
1242
1243       do_cleanups (old_chain);
1244     }
1245
1246   pst->readin = 1;
1247 }
1248
1249 /* Read in all of the symbols for a given psymtab for real.
1250    Be verbose about it if the user wants that.  */
1251
1252 static void
1253 dbx_psymtab_to_symtab (pst)
1254      struct partial_symtab *pst;
1255 {
1256   bfd *sym_bfd;
1257
1258   if (!pst)
1259     return;
1260
1261   if (pst->readin)
1262     {
1263       fprintf (stderr, "Psymtab for %s already read in.  Shouldn't happen.\n",
1264                pst->filename);
1265       return;
1266     }
1267
1268   if (LDSYMLEN(pst) || pst->number_of_dependencies)
1269     {
1270       /* Print the message now, before reading the string table,
1271          to avoid disconcerting pauses.  */
1272       if (info_verbose)
1273         {
1274           printf_filtered ("Reading in symbols for %s...", pst->filename);
1275           fflush (stdout);
1276         }
1277
1278       sym_bfd = pst->objfile->obfd;
1279
1280       next_symbol_text_func = dbx_next_symbol_text;
1281
1282       dbx_psymtab_to_symtab_1 (pst);
1283
1284       /* Match with global symbols.  This only needs to be done once,
1285          after all of the symtabs and dependencies have been read in.   */
1286       scan_file_globals (pst->objfile);
1287
1288       /* Finish up the debug error message.  */
1289       if (info_verbose)
1290         printf_filtered ("done.\n");
1291     }
1292 }
1293
1294 /* Read in a defined section of a specific object file's symbols.
1295   
1296    DESC is the file descriptor for the file, positioned at the
1297    beginning of the symtab
1298    SYM_OFFSET is the offset within the file of
1299    the beginning of the symbols we want to read
1300    SYM_SIZE is the size of the symbol info to read in.
1301    TEXT_OFFSET is the beginning of the text segment we are reading symbols for
1302    TEXT_SIZE is the size of the text segment read in.
1303    SECTION_OFFSETS are the relocation offsets which get added to each symbol. */
1304
1305 static struct symtab *
1306 read_ofile_symtab (objfile, sym_offset, sym_size, text_offset, text_size,
1307                    section_offsets)
1308      struct objfile *objfile;
1309      int sym_offset;
1310      int sym_size;
1311      CORE_ADDR text_offset;
1312      int text_size;
1313      struct section_offsets *section_offsets;
1314 {
1315   register char *namestring;
1316   register struct internal_nlist *bufp;
1317   unsigned char type;
1318   unsigned max_symnum;
1319   register bfd *abfd;
1320   struct symtab *rtn;
1321
1322   current_objfile = objfile;
1323   subfile_stack = NULL;
1324
1325   stringtab_global = DBX_STRINGTAB (objfile);
1326   last_source_file = NULL;
1327
1328   abfd = objfile->obfd;
1329   symfile_bfd = objfile->obfd;  /* Implicit param to next_text_symbol */
1330   symbuf_end = symbuf_idx = 0;
1331
1332   /* It is necessary to actually read one symbol *before* the start
1333      of this symtab's symbols, because the GCC_COMPILED_FLAG_SYMBOL
1334      occurs before the N_SO symbol.
1335
1336      Detecting this in read_dbx_symtab
1337      would slow down initial readin, so we look for it here instead.  */
1338   if (!processing_acc_compilation && sym_offset >= (int)symbol_size)
1339     {
1340       bfd_seek (symfile_bfd, sym_offset - symbol_size, L_INCR);
1341       fill_symbuf (abfd);
1342       bufp = &symbuf[symbuf_idx++];
1343       SWAP_SYMBOL (bufp, abfd);
1344
1345       SET_NAMESTRING ();
1346
1347       processing_gcc_compilation = 0;
1348       if (bufp->n_type == N_TEXT)
1349         {
1350           if (STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
1351             processing_gcc_compilation = 1;
1352           else if (STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
1353             processing_gcc_compilation = 2;
1354         }
1355
1356       /* Try to select a C++ demangling based on the compilation unit
1357          producer. */
1358
1359       if (processing_gcc_compilation)
1360         {
1361 #if 1     /* Works, but is experimental.  -fnf */
1362           if (AUTO_DEMANGLING)
1363             {
1364               set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1365             }
1366 #endif
1367         }
1368     }
1369   else
1370     {
1371       /* The N_SO starting this symtab is the first symbol, so we
1372          better not check the symbol before it.  I'm not this can
1373          happen, but it doesn't hurt to check for it.  */
1374       bfd_seek (symfile_bfd, sym_offset, L_INCR);
1375       processing_gcc_compilation = 0;
1376     }
1377
1378   if (symbuf_idx == symbuf_end)
1379     fill_symbuf (abfd);
1380   bufp = &symbuf[symbuf_idx];
1381   if (bufp->n_type != (unsigned char)N_SO)
1382     error("First symbol in segment of executable not a source symbol");
1383
1384   max_symnum = sym_size / symbol_size;
1385
1386   for (symnum = 0;
1387        symnum < max_symnum;
1388        symnum++)
1389     {
1390       QUIT;                     /* Allow this to be interruptable */
1391       if (symbuf_idx == symbuf_end)
1392         fill_symbuf(abfd);
1393       bufp = &symbuf[symbuf_idx++];
1394       SWAP_SYMBOL (bufp, abfd);
1395
1396       type = bufp->n_type;
1397
1398       SET_NAMESTRING ();
1399
1400       if (type & N_STAB) {
1401           process_one_symbol (type, bufp->n_desc, bufp->n_value,
1402                               namestring, section_offsets, objfile);
1403       }
1404       /* We skip checking for a new .o or -l file; that should never
1405          happen in this routine. */
1406       else if (type == N_TEXT)
1407         {
1408           /* I don't think this code will ever be executed, because
1409              the GCC_COMPILED_FLAG_SYMBOL usually is right before
1410              the N_SO symbol which starts this source file.
1411              However, there is no reason not to accept
1412              the GCC_COMPILED_FLAG_SYMBOL anywhere.  */
1413
1414           if (STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
1415             processing_gcc_compilation = 1;
1416           else if (STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
1417             processing_gcc_compilation = 2;
1418
1419 #if 1     /* Works, but is experimental.  -fnf */
1420           if (AUTO_DEMANGLING)
1421             {
1422               set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1423             }
1424 #endif
1425         }
1426       else if (type & N_EXT || type == (unsigned char)N_TEXT
1427                || type == (unsigned char)N_NBTEXT
1428                ) {
1429           /* Global symbol: see if we came across a dbx defintion for
1430              a corresponding symbol.  If so, store the value.  Remove
1431              syms from the chain when their values are stored, but
1432              search the whole chain, as there may be several syms from
1433              different files with the same name. */
1434           /* This is probably not true.  Since the files will be read
1435              in one at a time, each reference to a global symbol will
1436              be satisfied in each file as it appears. So we skip this
1437              section. */
1438           ;
1439         }
1440     }
1441
1442   current_objfile = NULL;
1443
1444   /* In a Solaris elf file, this variable, which comes from the
1445      value of the N_SO symbol, will still be 0.  Luckily, text_offset,
1446      which comes from pst->textlow is correct. */
1447   if (last_source_start_addr == 0)
1448     last_source_start_addr = text_offset;
1449
1450   rtn = end_symtab (text_offset + text_size, 0, 0, objfile, SECT_OFF_TEXT);
1451   end_stabs ();
1452   return (rtn);
1453 }
1454 \f
1455 /* This handles a single symbol from the symbol-file, building symbols
1456    into a GDB symtab.  It takes these arguments and an implicit argument.
1457
1458    TYPE is the type field of the ".stab" symbol entry.
1459    DESC is the desc field of the ".stab" entry.
1460    VALU is the value field of the ".stab" entry.
1461    NAME is the symbol name, in our address space.
1462    SECTION_OFFSETS is a set of amounts by which the sections of this object
1463           file were relocated when it was loaded into memory.
1464           All symbols that refer
1465           to memory locations need to be offset by these amounts.
1466    OBJFILE is the object file from which we are reading symbols.
1467                It is used in end_symtab.  */
1468
1469 void
1470 process_one_symbol (type, desc, valu, name, section_offsets, objfile)
1471      int type, desc;
1472      CORE_ADDR valu;
1473      char *name;
1474      struct section_offsets *section_offsets;
1475      struct objfile *objfile;
1476 {
1477 #ifndef SUN_FIXED_LBRAC_BUG
1478   /* This records the last pc address we've seen.  We depend on there being
1479      an SLINE or FUN or SO before the first LBRAC, since the variable does
1480      not get reset in between reads of different symbol files.  */
1481   static CORE_ADDR last_pc_address;
1482 #endif
1483   register struct context_stack *new;
1484   /* This remembers the address of the start of a function.  It is used
1485      because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries are
1486      relative to the current function's start address.  On systems
1487      other than Solaris 2, this just holds the SECT_OFF_TEXT value, and is
1488      used to relocate these symbol types rather than SECTION_OFFSETS.  */
1489   static CORE_ADDR function_start_offset;
1490   char *colon_pos;
1491
1492 #ifndef BLOCK_ADDRESS_FUNCTION_RELATIVE
1493   /* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
1494      function start address, so just use the text offset.  */
1495   function_start_offset = ANOFFSET (section_offsets, SECT_OFF_TEXT);
1496 #endif
1497
1498   /* Something is wrong if we see real data before
1499      seeing a source file name.  */
1500
1501   if (last_source_file == NULL && type != (unsigned char)N_SO)
1502     {
1503       /* Currently this ignores N_ENTRY on Gould machines, N_NSYM on machines
1504          where that code is defined.  */
1505       if (IGNORE_SYMBOL (type))
1506         return;
1507
1508       /* FIXME, this should not be an error, since it precludes extending
1509          the symbol table information in this way...  */
1510       error ("Invalid symbol data: does not start by identifying a source file.");
1511     }
1512
1513   switch (type)
1514     {
1515     case N_FUN:
1516     case N_FNAME:
1517 #if 0
1518 /* It seems that the Sun ANSI C compiler (acc) replaces N_FUN with N_GSYM and
1519    N_STSYM with a type code of f or F.  Can't enable this until we get some
1520    stuff straightened out with psymtabs.  FIXME. */
1521
1522     case N_GSYM:
1523     case N_STSYM:
1524 #endif /* 0 */
1525
1526       /* Relocate for dynamic loading */
1527       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1528
1529       /* Either of these types of symbols indicates the start of
1530          a new function.  We must process its "name" normally for dbx,
1531          but also record the start of a new lexical context, and possibly
1532          also the end of the lexical context for the previous function.  */
1533       /* This is not always true.  This type of symbol may indicate a
1534          text segment variable.  */
1535
1536       colon_pos = strchr (name, ':');
1537       if (!colon_pos++
1538           || (*colon_pos != 'f' && *colon_pos != 'F'))
1539         {
1540           define_symbol (valu, name, desc, type, objfile);
1541           break;
1542         }
1543
1544 #ifndef SUN_FIXED_LBRAC_BUG
1545       last_pc_address = valu;   /* Save for SunOS bug circumcision */
1546 #endif
1547
1548 #ifdef  BLOCK_ADDRESS_FUNCTION_RELATIVE
1549       /* On Solaris 2.0 compilers, the block addresses and N_SLINE's
1550          are relative to the start of the function.  On normal systems,
1551          and when using gcc on Solaris 2.0, these addresses are just
1552          absolute, or relative to the N_SO, depending on
1553          BLOCK_ADDRESS_ABSOLUTE.  */
1554       function_start_offset = valu;     
1555 #endif
1556
1557       within_function = 1;
1558       if (context_stack_depth > 0)
1559         {
1560           new = pop_context ();
1561           /* Make a block for the local symbols within.  */
1562           finish_block (new->name, &local_symbols, new->old_blocks,
1563                         new->start_addr, valu, objfile);
1564         }
1565       /* Stack must be empty now.  */
1566       if (context_stack_depth != 0)
1567         complain (&lbrac_unmatched_complaint, symnum);
1568
1569       new = push_context (0, valu);
1570       new->name = define_symbol (valu, name, desc, type, objfile);
1571       break;
1572
1573     case N_LBRAC:
1574       /* This "symbol" just indicates the start of an inner lexical
1575          context within a function.  */
1576
1577 #if defined(BLOCK_ADDRESS_ABSOLUTE) || defined(BLOCK_ADDRESS_FUNCTION_RELATIVE)
1578       /* Relocate for dynamic loading and Sun ELF acc fn-relative syms.  */
1579       valu += function_start_offset;
1580 #else
1581       /* On most machines, the block addresses are relative to the
1582          N_SO, the linker did not relocate them (sigh).  */
1583       valu += last_source_start_addr;
1584 #endif
1585
1586 #ifndef SUN_FIXED_LBRAC_BUG
1587       if (valu < last_pc_address) {
1588         /* Patch current LBRAC pc value to match last handy pc value */
1589         complain (&lbrac_complaint);
1590         valu = last_pc_address;
1591       }
1592 #endif
1593       new = push_context (desc, valu);
1594       break;
1595
1596     case N_RBRAC:
1597       /* This "symbol" just indicates the end of an inner lexical
1598          context that was started with N_LBRAC.  */
1599
1600 #if defined(BLOCK_ADDRESS_ABSOLUTE) || defined(BLOCK_ADDRESS_FUNCTION_RELATIVE)
1601       /* Relocate for dynamic loading and Sun ELF acc fn-relative syms.  */
1602       valu += function_start_offset;
1603 #else
1604       /* On most machines, the block addresses are relative to the
1605          N_SO, the linker did not relocate them (sigh).  */
1606       valu += last_source_start_addr;
1607 #endif
1608
1609       new = pop_context();
1610       if (desc != new->depth)
1611         complain (&lbrac_mismatch_complaint, symnum);
1612
1613       /* Some compilers put the variable decls inside of an
1614          LBRAC/RBRAC block.  This macro should be nonzero if this
1615          is true.  DESC is N_DESC from the N_RBRAC symbol.
1616          GCC_P is true if we've detected the GCC_COMPILED_SYMBOL
1617          or the GCC2_COMPILED_SYMBOL.  */
1618 #if !defined (VARIABLES_INSIDE_BLOCK)
1619 #define VARIABLES_INSIDE_BLOCK(desc, gcc_p) 0
1620 #endif
1621
1622       /* Can only use new->locals as local symbols here if we're in
1623          gcc or on a machine that puts them before the lbrack.  */
1624       if (!VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1625         local_symbols = new->locals;
1626
1627       /* If this is not the outermost LBRAC...RBRAC pair in the
1628          function, its local symbols preceded it, and are the ones
1629          just recovered from the context stack.  Defined the block for them.
1630
1631          If this is the outermost LBRAC...RBRAC pair, there is no
1632          need to do anything; leave the symbols that preceded it
1633          to be attached to the function's own block.  However, if
1634          it is so, we need to indicate that we just moved outside
1635          of the function.  */
1636       if (local_symbols
1637           && (context_stack_depth
1638               > !VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation)))
1639         {
1640           /* FIXME Muzzle a compiler bug that makes end < start.  */
1641           if (new->start_addr > valu)
1642             {
1643               complain (&lbrac_rbrac_complaint);
1644               new->start_addr = valu;
1645             }
1646           /* Make a block for the local symbols within.  */
1647           finish_block (0, &local_symbols, new->old_blocks,
1648                         new->start_addr, valu, objfile);
1649         }
1650       else
1651         {
1652           within_function = 0;
1653         }
1654       if (VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1655         /* Now pop locals of block just finished.  */
1656         local_symbols = new->locals;
1657       break;
1658
1659     case N_FN:
1660     case N_FN_SEQ:
1661       /* This kind of symbol indicates the start of an object file.  */
1662       /* Relocate for dynamic loading */
1663       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1664       break;
1665
1666     case N_SO:
1667       /* This type of symbol indicates the start of data
1668          for one source file.
1669          Finish the symbol table of the previous source file
1670          (if any) and start accumulating a new symbol table.  */
1671       /* Relocate for dynamic loading */
1672       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1673
1674 #ifndef SUN_FIXED_LBRAC_BUG
1675       last_pc_address = valu;   /* Save for SunOS bug circumcision */
1676 #endif
1677   
1678 #ifdef PCC_SOL_BROKEN
1679       /* pcc bug, occasionally puts out SO for SOL.  */
1680       if (context_stack_depth > 0)
1681         {
1682           start_subfile (name, NULL);
1683           break;
1684         }
1685 #endif
1686       if (last_source_file)
1687         {
1688           /* Check if previous symbol was also an N_SO (with some
1689              sanity checks).  If so, that one was actually the directory
1690              name, and the current one is the real file name.
1691              Patch things up. */           
1692           if (previous_stab_code == (unsigned char) N_SO)
1693             {
1694               patch_subfile_names (current_subfile, name);
1695               break;            /* Ignore repeated SOs */
1696             }
1697           end_symtab (valu, 0, 0, objfile, SECT_OFF_TEXT);
1698           end_stabs ();
1699         }
1700       start_stabs ();
1701       start_symtab (name, NULL, valu);
1702       break;
1703
1704
1705     case N_SOL:
1706       /* This type of symbol indicates the start of data for
1707          a sub-source-file, one whose contents were copied or
1708          included in the compilation of the main source file
1709          (whose name was given in the N_SO symbol.)  */
1710       /* Relocate for dynamic loading */
1711       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1712       start_subfile (name, current_subfile->dirname);
1713       break;
1714
1715     case N_BINCL:
1716       push_subfile ();
1717       add_new_header_file (name, valu);
1718       start_subfile (name, current_subfile->dirname);
1719       break;
1720
1721     case N_EINCL:
1722       start_subfile (pop_subfile (), current_subfile->dirname);
1723       break;
1724
1725     case N_EXCL:
1726       add_old_header_file (name, valu);
1727       break;
1728
1729     case N_SLINE:
1730       /* This type of "symbol" really just records
1731          one line-number -- core-address correspondence.
1732          Enter it in the line list for this symbol table.  */
1733       /* Relocate for dynamic loading and for ELF acc fn-relative syms.  */
1734       valu += function_start_offset;
1735 #ifndef SUN_FIXED_LBRAC_BUG
1736       last_pc_address = valu;   /* Save for SunOS bug circumcision */
1737 #endif
1738       record_line (current_subfile, desc, valu);
1739       break;
1740
1741     case N_BCOMM:
1742       if (common_block)
1743         error ("Invalid symbol data: common within common at symtab pos %d",
1744                symnum);
1745       common_block = local_symbols;
1746       common_block_i = local_symbols ? local_symbols->nsyms : 0;
1747       break;
1748
1749     case N_ECOMM:
1750       /* Symbols declared since the BCOMM are to have the common block
1751          start address added in when we know it.  common_block points to
1752          the first symbol after the BCOMM in the local_symbols list;
1753          copy the list and hang it off the symbol for the common block name
1754          for later fixup.  */
1755       {
1756         int i;
1757         struct symbol *sym =
1758           (struct symbol *) xmmalloc (objfile -> md, sizeof (struct symbol));
1759         memset (sym, 0, sizeof *sym);
1760         SYMBOL_NAME (sym) = savestring (name, strlen (name));
1761         SYMBOL_CLASS (sym) = LOC_BLOCK;
1762         SYMBOL_NAMESPACE (sym) = (enum namespace)((long)
1763           copy_pending (local_symbols, common_block_i, common_block));
1764         i = hashname (SYMBOL_NAME (sym));
1765         SYMBOL_VALUE_CHAIN (sym) = global_sym_chain[i];
1766         global_sym_chain[i] = sym;
1767         common_block = 0;
1768         break;
1769       }
1770
1771     /* The following symbol types need to have the appropriate offset added
1772        to their value; then we process symbol definitions in the name.  */
1773
1774     case N_STSYM:               /* Static symbol in data seg */
1775     case N_LCSYM:               /* Static symbol in BSS seg */
1776     case N_ROSYM:               /* Static symbol in Read-only data seg */
1777      /* HORRID HACK DEPT.  However, it's Sun's furgin' fault.  FIXME.
1778         Solaris2's stabs-in-coff makes *most* symbols relative
1779         but leaves a few absolute.  N_STSYM and friends sit on the fence.
1780         .stab "foo:S...",N_STSYM        is absolute (ld relocates it)
1781         .stab "foo:V...",N_STSYM        is relative (section base subtracted).
1782         This leaves us no choice but to search for the 'S' or 'V'...
1783         (or pass the whole section_offsets stuff down ONE MORE function
1784         call level, which we really don't want to do).  */
1785       {
1786         char *p;
1787         p = strchr (name, ':');
1788         if (p != 0 && p[1] == 'S')
1789           {
1790             /* FIXME!  We relocate it by the TEXT offset, in case the
1791                whole module moved in memory.  But this is wrong, since
1792                the sections can side around independently.  */
1793             valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1794             goto define_a_symbol;
1795           }
1796         /* Since it's not the kludge case, re-dispatch to the right handler. */
1797         switch (type) {
1798         case N_STSYM:   goto case_N_STSYM;
1799         case N_LCSYM:   goto case_N_LCSYM;
1800         case N_ROSYM:   goto case_N_ROSYM;
1801         default:        abort();
1802         }
1803       }
1804
1805     case_N_STSYM:               /* Static symbol in data seg */
1806     case N_DSLINE:              /* Source line number, data seg */
1807       valu += ANOFFSET (section_offsets, SECT_OFF_DATA);
1808       goto define_a_symbol;
1809
1810     case_N_LCSYM:               /* Static symbol in BSS seg */
1811     case N_BSLINE:              /* Source line number, bss seg */
1812     /*   N_BROWS:       overlaps with N_BSLINE */
1813       valu += ANOFFSET (section_offsets, SECT_OFF_BSS);
1814       goto define_a_symbol;
1815
1816     case_N_ROSYM:               /* Static symbol in Read-only data seg */
1817       valu += ANOFFSET (section_offsets, SECT_OFF_RODATA);
1818       goto define_a_symbol;
1819
1820     case N_ENTRY:               /* Alternate entry point */
1821       /* Relocate for dynamic loading */
1822       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1823       goto define_a_symbol;
1824
1825     /* The following symbol types don't need the address field relocated,
1826        since it is either unused, or is absolute.  */
1827     define_a_symbol:
1828     case N_GSYM:                /* Global variable */
1829     case N_NSYMS:               /* Number of symbols (ultrix) */
1830     case N_NOMAP:               /* No map?  (ultrix) */
1831     case N_RSYM:                /* Register variable */
1832     case N_DEFD:                /* Modula-2 GNU module dependency */
1833     case N_SSYM:                /* Struct or union element */
1834     case N_LSYM:                /* Local symbol in stack */
1835     case N_PSYM:                /* Parameter variable */
1836     case N_LENG:                /* Length of preceding symbol type */
1837       if (name)
1838         define_symbol (valu, name, desc, type, objfile);
1839       break;
1840
1841     /* We use N_OPT to carry the gcc2_compiled flag.  Sun uses it
1842        for a bunch of other flags, too.  Someday we may parse their
1843        flags; for now we ignore theirs and hope they'll ignore ours.  */
1844     case N_OPT:                 /* Solaris 2:  Compiler options */
1845       if (name)
1846         {
1847           if (STREQ (name, GCC2_COMPILED_FLAG_SYMBOL))
1848             {
1849               processing_gcc_compilation = 2;
1850 #if 1         /* Works, but is experimental.  -fnf */
1851               if (AUTO_DEMANGLING)
1852                 {
1853                   set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1854                 }
1855 #endif
1856             }
1857         }
1858       break;
1859
1860     /* The following symbol types can be ignored.  */
1861     case N_OBJ:                 /* Solaris 2:  Object file dir and name */
1862     /*   N_UNDF:                   Solaris 2:  file separator mark */
1863     /*   N_UNDF: -- we will never encounter it, since we only process one
1864                     file's symbols at once.  */
1865     case N_ENDM:                /* Solaris 2:  End of module */
1866     case N_MAIN:                /* Name of main routine.  */
1867       break;
1868       
1869     /* The following symbol types we don't know how to process.  Handle
1870        them in a "default" way, but complain to people who care.  */
1871     default:
1872     case N_CATCH:               /* Exception handler catcher */
1873     case N_EHDECL:              /* Exception handler name */
1874     case N_PC:                  /* Global symbol in Pascal */
1875     case N_M2C:                 /* Modula-2 compilation unit */
1876     /*   N_MOD2:        overlaps with N_EHDECL */
1877     case N_SCOPE:               /* Modula-2 scope information */
1878     case N_ECOML:               /* End common (local name) */
1879     case N_NBTEXT:              /* Gould Non-Base-Register symbols??? */
1880     case N_NBDATA:
1881     case N_NBBSS:
1882     case N_NBSTS:
1883     case N_NBLCS:
1884       complain (&unknown_symtype_complaint, local_hex_string(type));
1885       if (name)
1886         define_symbol (valu, name, desc, type, objfile);
1887     }
1888
1889   previous_stab_code = type;
1890 }
1891 \f
1892 /* Copy a pending list, used to record the contents of a common
1893    block for later fixup.  */
1894 static struct pending *
1895 copy_pending (beg, begi, end)
1896     struct pending *beg;
1897     int begi;
1898     struct pending *end;
1899 {
1900   struct pending *new = 0;
1901   struct pending *next;
1902
1903   for (next = beg; next != 0 && (next != end || begi < end->nsyms);
1904        next = next->next, begi = 0)
1905     {
1906       register int j;
1907       for (j = begi; j < next->nsyms; j++)
1908         add_symbol_to_list (next->symbol[j], &new);
1909     }
1910   return new;
1911 }
1912 \f
1913 /* Scan and build partial symbols for an ELF symbol file.
1914    This ELF file has already been processed to get its minimal symbols,
1915    and any DWARF symbols that were in it.
1916
1917    This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
1918    rolled into one.
1919
1920    OBJFILE is the object file we are reading symbols from.
1921    ADDR is the address relative to which the symbols are (e.g.
1922    the base address of the text segment).
1923    MAINLINE is true if we are reading the main symbol
1924    table (as opposed to a shared lib or dynamically loaded file).
1925    STABOFFSET and STABSIZE define the location in OBJFILE where the .stab
1926    section exists.
1927    STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
1928    .stabstr section exists.
1929
1930    This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
1931    adjusted for elf details. */
1932
1933 void
1934 elfstab_build_psymtabs (objfile, section_offsets, mainline, 
1935                                staboffset, stabsize,
1936                                stabstroffset, stabstrsize)
1937       struct objfile *objfile;
1938       struct section_offsets *section_offsets;
1939       int mainline;
1940       file_ptr staboffset;
1941       unsigned int stabsize;
1942       file_ptr stabstroffset;
1943       unsigned int stabstrsize;
1944 {
1945   int val;
1946   bfd *sym_bfd = objfile->obfd;
1947   char *name = bfd_get_filename (sym_bfd);
1948   struct dbx_symfile_info *info;
1949
1950   /* There is already a dbx_symfile_info allocated by our caller.
1951      It might even contain some info from the ELF symtab to help us.  */
1952   info = (struct dbx_symfile_info *) objfile->sym_private;
1953
1954   DBX_TEXT_SECT (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
1955   if (!DBX_TEXT_SECT (objfile))
1956     error ("Can't find .text section in symbol file");
1957
1958 #define ELF_STABS_SYMBOL_SIZE   12      /* XXX FIXME XXX */
1959   DBX_SYMBOL_SIZE    (objfile) = ELF_STABS_SYMBOL_SIZE;
1960   DBX_SYMCOUNT       (objfile) = stabsize / DBX_SYMBOL_SIZE (objfile);
1961   DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
1962   DBX_SYMTAB_OFFSET  (objfile) = staboffset;
1963   
1964   if (stabstrsize < 0   /* FIXME:  stabstrsize is unsigned; never true! */
1965       || stabstrsize > bfd_get_size (sym_bfd))
1966     error ("ridiculous string table size: %d bytes", stabstrsize);
1967   DBX_STRINGTAB (objfile) = (char *)
1968     obstack_alloc (&objfile->psymbol_obstack, stabstrsize+1);
1969
1970   /* Now read in the string table in one big gulp.  */
1971
1972   val = bfd_seek (sym_bfd, stabstroffset, L_SET);
1973   if (val < 0)
1974     perror_with_name (name);
1975   val = bfd_read (DBX_STRINGTAB (objfile), stabstrsize, 1, sym_bfd);
1976   if (val != stabstrsize)
1977     perror_with_name (name);
1978
1979   stabsread_new_init ();
1980   buildsym_new_init ();
1981   free_header_files ();
1982   init_header_files ();
1983   install_minimal_symbols (objfile);
1984
1985   processing_acc_compilation = 1;
1986
1987   /* In an elf file, we've already installed the minimal symbols that came
1988      from the elf (non-stab) symbol table, so always act like an
1989      incremental load here. */
1990   dbx_symfile_read (objfile, section_offsets, 0);
1991 }
1992 \f
1993 /* Scan and build partial symbols for a PA symbol file.
1994    This PA file has already been processed to get its minimal symbols.
1995
1996    OBJFILE is the object file we are reading symbols from.
1997    ADDR is the address relative to which the symbols are (e.g.
1998    the base address of the text segment).
1999    MAINLINE is true if we are reading the main symbol
2000    table (as opposed to a shared lib or dynamically loaded file).
2001
2002    */
2003
2004 void
2005 pastab_build_psymtabs (objfile, section_offsets, mainline)
2006      struct objfile *objfile;
2007      struct section_offsets *section_offsets;
2008      int mainline;
2009 {
2010   free_header_files ();
2011   init_header_files ();
2012
2013   /* In a PA file, we've already installed the minimal symbols that came
2014      from the PA (non-stab) symbol table, so always act like an
2015      incremental load here. */
2016
2017   dbx_symfile_read (objfile, section_offsets, mainline);
2018 }
2019 \f
2020 /* Parse the user's idea of an offset for dynamic linking, into our idea
2021    of how to represent it for fast symbol reading.  */
2022
2023 static struct section_offsets *
2024 dbx_symfile_offsets (objfile, addr)
2025      struct objfile *objfile;
2026      CORE_ADDR addr;
2027 {
2028   struct section_offsets *section_offsets;
2029   int i;
2030  
2031   section_offsets = (struct section_offsets *)
2032     obstack_alloc (&objfile -> psymbol_obstack,
2033                    sizeof (struct section_offsets) +
2034                           sizeof (section_offsets->offsets) * (SECT_OFF_MAX-1));
2035
2036   for (i = 0; i < SECT_OFF_MAX; i++)
2037     ANOFFSET (section_offsets, i) = addr;
2038   
2039   return section_offsets;
2040 }
2041 \f
2042 /* Register our willingness to decode symbols for SunOS and a.out and
2043    b.out files handled by BFD... */
2044 static struct sym_fns sunos_sym_fns =
2045 {
2046   "sunOs",              /* sym_name: name or name prefix of BFD target type */
2047   6,                    /* sym_namelen: number of significant sym_name chars */
2048   dbx_new_init,         /* sym_new_init: init anything gbl to entire symtab */
2049   dbx_symfile_init,     /* sym_init: read initial info, setup for sym_read() */
2050   dbx_symfile_read,     /* sym_read: read a symbol file into symtab */
2051   dbx_symfile_finish,   /* sym_finish: finished with file, cleanup */
2052   dbx_symfile_offsets,  /* sym_offsets: parse user's offsets to internal form */
2053   NULL                  /* next: pointer to next struct sym_fns */
2054 };
2055
2056 static struct sym_fns aout_sym_fns =
2057 {
2058   "a.out",              /* sym_name: name or name prefix of BFD target type */
2059   5,                    /* sym_namelen: number of significant sym_name chars */
2060   dbx_new_init,         /* sym_new_init: init anything gbl to entire symtab */
2061   dbx_symfile_init,     /* sym_init: read initial info, setup for sym_read() */
2062   dbx_symfile_read,     /* sym_read: read a symbol file into symtab */
2063   dbx_symfile_finish,   /* sym_finish: finished with file, cleanup */
2064   dbx_symfile_offsets,  /* sym_offsets: parse user's offsets to internal form */
2065   NULL                  /* next: pointer to next struct sym_fns */
2066 };
2067
2068 static struct sym_fns bout_sym_fns =
2069 {
2070   "b.out",              /* sym_name: name or name prefix of BFD target type */
2071   5,                    /* sym_namelen: number of significant sym_name chars */
2072   dbx_new_init,         /* sym_new_init: init anything gbl to entire symtab */
2073   dbx_symfile_init,     /* sym_init: read initial info, setup for sym_read() */
2074   dbx_symfile_read,     /* sym_read: read a symbol file into symtab */
2075   dbx_symfile_finish,   /* sym_finish: finished with file, cleanup */
2076   dbx_symfile_offsets,  /* sym_offsets: parse user's offsets to internal form */
2077   NULL                  /* next: pointer to next struct sym_fns */
2078 };
2079
2080 void
2081 _initialize_dbxread ()
2082 {
2083   add_symtab_fns(&sunos_sym_fns);
2084   add_symtab_fns(&aout_sym_fns);
2085   add_symtab_fns(&bout_sym_fns);
2086 }
This page took 0.139454 seconds and 4 git commands to generate.