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