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