Use struct bfd_seclet * rather than bfd_seclet_type in prototypes to
[deliverable/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 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.077686 seconds and 4 git commands to generate.