]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/dbxread.c
Remove explanatory comments from includes
[thirdparty/binutils-gdb.git] / gdb / dbxread.c
1 /* Read dbx symbol tables and convert to internal format, for GDB.
2 Copyright (C) 1986-2023 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 3 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, see <http://www.gnu.org/licenses/>. */
18
19 /* This module provides three functions: dbx_symfile_init,
20 which initializes to read a symbol file; dbx_new_init, which
21 discards existing cached information when all symbols are being
22 discarded; and dbx_symfile_read, which reads a symbol table
23 from a file.
24
25 dbx_symfile_read only does the minimum work necessary for letting the
26 user "name" things symbolically; it does not read the entire symtab.
27 Instead, it reads the external and static symbols and puts them in partial
28 symbol tables. When more extensive information is requested of a
29 file, the corresponding partial symbol table is mutated into a full
30 fledged symbol table by going back and reading the symbols
31 for real. dbx_psymtab_to_symtab() is the function that does this */
32
33 #include "defs.h"
34
35 #include "gdbsupport/gdb_obstack.h"
36 #include <sys/stat.h>
37 #include "symtab.h"
38 #include "breakpoint.h"
39 #include "target.h"
40 #include "gdbcore.h"
41 #include "libaout.h"
42 #include "filenames.h"
43 #include "objfiles.h"
44 #include "buildsym-legacy.h"
45 #include "stabsread.h"
46 #include "gdb-stabs.h"
47 #include "demangle.h"
48 #include "complaints.h"
49 #include "cp-abi.h"
50 #include "cp-support.h"
51 #include "c-lang.h"
52 #include "psymtab.h"
53 #include "block.h"
54 #include "aout/aout64.h"
55 #include "aout/stab_gnu.h"
56 \f
57
58 /* Key for dbx-associated data. */
59
60 const registry<objfile>::key<dbx_symfile_info> dbx_objfile_data_key;
61
62 /* We put a pointer to this structure in the read_symtab_private field
63 of the psymtab. */
64
65 struct symloc
66 {
67 /* Offset within the file symbol table of first local symbol for this
68 file. */
69
70 int ldsymoff;
71
72 /* Length (in bytes) of the section of the symbol table devoted to
73 this file's symbols (actually, the section bracketed may contain
74 more than just this file's symbols). If ldsymlen is 0, the only
75 reason for this thing's existence is the dependency list. Nothing
76 else will happen when it is read in. */
77
78 int ldsymlen;
79
80 /* The size of each symbol in the symbol file (in external form). */
81
82 int symbol_size;
83
84 /* Further information needed to locate the symbols if they are in
85 an ELF file. */
86
87 int symbol_offset;
88 int string_offset;
89 int file_string_offset;
90 enum language pst_language;
91 };
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 #define PST_LANGUAGE(p) (SYMLOC(p)->pst_language)
101 \f
102
103 /* The objfile we are currently reading. */
104
105 static struct objfile *dbxread_objfile;
106
107 /* Remember what we deduced to be the source language of this psymtab. */
108
109 static enum language psymtab_language = language_unknown;
110
111 /* The BFD for this file -- implicit parameter to next_symbol_text. */
112
113 static bfd *symfile_bfd;
114
115 /* The size of each symbol in the symbol file (in external form).
116 This is set by dbx_symfile_read when building psymtabs, and by
117 dbx_psymtab_to_symtab when building symtabs. */
118
119 static unsigned symbol_size;
120
121 /* This is the offset of the symbol table in the executable file. */
122
123 static unsigned symbol_table_offset;
124
125 /* This is the offset of the string table in the executable file. */
126
127 static unsigned string_table_offset;
128
129 /* For elf+stab executables, the n_strx field is not a simple index
130 into the string table. Instead, each .o file has a base offset in
131 the string table, and the associated symbols contain offsets from
132 this base. The following two variables contain the base offset for
133 the current and next .o files. */
134
135 static unsigned int file_string_table_offset;
136 static unsigned int next_file_string_table_offset;
137
138 /* .o and NLM files contain unrelocated addresses which are based at
139 0. When non-zero, this flag disables some of the special cases for
140 Solaris elf+stab text addresses at location 0. */
141
142 static int symfile_relocatable = 0;
143
144 /* When set, we are processing a .o file compiled by sun acc. This is
145 misnamed; it refers to all stabs-in-elf implementations which use
146 N_UNDF the way Sun does, including Solaris gcc. Hopefully all
147 stabs-in-elf implementations ever invented will choose to be
148 compatible. */
149
150 static unsigned char processing_acc_compilation;
151
152 \f
153 /* The lowest text address we have yet encountered. This is needed
154 because in an a.out file, there is no header field which tells us
155 what address the program is actually going to be loaded at, so we
156 need to make guesses based on the symbols (which *are* relocated to
157 reflect the address it will be loaded at). */
158
159 static unrelocated_addr lowest_text_address;
160
161 /* Non-zero if there is any line number info in the objfile. Prevents
162 dbx_end_psymtab from discarding an otherwise empty psymtab. */
163
164 static int has_line_numbers;
165
166 /* Complaints about the symbols we have encountered. */
167
168 static void
169 unknown_symtype_complaint (const char *arg1)
170 {
171 complaint (_("unknown symbol type %s"), arg1);
172 }
173
174 static void
175 lbrac_mismatch_complaint (int arg1)
176 {
177 complaint (_("N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d"), arg1);
178 }
179
180 static void
181 repeated_header_complaint (const char *arg1, int arg2)
182 {
183 complaint (_("\"repeated\" header file %s not "
184 "previously seen, at symtab pos %d"),
185 arg1, arg2);
186 }
187
188 /* find_text_range --- find start and end of loadable code sections
189
190 The find_text_range function finds the shortest address range that
191 encloses all sections containing executable code, and stores it in
192 objfile's text_addr and text_size members.
193
194 dbx_symfile_read will use this to finish off the partial symbol
195 table, in some cases. */
196
197 static void
198 find_text_range (bfd * sym_bfd, struct objfile *objfile)
199 {
200 asection *sec;
201 int found_any = 0;
202 CORE_ADDR start = 0;
203 CORE_ADDR end = 0;
204
205 for (sec = sym_bfd->sections; sec; sec = sec->next)
206 if (bfd_section_flags (sec) & SEC_CODE)
207 {
208 CORE_ADDR sec_start = bfd_section_vma (sec);
209 CORE_ADDR sec_end = sec_start + bfd_section_size (sec);
210
211 if (found_any)
212 {
213 if (sec_start < start)
214 start = sec_start;
215 if (sec_end > end)
216 end = sec_end;
217 }
218 else
219 {
220 start = sec_start;
221 end = sec_end;
222 }
223
224 found_any = 1;
225 }
226
227 if (!found_any)
228 error (_("Can't find any code sections in symbol file"));
229
230 DBX_TEXT_ADDR (objfile) = start;
231 DBX_TEXT_SIZE (objfile) = end - start;
232 }
233 \f
234
235
236 /* During initial symbol readin, we need to have a structure to keep
237 track of which psymtabs have which bincls in them. This structure
238 is used during readin to setup the list of dependencies within each
239 partial symbol table. */
240
241 struct header_file_location
242 {
243 header_file_location (const char *name_, int instance_,
244 legacy_psymtab *pst_)
245 : name (name_),
246 instance (instance_),
247 pst (pst_)
248 {
249 }
250
251 const char *name; /* Name of header file */
252 int instance; /* See above */
253 legacy_psymtab *pst; /* Partial symtab that has the
254 BINCL/EINCL defs for this file. */
255 };
256
257 /* The list of bincls. */
258 static std::vector<struct header_file_location> *bincl_list;
259
260 /* Local function prototypes. */
261
262 static void read_ofile_symtab (struct objfile *, legacy_psymtab *);
263
264 static void dbx_read_symtab (legacy_psymtab *self,
265 struct objfile *objfile);
266
267 static void dbx_expand_psymtab (legacy_psymtab *, struct objfile *);
268
269 static void read_dbx_symtab (minimal_symbol_reader &, psymtab_storage *,
270 struct objfile *);
271
272 static legacy_psymtab *find_corresponding_bincl_psymtab (const char *,
273 int);
274
275 static const char *dbx_next_symbol_text (struct objfile *);
276
277 static void fill_symbuf (bfd *);
278
279 static void dbx_symfile_init (struct objfile *);
280
281 static void dbx_new_init (struct objfile *);
282
283 static void dbx_symfile_read (struct objfile *, symfile_add_flags);
284
285 static void dbx_symfile_finish (struct objfile *);
286
287 static void record_minimal_symbol (minimal_symbol_reader &,
288 const char *, unrelocated_addr, int,
289 struct objfile *);
290
291 static void add_new_header_file (const char *, int);
292
293 static void add_old_header_file (const char *, int);
294
295 static void add_this_object_header_file (int);
296
297 static legacy_psymtab *start_psymtab (psymtab_storage *, struct objfile *,
298 const char *, unrelocated_addr, int);
299
300 /* Free up old header file tables. */
301
302 void
303 free_header_files (void)
304 {
305 if (this_object_header_files)
306 {
307 xfree (this_object_header_files);
308 this_object_header_files = NULL;
309 }
310 n_allocated_this_object_header_files = 0;
311 }
312
313 /* Allocate new header file tables. */
314
315 void
316 init_header_files (void)
317 {
318 n_allocated_this_object_header_files = 10;
319 this_object_header_files = XNEWVEC (int, 10);
320 }
321
322 /* Add header file number I for this object file
323 at the next successive FILENUM. */
324
325 static void
326 add_this_object_header_file (int i)
327 {
328 if (n_this_object_header_files == n_allocated_this_object_header_files)
329 {
330 n_allocated_this_object_header_files *= 2;
331 this_object_header_files
332 = (int *) xrealloc ((char *) this_object_header_files,
333 n_allocated_this_object_header_files * sizeof (int));
334 }
335
336 this_object_header_files[n_this_object_header_files++] = i;
337 }
338
339 /* Add to this file an "old" header file, one already seen in
340 a previous object file. NAME is the header file's name.
341 INSTANCE is its instance code, to select among multiple
342 symbol tables for the same header file. */
343
344 static void
345 add_old_header_file (const char *name, int instance)
346 {
347 struct header_file *p = HEADER_FILES (dbxread_objfile);
348 int i;
349
350 for (i = 0; i < N_HEADER_FILES (dbxread_objfile); i++)
351 if (filename_cmp (p[i].name, name) == 0 && instance == p[i].instance)
352 {
353 add_this_object_header_file (i);
354 return;
355 }
356 repeated_header_complaint (name, symnum);
357 }
358
359 /* Add to this file a "new" header file: definitions for its types follow.
360 NAME is the header file's name.
361 Most often this happens only once for each distinct header file,
362 but not necessarily. If it happens more than once, INSTANCE has
363 a different value each time, and references to the header file
364 use INSTANCE values to select among them.
365
366 dbx output contains "begin" and "end" markers for each new header file,
367 but at this level we just need to know which files there have been;
368 so we record the file when its "begin" is seen and ignore the "end". */
369
370 static void
371 add_new_header_file (const char *name, int instance)
372 {
373 int i;
374 struct header_file *hfile;
375
376 /* Make sure there is room for one more header file. */
377
378 i = N_ALLOCATED_HEADER_FILES (dbxread_objfile);
379
380 if (N_HEADER_FILES (dbxread_objfile) == i)
381 {
382 if (i == 0)
383 {
384 N_ALLOCATED_HEADER_FILES (dbxread_objfile) = 10;
385 HEADER_FILES (dbxread_objfile) = (struct header_file *)
386 xmalloc (10 * sizeof (struct header_file));
387 }
388 else
389 {
390 i *= 2;
391 N_ALLOCATED_HEADER_FILES (dbxread_objfile) = i;
392 HEADER_FILES (dbxread_objfile) = (struct header_file *)
393 xrealloc ((char *) HEADER_FILES (dbxread_objfile),
394 (i * sizeof (struct header_file)));
395 }
396 }
397
398 /* Create an entry for this header file. */
399
400 i = N_HEADER_FILES (dbxread_objfile)++;
401 hfile = HEADER_FILES (dbxread_objfile) + i;
402 hfile->name = xstrdup (name);
403 hfile->instance = instance;
404 hfile->length = 10;
405 hfile->vector = XCNEWVEC (struct type *, 10);
406
407 add_this_object_header_file (i);
408 }
409
410 #if 0
411 static struct type **
412 explicit_lookup_type (int real_filenum, int index)
413 {
414 struct header_file *f = &HEADER_FILES (dbxread_objfile)[real_filenum];
415
416 if (index >= f->length)
417 {
418 f->length *= 2;
419 f->vector = (struct type **)
420 xrealloc (f->vector, f->length * sizeof (struct type *));
421 memset (&f->vector[f->length / 2],
422 '\0', f->length * sizeof (struct type *) / 2);
423 }
424 return &f->vector[index];
425 }
426 #endif
427 \f
428 static void
429 record_minimal_symbol (minimal_symbol_reader &reader,
430 const char *name, unrelocated_addr address, int type,
431 struct objfile *objfile)
432 {
433 enum minimal_symbol_type ms_type;
434 int section;
435
436 switch (type)
437 {
438 case N_TEXT | N_EXT:
439 ms_type = mst_text;
440 section = SECT_OFF_TEXT (objfile);
441 break;
442 case N_DATA | N_EXT:
443 ms_type = mst_data;
444 section = SECT_OFF_DATA (objfile);
445 break;
446 case N_BSS | N_EXT:
447 ms_type = mst_bss;
448 section = SECT_OFF_BSS (objfile);
449 break;
450 case N_ABS | N_EXT:
451 ms_type = mst_abs;
452 section = -1;
453 break;
454 #ifdef N_SETV
455 case N_SETV | N_EXT:
456 ms_type = mst_data;
457 section = SECT_OFF_DATA (objfile);
458 break;
459 case N_SETV:
460 /* I don't think this type actually exists; since a N_SETV is the result
461 of going over many .o files, it doesn't make sense to have one
462 file local. */
463 ms_type = mst_file_data;
464 section = SECT_OFF_DATA (objfile);
465 break;
466 #endif
467 case N_TEXT:
468 case N_NBTEXT:
469 case N_FN:
470 case N_FN_SEQ:
471 ms_type = mst_file_text;
472 section = SECT_OFF_TEXT (objfile);
473 break;
474 case N_DATA:
475 ms_type = mst_file_data;
476
477 /* Check for __DYNAMIC, which is used by Sun shared libraries.
478 Record it as global even if it's local, not global, so
479 lookup_minimal_symbol can find it. We don't check symbol_leading_char
480 because for SunOS4 it always is '_'. */
481 if (strcmp ("__DYNAMIC", name) == 0)
482 ms_type = mst_data;
483
484 /* Same with virtual function tables, both global and static. */
485 {
486 const char *tempstring = name;
487
488 if (*tempstring != '\0'
489 && *tempstring == bfd_get_symbol_leading_char (objfile->obfd.get ()))
490 ++tempstring;
491 if (is_vtable_name (tempstring))
492 ms_type = mst_data;
493 }
494 section = SECT_OFF_DATA (objfile);
495 break;
496 case N_BSS:
497 ms_type = mst_file_bss;
498 section = SECT_OFF_BSS (objfile);
499 break;
500 default:
501 ms_type = mst_unknown;
502 section = -1;
503 break;
504 }
505
506 if ((ms_type == mst_file_text || ms_type == mst_text)
507 && address < lowest_text_address)
508 lowest_text_address = address;
509
510 reader.record_with_info (name, address, ms_type, section);
511 }
512 \f
513 /* Scan and build partial symbols for a symbol file.
514 We have been initialized by a call to dbx_symfile_init, which
515 put all the relevant info into a "struct dbx_symfile_info",
516 hung off the objfile structure. */
517
518 static void
519 dbx_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
520 {
521 bfd *sym_bfd;
522 int val;
523
524 sym_bfd = objfile->obfd.get ();
525
526 /* .o and .nlm files are relocatables with text, data and bss segs based at
527 0. This flag disables special (Solaris stabs-in-elf only) fixups for
528 symbols with a value of 0. */
529
530 symfile_relocatable = bfd_get_file_flags (sym_bfd) & HAS_RELOC;
531
532 val = bfd_seek (sym_bfd, DBX_SYMTAB_OFFSET (objfile), SEEK_SET);
533 if (val < 0)
534 perror_with_name (objfile_name (objfile));
535
536 symbol_size = DBX_SYMBOL_SIZE (objfile);
537 symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
538
539 scoped_free_pendings free_pending;
540
541 minimal_symbol_reader reader (objfile);
542
543 /* Read stabs data from executable file and define symbols. */
544
545 psymbol_functions *psf = new psymbol_functions ();
546 psymtab_storage *partial_symtabs = psf->get_partial_symtabs ().get ();
547 objfile->qf.emplace_front (psf);
548 read_dbx_symtab (reader, partial_symtabs, objfile);
549
550 /* Install any minimal symbols that have been collected as the current
551 minimal symbols for this objfile. */
552
553 reader.install ();
554 }
555
556 /* Initialize anything that needs initializing when a completely new
557 symbol file is specified (not just adding some symbols from another
558 file, e.g. a shared library). */
559
560 static void
561 dbx_new_init (struct objfile *ignore)
562 {
563 stabsread_new_init ();
564 init_header_files ();
565 }
566
567
568 /* dbx_symfile_init ()
569 is the dbx-specific initialization routine for reading symbols.
570 It is passed a struct objfile which contains, among other things,
571 the BFD for the file whose symbols are being read, and a slot for a pointer
572 to "private data" which we fill with goodies.
573
574 We read the string table into malloc'd space and stash a pointer to it.
575
576 Since BFD doesn't know how to read debug symbols in a format-independent
577 way (and may never do so...), we have to do it ourselves. We will never
578 be called unless this is an a.out (or very similar) file.
579 FIXME, there should be a cleaner peephole into the BFD environment here. */
580
581 #define DBX_STRINGTAB_SIZE_SIZE sizeof(long) /* FIXME */
582
583 static void
584 dbx_symfile_init (struct objfile *objfile)
585 {
586 int val;
587 bfd *sym_bfd = objfile->obfd.get ();
588 const char *name = bfd_get_filename (sym_bfd);
589 asection *text_sect;
590 unsigned char size_temp[DBX_STRINGTAB_SIZE_SIZE];
591
592 /* Allocate struct to keep track of the symfile. */
593 dbx_objfile_data_key.emplace (objfile);
594
595 DBX_TEXT_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
596 DBX_DATA_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".data");
597 DBX_BSS_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".bss");
598
599 /* FIXME POKING INSIDE BFD DATA STRUCTURES. */
600 #define STRING_TABLE_OFFSET (sym_bfd->origin + obj_str_filepos (sym_bfd))
601 #define SYMBOL_TABLE_OFFSET (sym_bfd->origin + obj_sym_filepos (sym_bfd))
602
603 /* FIXME POKING INSIDE BFD DATA STRUCTURES. */
604
605 text_sect = bfd_get_section_by_name (sym_bfd, ".text");
606 if (!text_sect)
607 error (_("Can't find .text section in symbol file"));
608 DBX_TEXT_ADDR (objfile) = bfd_section_vma (text_sect);
609 DBX_TEXT_SIZE (objfile) = bfd_section_size (text_sect);
610
611 DBX_SYMBOL_SIZE (objfile) = obj_symbol_entry_size (sym_bfd);
612 DBX_SYMCOUNT (objfile) = bfd_get_symcount (sym_bfd);
613 DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
614
615 /* Read the string table and stash it away in the objfile_obstack.
616 When we blow away the objfile the string table goes away as well.
617 Note that gdb used to use the results of attempting to malloc the
618 string table, based on the size it read, as a form of sanity check
619 for botched byte swapping, on the theory that a byte swapped string
620 table size would be so totally bogus that the malloc would fail. Now
621 that we put in on the objfile_obstack, we can't do this since gdb gets
622 a fatal error (out of virtual memory) if the size is bogus. We can
623 however at least check to see if the size is less than the size of
624 the size field itself, or larger than the size of the entire file.
625 Note that all valid string tables have a size greater than zero, since
626 the bytes used to hold the size are included in the count. */
627
628 if (STRING_TABLE_OFFSET == 0)
629 {
630 /* It appears that with the existing bfd code, STRING_TABLE_OFFSET
631 will never be zero, even when there is no string table. This
632 would appear to be a bug in bfd. */
633 DBX_STRINGTAB_SIZE (objfile) = 0;
634 DBX_STRINGTAB (objfile) = NULL;
635 }
636 else
637 {
638 val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
639 if (val < 0)
640 perror_with_name (name);
641
642 memset (size_temp, 0, sizeof (size_temp));
643 val = bfd_read (size_temp, sizeof (size_temp), sym_bfd);
644 if (val < 0)
645 {
646 perror_with_name (name);
647 }
648 else if (val == 0)
649 {
650 /* With the existing bfd code, STRING_TABLE_OFFSET will be set to
651 EOF if there is no string table, and attempting to read the size
652 from EOF will read zero bytes. */
653 DBX_STRINGTAB_SIZE (objfile) = 0;
654 DBX_STRINGTAB (objfile) = NULL;
655 }
656 else
657 {
658 /* Read some data that would appear to be the string table size.
659 If there really is a string table, then it is probably the right
660 size. Byteswap if necessary and validate the size. Note that
661 the minimum is DBX_STRINGTAB_SIZE_SIZE. If we just read some
662 random data that happened to be at STRING_TABLE_OFFSET, because
663 bfd can't tell us there is no string table, the sanity checks may
664 or may not catch this. */
665 DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
666
667 if (DBX_STRINGTAB_SIZE (objfile) < sizeof (size_temp)
668 || DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
669 error (_("ridiculous string table size (%d bytes)."),
670 DBX_STRINGTAB_SIZE (objfile));
671
672 DBX_STRINGTAB (objfile) =
673 (char *) obstack_alloc (&objfile->objfile_obstack,
674 DBX_STRINGTAB_SIZE (objfile));
675 OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile));
676
677 /* Now read in the string table in one big gulp. */
678
679 val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
680 if (val < 0)
681 perror_with_name (name);
682 val = bfd_read (DBX_STRINGTAB (objfile),
683 DBX_STRINGTAB_SIZE (objfile),
684 sym_bfd);
685 if (val != DBX_STRINGTAB_SIZE (objfile))
686 perror_with_name (name);
687 }
688 }
689 }
690
691 /* Perform any local cleanups required when we are done with a particular
692 objfile. I.E, we are in the process of discarding all symbol information
693 for an objfile, freeing up all memory held for it, and unlinking the
694 objfile struct from the global list of known objfiles. */
695
696 static void
697 dbx_symfile_finish (struct objfile *objfile)
698 {
699 free_header_files ();
700 }
701
702 dbx_symfile_info::~dbx_symfile_info ()
703 {
704 if (header_files != NULL)
705 {
706 int i = n_header_files;
707 struct header_file *hfiles = header_files;
708
709 while (--i >= 0)
710 {
711 xfree (hfiles[i].name);
712 xfree (hfiles[i].vector);
713 }
714 xfree (hfiles);
715 }
716 }
717
718 \f
719
720 /* Buffer for reading the symbol table entries. */
721 static struct external_nlist symbuf[4096];
722 static int symbuf_idx;
723 static int symbuf_end;
724
725 /* Name of last function encountered. Used in Solaris to approximate
726 object file boundaries. */
727 static const char *last_function_name;
728
729 /* The address in memory of the string table of the object file we are
730 reading (which might not be the "main" object file, but might be a
731 shared library or some other dynamically loaded thing). This is
732 set by read_dbx_symtab when building psymtabs, and by
733 read_ofile_symtab when building symtabs, and is used only by
734 next_symbol_text. FIXME: If that is true, we don't need it when
735 building psymtabs, right? */
736 static char *stringtab_global;
737
738 /* These variables are used to control fill_symbuf when the stabs
739 symbols are not contiguous (as may be the case when a COFF file is
740 linked using --split-by-reloc). */
741 static const std::vector<asection *> *symbuf_sections;
742 static size_t sect_idx;
743 static unsigned int symbuf_left;
744 static unsigned int symbuf_read;
745
746 /* This variable stores a global stabs buffer, if we read stabs into
747 memory in one chunk in order to process relocations. */
748 static bfd_byte *stabs_data;
749
750 /* Refill the symbol table input buffer
751 and set the variables that control fetching entries from it.
752 Reports an error if no data available.
753 This function can read past the end of the symbol table
754 (into the string table) but this does no harm. */
755
756 static void
757 fill_symbuf (bfd *sym_bfd)
758 {
759 unsigned int count;
760 int nbytes;
761
762 if (stabs_data)
763 {
764 nbytes = sizeof (symbuf);
765 if (nbytes > symbuf_left)
766 nbytes = symbuf_left;
767 memcpy (symbuf, stabs_data + symbuf_read, nbytes);
768 }
769 else if (symbuf_sections == NULL)
770 {
771 count = sizeof (symbuf);
772 nbytes = bfd_read (symbuf, count, sym_bfd);
773 }
774 else
775 {
776 if (symbuf_left <= 0)
777 {
778 file_ptr filepos = (*symbuf_sections)[sect_idx]->filepos;
779
780 if (bfd_seek (sym_bfd, filepos, SEEK_SET) != 0)
781 perror_with_name (bfd_get_filename (sym_bfd));
782 symbuf_left = bfd_section_size ((*symbuf_sections)[sect_idx]);
783 symbol_table_offset = filepos - symbuf_read;
784 ++sect_idx;
785 }
786
787 count = symbuf_left;
788 if (count > sizeof (symbuf))
789 count = sizeof (symbuf);
790 nbytes = bfd_read (symbuf, count, sym_bfd);
791 }
792
793 if (nbytes < 0)
794 perror_with_name (bfd_get_filename (sym_bfd));
795 else if (nbytes == 0)
796 error (_("Premature end of file reading symbol table"));
797 symbuf_end = nbytes / symbol_size;
798 symbuf_idx = 0;
799 symbuf_left -= nbytes;
800 symbuf_read += nbytes;
801 }
802
803 static void
804 stabs_seek (int sym_offset)
805 {
806 if (stabs_data)
807 {
808 symbuf_read += sym_offset;
809 symbuf_left -= sym_offset;
810 }
811 else
812 if (bfd_seek (symfile_bfd, sym_offset, SEEK_CUR) != 0)
813 perror_with_name (bfd_get_filename (symfile_bfd));
814 }
815
816 #define INTERNALIZE_SYMBOL(intern, extern, abfd) \
817 { \
818 (intern).n_strx = bfd_h_get_32 (abfd, (extern)->e_strx); \
819 (intern).n_type = bfd_h_get_8 (abfd, (extern)->e_type); \
820 (intern).n_other = 0; \
821 (intern).n_desc = bfd_h_get_16 (abfd, (extern)->e_desc); \
822 if (bfd_get_sign_extend_vma (abfd)) \
823 (intern).n_value = bfd_h_get_signed_32 (abfd, (extern)->e_value); \
824 else \
825 (intern).n_value = bfd_h_get_32 (abfd, (extern)->e_value); \
826 }
827
828 /* Invariant: The symbol pointed to by symbuf_idx is the first one
829 that hasn't been swapped. Swap the symbol at the same time
830 that symbuf_idx is incremented. */
831
832 /* dbx allows the text of a symbol name to be continued into the
833 next symbol name! When such a continuation is encountered
834 (a \ at the end of the text of a name)
835 call this function to get the continuation. */
836
837 static const char *
838 dbx_next_symbol_text (struct objfile *objfile)
839 {
840 struct internal_nlist nlist;
841
842 if (symbuf_idx == symbuf_end)
843 fill_symbuf (symfile_bfd);
844
845 symnum++;
846 INTERNALIZE_SYMBOL (nlist, &symbuf[symbuf_idx], symfile_bfd);
847 OBJSTAT (objfile, n_stabs++);
848
849 symbuf_idx++;
850
851 return nlist.n_strx + stringtab_global + file_string_table_offset;
852 }
853 \f
854
855 /* Given a name, value pair, find the corresponding
856 bincl in the list. Return the partial symtab associated
857 with that header_file_location. */
858
859 static legacy_psymtab *
860 find_corresponding_bincl_psymtab (const char *name, int instance)
861 {
862 for (const header_file_location &bincl : *bincl_list)
863 if (bincl.instance == instance
864 && strcmp (name, bincl.name) == 0)
865 return bincl.pst;
866
867 repeated_header_complaint (name, symnum);
868 return (legacy_psymtab *) 0;
869 }
870
871 /* Set namestring based on nlist. If the string table index is invalid,
872 give a fake name, and print a single error message per symbol file read,
873 rather than abort the symbol reading or flood the user with messages. */
874
875 static const char *
876 set_namestring (struct objfile *objfile, const struct internal_nlist *nlist)
877 {
878 const char *namestring;
879
880 if (nlist->n_strx + file_string_table_offset
881 >= DBX_STRINGTAB_SIZE (objfile)
882 || nlist->n_strx + file_string_table_offset < nlist->n_strx)
883 {
884 complaint (_("bad string table offset in symbol %d"),
885 symnum);
886 namestring = "<bad string table offset>";
887 }
888 else
889 namestring = (nlist->n_strx + file_string_table_offset
890 + DBX_STRINGTAB (objfile));
891 return namestring;
892 }
893
894 static struct bound_minimal_symbol
895 find_stab_function (const char *namestring, const char *filename,
896 struct objfile *objfile)
897 {
898 struct bound_minimal_symbol msym;
899 int n;
900
901 const char *colon = strchr (namestring, ':');
902 if (colon == NULL)
903 n = 0;
904 else
905 n = colon - namestring;
906
907 char *p = (char *) alloca (n + 2);
908 strncpy (p, namestring, n);
909 p[n] = 0;
910
911 msym = lookup_minimal_symbol (p, filename, objfile);
912 if (msym.minsym == NULL)
913 {
914 /* Sun Fortran appends an underscore to the minimal symbol name,
915 try again with an appended underscore if the minimal symbol
916 was not found. */
917 p[n] = '_';
918 p[n + 1] = 0;
919 msym = lookup_minimal_symbol (p, filename, objfile);
920 }
921
922 if (msym.minsym == NULL && filename != NULL)
923 {
924 /* Try again without the filename. */
925 p[n] = 0;
926 msym = lookup_minimal_symbol (p, NULL, objfile);
927 }
928 if (msym.minsym == NULL && filename != NULL)
929 {
930 /* And try again for Sun Fortran, but without the filename. */
931 p[n] = '_';
932 p[n + 1] = 0;
933 msym = lookup_minimal_symbol (p, NULL, objfile);
934 }
935
936 return msym;
937 }
938
939 static void
940 function_outside_compilation_unit_complaint (const char *arg1)
941 {
942 complaint (_("function `%s' appears to be defined "
943 "outside of all compilation units"),
944 arg1);
945 }
946
947 /* Setup partial_symtab's describing each source file for which
948 debugging information is available. */
949
950 static void
951 read_dbx_symtab (minimal_symbol_reader &reader,
952 psymtab_storage *partial_symtabs,
953 struct objfile *objfile)
954 {
955 struct gdbarch *gdbarch = objfile->arch ();
956 struct external_nlist *bufp = 0; /* =0 avoids gcc -Wall glitch. */
957 struct internal_nlist nlist;
958 CORE_ADDR text_addr;
959 int text_size;
960 const char *sym_name;
961 int sym_len;
962
963 const char *namestring;
964 int nsl;
965 int past_first_source_file = 0;
966 CORE_ADDR last_function_start = 0;
967 bfd *abfd;
968 int textlow_not_set;
969 int data_sect_index;
970
971 /* Current partial symtab. */
972 legacy_psymtab *pst;
973
974 /* List of current psymtab's include files. */
975 const char **psymtab_include_list;
976 int includes_allocated;
977 int includes_used;
978
979 /* Index within current psymtab dependency list. */
980 legacy_psymtab **dependency_list;
981 int dependencies_used, dependencies_allocated;
982
983 text_addr = DBX_TEXT_ADDR (objfile);
984 text_size = DBX_TEXT_SIZE (objfile);
985
986 /* FIXME. We probably want to change stringtab_global rather than add this
987 while processing every symbol entry. FIXME. */
988 file_string_table_offset = 0;
989 next_file_string_table_offset = 0;
990
991 stringtab_global = DBX_STRINGTAB (objfile);
992
993 pst = (legacy_psymtab *) 0;
994
995 includes_allocated = 30;
996 includes_used = 0;
997 psymtab_include_list = (const char **) alloca (includes_allocated *
998 sizeof (const char *));
999
1000 dependencies_allocated = 30;
1001 dependencies_used = 0;
1002 dependency_list =
1003 (legacy_psymtab **) alloca (dependencies_allocated *
1004 sizeof (legacy_psymtab *));
1005
1006 /* Init bincl list */
1007 std::vector<struct header_file_location> bincl_storage;
1008 scoped_restore restore_bincl_global
1009 = make_scoped_restore (&bincl_list, &bincl_storage);
1010
1011 set_last_source_file (NULL);
1012
1013 lowest_text_address = (unrelocated_addr) -1;
1014
1015 symfile_bfd = objfile->obfd.get (); /* For next_text_symbol. */
1016 abfd = objfile->obfd.get ();
1017 symbuf_end = symbuf_idx = 0;
1018 next_symbol_text_func = dbx_next_symbol_text;
1019 textlow_not_set = 1;
1020 has_line_numbers = 0;
1021
1022 /* FIXME: jimb/2003-09-12: We don't apply the right section's offset
1023 to global and static variables. The stab for a global or static
1024 variable doesn't give us any indication of which section it's in,
1025 so we can't tell immediately which offset in
1026 objfile->section_offsets we should apply to the variable's
1027 address.
1028
1029 We could certainly find out which section contains the variable
1030 by looking up the variable's unrelocated address with
1031 find_pc_section, but that would be expensive; this is the
1032 function that constructs the partial symbol tables by examining
1033 every symbol in the entire executable, and it's
1034 performance-critical. So that expense would not be welcome. I'm
1035 not sure what to do about this at the moment.
1036
1037 What we have done for years is to simply assume that the .data
1038 section's offset is appropriate for all global and static
1039 variables. Recently, this was expanded to fall back to the .bss
1040 section's offset if there is no .data section, and then to the
1041 .rodata section's offset. */
1042 data_sect_index = objfile->sect_index_data;
1043 if (data_sect_index == -1)
1044 data_sect_index = SECT_OFF_BSS (objfile);
1045 if (data_sect_index == -1)
1046 data_sect_index = SECT_OFF_RODATA (objfile);
1047
1048 /* If data_sect_index is still -1, that's okay. It's perfectly fine
1049 for the file to have no .data, no .bss, and no .text at all, if
1050 it also has no global or static variables. */
1051
1052 for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++)
1053 {
1054 /* Get the symbol for this run and pull out some info. */
1055 QUIT; /* Allow this to be interruptable. */
1056 if (symbuf_idx == symbuf_end)
1057 fill_symbuf (abfd);
1058 bufp = &symbuf[symbuf_idx++];
1059
1060 /*
1061 * Special case to speed up readin.
1062 */
1063 if (bfd_h_get_8 (abfd, bufp->e_type) == N_SLINE)
1064 {
1065 has_line_numbers = 1;
1066 continue;
1067 }
1068
1069 INTERNALIZE_SYMBOL (nlist, bufp, abfd);
1070 OBJSTAT (objfile, n_stabs++);
1071
1072 /* Ok. There is a lot of code duplicated in the rest of this
1073 switch statement (for efficiency reasons). Since I don't
1074 like duplicating code, I will do my penance here, and
1075 describe the code which is duplicated:
1076
1077 *) The assignment to namestring.
1078 *) The call to strchr.
1079 *) The addition of a partial symbol the two partial
1080 symbol lists. This last is a large section of code, so
1081 I've embedded it in the following macro. */
1082
1083 switch (nlist.n_type)
1084 {
1085 /*
1086 * Standard, external, non-debugger, symbols
1087 */
1088
1089 case N_TEXT | N_EXT:
1090 case N_NBTEXT | N_EXT:
1091 goto record_it;
1092
1093 case N_DATA | N_EXT:
1094 case N_NBDATA | N_EXT:
1095 goto record_it;
1096
1097 case N_BSS:
1098 case N_BSS | N_EXT:
1099 case N_NBBSS | N_EXT:
1100 case N_SETV | N_EXT: /* FIXME, is this in BSS? */
1101 goto record_it;
1102
1103 case N_ABS | N_EXT:
1104 record_it:
1105 namestring = set_namestring (objfile, &nlist);
1106
1107 record_minimal_symbol (reader, namestring,
1108 unrelocated_addr (nlist.n_value),
1109 nlist.n_type, objfile); /* Always */
1110 continue;
1111
1112 /* Standard, local, non-debugger, symbols. */
1113
1114 case N_NBTEXT:
1115
1116 /* We need to be able to deal with both N_FN or N_TEXT,
1117 because we have no way of knowing whether the sys-supplied ld
1118 or GNU ld was used to make the executable. Sequents throw
1119 in another wrinkle -- they renumbered N_FN. */
1120
1121 case N_FN:
1122 case N_FN_SEQ:
1123 case N_TEXT:
1124 namestring = set_namestring (objfile, &nlist);
1125
1126 if ((namestring[0] == '-' && namestring[1] == 'l')
1127 || (namestring[(nsl = strlen (namestring)) - 1] == 'o'
1128 && namestring[nsl - 2] == '.'))
1129 {
1130 unrelocated_addr unrel_val = unrelocated_addr (nlist.n_value);
1131
1132 if (past_first_source_file && pst
1133 /* The gould NP1 uses low values for .o and -l symbols
1134 which are not the address. */
1135 && unrel_val >= pst->unrelocated_text_low ())
1136 {
1137 dbx_end_psymtab (objfile, partial_symtabs,
1138 pst, psymtab_include_list,
1139 includes_used, symnum * symbol_size,
1140 unrel_val > pst->unrelocated_text_high ()
1141 ? unrel_val : pst->unrelocated_text_high (),
1142 dependency_list, dependencies_used,
1143 textlow_not_set);
1144 pst = (legacy_psymtab *) 0;
1145 includes_used = 0;
1146 dependencies_used = 0;
1147 has_line_numbers = 0;
1148 }
1149 else
1150 past_first_source_file = 1;
1151 }
1152 else
1153 goto record_it;
1154 continue;
1155
1156 case N_DATA:
1157 goto record_it;
1158
1159 case N_UNDF | N_EXT:
1160 /* The case (nlist.n_value != 0) is a "Fortran COMMON" symbol.
1161 We used to rely on the target to tell us whether it knows
1162 where the symbol has been relocated to, but none of the
1163 target implementations actually provided that operation.
1164 So we just ignore the symbol, the same way we would do if
1165 we had a target-side symbol lookup which returned no match.
1166
1167 All other symbols (with nlist.n_value == 0), are really
1168 undefined, and so we ignore them too. */
1169 continue;
1170
1171 case N_UNDF:
1172 if (processing_acc_compilation && nlist.n_strx == 1)
1173 {
1174 /* Deal with relative offsets in the string table
1175 used in ELF+STAB under Solaris. If we want to use the
1176 n_strx field, which contains the name of the file,
1177 we must adjust file_string_table_offset *before* calling
1178 set_namestring(). */
1179 past_first_source_file = 1;
1180 file_string_table_offset = next_file_string_table_offset;
1181 next_file_string_table_offset =
1182 file_string_table_offset + nlist.n_value;
1183 if (next_file_string_table_offset < file_string_table_offset)
1184 error (_("string table offset backs up at %d"), symnum);
1185 /* FIXME -- replace error() with complaint. */
1186 continue;
1187 }
1188 continue;
1189
1190 /* Lots of symbol types we can just ignore. */
1191
1192 case N_ABS:
1193 case N_NBDATA:
1194 case N_NBBSS:
1195 continue;
1196
1197 /* Keep going . . . */
1198
1199 /*
1200 * Special symbol types for GNU
1201 */
1202 case N_INDR:
1203 case N_INDR | N_EXT:
1204 case N_SETA:
1205 case N_SETA | N_EXT:
1206 case N_SETT:
1207 case N_SETT | N_EXT:
1208 case N_SETD:
1209 case N_SETD | N_EXT:
1210 case N_SETB:
1211 case N_SETB | N_EXT:
1212 case N_SETV:
1213 continue;
1214
1215 /*
1216 * Debugger symbols
1217 */
1218
1219 case N_SO:
1220 {
1221 CORE_ADDR valu;
1222 static int prev_so_symnum = -10;
1223 static int first_so_symnum;
1224 const char *p;
1225 static const char *dirname_nso;
1226 int prev_textlow_not_set;
1227
1228 valu = nlist.n_value;
1229
1230 prev_textlow_not_set = textlow_not_set;
1231
1232 /* A zero value is probably an indication for the SunPRO 3.0
1233 compiler. dbx_end_psymtab explicitly tests for zero, so
1234 don't relocate it. */
1235
1236 if (nlist.n_value == 0
1237 && gdbarch_sofun_address_maybe_missing (gdbarch))
1238 {
1239 textlow_not_set = 1;
1240 valu = 0;
1241 }
1242 else
1243 textlow_not_set = 0;
1244
1245 past_first_source_file = 1;
1246
1247 if (prev_so_symnum != symnum - 1)
1248 { /* Here if prev stab wasn't N_SO. */
1249 first_so_symnum = symnum;
1250
1251 if (pst)
1252 {
1253 unrelocated_addr unrel_value = unrelocated_addr (valu);
1254 dbx_end_psymtab (objfile, partial_symtabs,
1255 pst, psymtab_include_list,
1256 includes_used, symnum * symbol_size,
1257 unrel_value > pst->unrelocated_text_high ()
1258 ? unrel_value
1259 : pst->unrelocated_text_high (),
1260 dependency_list, dependencies_used,
1261 prev_textlow_not_set);
1262 pst = (legacy_psymtab *) 0;
1263 includes_used = 0;
1264 dependencies_used = 0;
1265 has_line_numbers = 0;
1266 }
1267 }
1268
1269 prev_so_symnum = symnum;
1270
1271 /* End the current partial symtab and start a new one. */
1272
1273 namestring = set_namestring (objfile, &nlist);
1274
1275 /* Null name means end of .o file. Don't start a new one. */
1276 if (*namestring == '\000')
1277 continue;
1278
1279 /* Some compilers (including gcc) emit a pair of initial N_SOs.
1280 The first one is a directory name; the second the file name.
1281 If pst exists, is empty, and has a filename ending in '/',
1282 we assume the previous N_SO was a directory name. */
1283
1284 p = lbasename (namestring);
1285 if (p != namestring && *p == '\000')
1286 {
1287 /* Save the directory name SOs locally, then save it into
1288 the psymtab when it's created below. */
1289 dirname_nso = namestring;
1290 continue;
1291 }
1292
1293 /* Some other compilers (C++ ones in particular) emit useless
1294 SOs for non-existant .c files. We ignore all subsequent SOs
1295 that immediately follow the first. */
1296
1297 if (!pst)
1298 {
1299 pst = start_psymtab (partial_symtabs, objfile,
1300 namestring,
1301 unrelocated_addr (valu),
1302 first_so_symnum * symbol_size);
1303 pst->dirname = dirname_nso;
1304 dirname_nso = NULL;
1305 }
1306 continue;
1307 }
1308
1309 case N_BINCL:
1310 {
1311 enum language tmp_language;
1312
1313 /* Add this bincl to the bincl_list for future EXCLs. No
1314 need to save the string; it'll be around until
1315 read_dbx_symtab function returns. */
1316
1317 namestring = set_namestring (objfile, &nlist);
1318 tmp_language = deduce_language_from_filename (namestring);
1319
1320 /* Only change the psymtab's language if we've learned
1321 something useful (eg. tmp_language is not language_unknown).
1322 In addition, to match what start_subfile does, never change
1323 from C++ to C. */
1324 if (tmp_language != language_unknown
1325 && (tmp_language != language_c
1326 || psymtab_language != language_cplus))
1327 psymtab_language = tmp_language;
1328
1329 if (pst == NULL)
1330 {
1331 /* FIXME: we should not get here without a PST to work on.
1332 Attempt to recover. */
1333 complaint (_("N_BINCL %s not in entries for "
1334 "any file, at symtab pos %d"),
1335 namestring, symnum);
1336 continue;
1337 }
1338 bincl_list->emplace_back (namestring, nlist.n_value, pst);
1339
1340 /* Mark down an include file in the current psymtab. */
1341
1342 goto record_include_file;
1343 }
1344
1345 case N_SOL:
1346 {
1347 enum language tmp_language;
1348
1349 /* Mark down an include file in the current psymtab. */
1350 namestring = set_namestring (objfile, &nlist);
1351 tmp_language = deduce_language_from_filename (namestring);
1352
1353 /* Only change the psymtab's language if we've learned
1354 something useful (eg. tmp_language is not language_unknown).
1355 In addition, to match what start_subfile does, never change
1356 from C++ to C. */
1357 if (tmp_language != language_unknown
1358 && (tmp_language != language_c
1359 || psymtab_language != language_cplus))
1360 psymtab_language = tmp_language;
1361
1362 /* In C++, one may expect the same filename to come round many
1363 times, when code is coming alternately from the main file
1364 and from inline functions in other files. So I check to see
1365 if this is a file we've seen before -- either the main
1366 source file, or a previously included file.
1367
1368 This seems to be a lot of time to be spending on N_SOL, but
1369 things like "break c-exp.y:435" need to work (I
1370 suppose the psymtab_include_list could be hashed or put
1371 in a binary tree, if profiling shows this is a major hog). */
1372 if (pst && filename_cmp (namestring, pst->filename) == 0)
1373 continue;
1374 {
1375 int i;
1376
1377 for (i = 0; i < includes_used; i++)
1378 if (filename_cmp (namestring, psymtab_include_list[i]) == 0)
1379 {
1380 i = -1;
1381 break;
1382 }
1383 if (i == -1)
1384 continue;
1385 }
1386
1387 record_include_file:
1388
1389 psymtab_include_list[includes_used++] = namestring;
1390 if (includes_used >= includes_allocated)
1391 {
1392 const char **orig = psymtab_include_list;
1393
1394 psymtab_include_list = (const char **)
1395 alloca ((includes_allocated *= 2) * sizeof (const char *));
1396 memcpy (psymtab_include_list, orig,
1397 includes_used * sizeof (const char *));
1398 }
1399 continue;
1400 }
1401 case N_LSYM: /* Typedef or automatic variable. */
1402 case N_STSYM: /* Data seg var -- static. */
1403 case N_LCSYM: /* BSS " */
1404 case N_ROSYM: /* Read-only data seg var -- static. */
1405 case N_NBSTS: /* Gould nobase. */
1406 case N_NBLCS: /* symbols. */
1407 case N_FUN:
1408 case N_GSYM: /* Global (extern) variable; can be
1409 data or bss (sigh FIXME). */
1410
1411 /* Following may probably be ignored; I'll leave them here
1412 for now (until I do Pascal and Modula 2 extensions). */
1413
1414 case N_PC: /* I may or may not need this; I
1415 suspect not. */
1416 case N_M2C: /* I suspect that I can ignore this here. */
1417 case N_SCOPE: /* Same. */
1418 {
1419 const char *p;
1420
1421 namestring = set_namestring (objfile, &nlist);
1422
1423 /* See if this is an end of function stab. */
1424 if (pst && nlist.n_type == N_FUN && *namestring == '\000')
1425 {
1426 unrelocated_addr valu;
1427
1428 /* It's value is the size (in bytes) of the function for
1429 function relative stabs, or the address of the function's
1430 end for old style stabs. */
1431 valu = unrelocated_addr (nlist.n_value + last_function_start);
1432 if (pst->unrelocated_text_high () == unrelocated_addr (0)
1433 || valu > pst->unrelocated_text_high ())
1434 pst->set_text_high (valu);
1435 break;
1436 }
1437
1438 p = (char *) strchr (namestring, ':');
1439 if (!p)
1440 continue; /* Not a debugging symbol. */
1441
1442 sym_len = 0;
1443 sym_name = NULL; /* pacify "gcc -Werror" */
1444 if (psymtab_language == language_cplus)
1445 {
1446 std::string name (namestring, p - namestring);
1447 gdb::unique_xmalloc_ptr<char> new_name
1448 = cp_canonicalize_string (name.c_str ());
1449 if (new_name != nullptr)
1450 {
1451 sym_len = strlen (new_name.get ());
1452 sym_name = obstack_strdup (&objfile->objfile_obstack,
1453 new_name.get ());
1454 }
1455 }
1456 else if (psymtab_language == language_c)
1457 {
1458 std::string name (namestring, p - namestring);
1459 gdb::unique_xmalloc_ptr<char> new_name
1460 = c_canonicalize_name (name.c_str ());
1461 if (new_name != nullptr)
1462 {
1463 sym_len = strlen (new_name.get ());
1464 sym_name = obstack_strdup (&objfile->objfile_obstack,
1465 new_name.get ());
1466 }
1467 }
1468
1469 if (sym_len == 0)
1470 {
1471 sym_name = namestring;
1472 sym_len = p - namestring;
1473 }
1474
1475 /* Main processing section for debugging symbols which
1476 the initial read through the symbol tables needs to worry
1477 about. If we reach this point, the symbol which we are
1478 considering is definitely one we are interested in.
1479 p must also contain the (valid) index into the namestring
1480 which indicates the debugging type symbol. */
1481
1482 switch (p[1])
1483 {
1484 case 'S':
1485 if (pst != nullptr)
1486 pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
1487 VAR_DOMAIN, LOC_STATIC,
1488 data_sect_index,
1489 psymbol_placement::STATIC,
1490 unrelocated_addr (nlist.n_value),
1491 psymtab_language,
1492 partial_symtabs, objfile);
1493 else
1494 complaint (_("static `%*s' appears to be defined "
1495 "outside of all compilation units"),
1496 sym_len, sym_name);
1497 continue;
1498
1499 case 'G':
1500 /* The addresses in these entries are reported to be
1501 wrong. See the code that reads 'G's for symtabs. */
1502 if (pst != nullptr)
1503 pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
1504 VAR_DOMAIN, LOC_STATIC,
1505 data_sect_index,
1506 psymbol_placement::GLOBAL,
1507 unrelocated_addr (nlist.n_value),
1508 psymtab_language,
1509 partial_symtabs, objfile);
1510 else
1511 complaint (_("global `%*s' appears to be defined "
1512 "outside of all compilation units"),
1513 sym_len, sym_name);
1514 continue;
1515
1516 case 'T':
1517 /* When a 'T' entry is defining an anonymous enum, it
1518 may have a name which is the empty string, or a
1519 single space. Since they're not really defining a
1520 symbol, those shouldn't go in the partial symbol
1521 table. We do pick up the elements of such enums at
1522 'check_enum:', below. */
1523 if (p >= namestring + 2
1524 || (p == namestring + 1
1525 && namestring[0] != ' '))
1526 {
1527 if (pst != nullptr)
1528 pst->add_psymbol (gdb::string_view (sym_name, sym_len),
1529 true, STRUCT_DOMAIN, LOC_TYPEDEF, -1,
1530 psymbol_placement::STATIC,
1531 unrelocated_addr (0),
1532 psymtab_language,
1533 partial_symtabs, objfile);
1534 else
1535 complaint (_("enum, struct, or union `%*s' appears "
1536 "to be defined outside of all "
1537 "compilation units"),
1538 sym_len, sym_name);
1539 if (p[2] == 't')
1540 {
1541 /* Also a typedef with the same name. */
1542 if (pst != nullptr)
1543 pst->add_psymbol (gdb::string_view (sym_name, sym_len),
1544 true, VAR_DOMAIN, LOC_TYPEDEF, -1,
1545 psymbol_placement::STATIC,
1546 unrelocated_addr (0),
1547 psymtab_language,
1548 partial_symtabs, objfile);
1549 else
1550 complaint (_("typedef `%*s' appears to be defined "
1551 "outside of all compilation units"),
1552 sym_len, sym_name);
1553 p += 1;
1554 }
1555 }
1556 goto check_enum;
1557
1558 case 't':
1559 if (p != namestring) /* a name is there, not just :T... */
1560 {
1561 if (pst != nullptr)
1562 pst->add_psymbol (gdb::string_view (sym_name, sym_len),
1563 true, VAR_DOMAIN, LOC_TYPEDEF, -1,
1564 psymbol_placement::STATIC,
1565 unrelocated_addr (0),
1566 psymtab_language,
1567 partial_symtabs, objfile);
1568 else
1569 complaint (_("typename `%*s' appears to be defined "
1570 "outside of all compilation units"),
1571 sym_len, sym_name);
1572 }
1573 check_enum:
1574 /* If this is an enumerated type, we need to
1575 add all the enum constants to the partial symbol
1576 table. This does not cover enums without names, e.g.
1577 "enum {a, b} c;" in C, but fortunately those are
1578 rare. There is no way for GDB to find those from the
1579 enum type without spending too much time on it. Thus
1580 to solve this problem, the compiler needs to put out the
1581 enum in a nameless type. GCC2 does this. */
1582
1583 /* We are looking for something of the form
1584 <name> ":" ("t" | "T") [<number> "="] "e"
1585 {<constant> ":" <value> ","} ";". */
1586
1587 /* Skip over the colon and the 't' or 'T'. */
1588 p += 2;
1589 /* This type may be given a number. Also, numbers can come
1590 in pairs like (0,26). Skip over it. */
1591 while ((*p >= '0' && *p <= '9')
1592 || *p == '(' || *p == ',' || *p == ')'
1593 || *p == '=')
1594 p++;
1595
1596 if (*p++ == 'e')
1597 {
1598 /* The aix4 compiler emits extra crud before the members. */
1599 if (*p == '-')
1600 {
1601 /* Skip over the type (?). */
1602 while (*p != ':')
1603 p++;
1604
1605 /* Skip over the colon. */
1606 p++;
1607 }
1608
1609 /* We have found an enumerated type. */
1610 /* According to comments in read_enum_type
1611 a comma could end it instead of a semicolon.
1612 I don't know where that happens.
1613 Accept either. */
1614 while (*p && *p != ';' && *p != ',')
1615 {
1616 const char *q;
1617
1618 /* Check for and handle cretinous dbx symbol name
1619 continuation! */
1620 if (*p == '\\' || (*p == '?' && p[1] == '\0'))
1621 p = next_symbol_text (objfile);
1622
1623 /* Point to the character after the name
1624 of the enum constant. */
1625 for (q = p; *q && *q != ':'; q++)
1626 ;
1627 /* Note that the value doesn't matter for
1628 enum constants in psymtabs, just in symtabs. */
1629 if (pst != nullptr)
1630 pst->add_psymbol (gdb::string_view (p, q - p), true,
1631 VAR_DOMAIN, LOC_CONST, -1,
1632 psymbol_placement::STATIC,
1633 unrelocated_addr (0),
1634 psymtab_language,
1635 partial_symtabs, objfile);
1636 else
1637 complaint (_("enum constant `%*s' appears to be defined "
1638 "outside of all compilation units"),
1639 ((int) (q - p)), p);
1640 /* Point past the name. */
1641 p = q;
1642 /* Skip over the value. */
1643 while (*p && *p != ',')
1644 p++;
1645 /* Advance past the comma. */
1646 if (*p)
1647 p++;
1648 }
1649 }
1650 continue;
1651
1652 case 'c':
1653 /* Constant, e.g. from "const" in Pascal. */
1654 if (pst != nullptr)
1655 pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
1656 VAR_DOMAIN, LOC_CONST, -1,
1657 psymbol_placement::STATIC,
1658 unrelocated_addr (0),
1659 psymtab_language,
1660 partial_symtabs, objfile);
1661 else
1662 complaint (_("constant `%*s' appears to be defined "
1663 "outside of all compilation units"),
1664 sym_len, sym_name);
1665
1666 continue;
1667
1668 case 'f':
1669 if (! pst)
1670 {
1671 std::string name (namestring, (p - namestring));
1672 function_outside_compilation_unit_complaint (name.c_str ());
1673 }
1674 /* Kludges for ELF/STABS with Sun ACC. */
1675 last_function_name = namestring;
1676 /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
1677 value for the bottom of the text seg in those cases. */
1678 if (nlist.n_value == 0
1679 && gdbarch_sofun_address_maybe_missing (gdbarch))
1680 {
1681 struct bound_minimal_symbol minsym
1682 = find_stab_function (namestring,
1683 pst ? pst->filename : NULL,
1684 objfile);
1685 if (minsym.minsym != NULL)
1686 nlist.n_value
1687 = CORE_ADDR (minsym.minsym->unrelocated_address ());
1688 }
1689 if (pst && textlow_not_set
1690 && gdbarch_sofun_address_maybe_missing (gdbarch))
1691 {
1692 pst->set_text_low (unrelocated_addr (nlist.n_value));
1693 textlow_not_set = 0;
1694 }
1695 /* End kludge. */
1696
1697 /* Keep track of the start of the last function so we
1698 can handle end of function symbols. */
1699 last_function_start = nlist.n_value;
1700
1701 /* In reordered executables this function may lie outside
1702 the bounds created by N_SO symbols. If that's the case
1703 use the address of this function as the low bound for
1704 the partial symbol table. */
1705 if (pst
1706 && (textlow_not_set
1707 || (unrelocated_addr (nlist.n_value)
1708 < pst->unrelocated_text_low ()
1709 && (nlist.n_value != 0))))
1710 {
1711 pst->set_text_low (unrelocated_addr (nlist.n_value));
1712 textlow_not_set = 0;
1713 }
1714 if (pst != nullptr)
1715 pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
1716 VAR_DOMAIN, LOC_BLOCK,
1717 SECT_OFF_TEXT (objfile),
1718 psymbol_placement::STATIC,
1719 unrelocated_addr (nlist.n_value),
1720 psymtab_language,
1721 partial_symtabs, objfile);
1722 continue;
1723
1724 /* Global functions were ignored here, but now they
1725 are put into the global psymtab like one would expect.
1726 They're also in the minimal symbol table. */
1727 case 'F':
1728 if (! pst)
1729 {
1730 std::string name (namestring, (p - namestring));
1731 function_outside_compilation_unit_complaint (name.c_str ());
1732 }
1733 /* Kludges for ELF/STABS with Sun ACC. */
1734 last_function_name = namestring;
1735 /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
1736 value for the bottom of the text seg in those cases. */
1737 if (nlist.n_value == 0
1738 && gdbarch_sofun_address_maybe_missing (gdbarch))
1739 {
1740 struct bound_minimal_symbol minsym
1741 = find_stab_function (namestring,
1742 pst ? pst->filename : NULL,
1743 objfile);
1744 if (minsym.minsym != NULL)
1745 nlist.n_value
1746 = CORE_ADDR (minsym.minsym->unrelocated_address ());
1747 }
1748 if (pst && textlow_not_set
1749 && gdbarch_sofun_address_maybe_missing (gdbarch))
1750 {
1751 pst->set_text_low (unrelocated_addr (nlist.n_value));
1752 textlow_not_set = 0;
1753 }
1754 /* End kludge. */
1755
1756 /* Keep track of the start of the last function so we
1757 can handle end of function symbols. */
1758 last_function_start = nlist.n_value;
1759
1760 /* In reordered executables this function may lie outside
1761 the bounds created by N_SO symbols. If that's the case
1762 use the address of this function as the low bound for
1763 the partial symbol table. */
1764 if (pst
1765 && (textlow_not_set
1766 || (unrelocated_addr (nlist.n_value)
1767 < pst->unrelocated_text_low ()
1768 && (nlist.n_value != 0))))
1769 {
1770 pst->set_text_low (unrelocated_addr (nlist.n_value));
1771 textlow_not_set = 0;
1772 }
1773 if (pst != nullptr)
1774 pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
1775 VAR_DOMAIN, LOC_BLOCK,
1776 SECT_OFF_TEXT (objfile),
1777 psymbol_placement::GLOBAL,
1778 unrelocated_addr (nlist.n_value),
1779 psymtab_language,
1780 partial_symtabs, objfile);
1781 continue;
1782
1783 /* Two things show up here (hopefully); static symbols of
1784 local scope (static used inside braces) or extensions
1785 of structure symbols. We can ignore both. */
1786 case 'V':
1787 case '(':
1788 case '0':
1789 case '1':
1790 case '2':
1791 case '3':
1792 case '4':
1793 case '5':
1794 case '6':
1795 case '7':
1796 case '8':
1797 case '9':
1798 case '-':
1799 case '#': /* For symbol identification (used in live ranges). */
1800 continue;
1801
1802 case ':':
1803 /* It is a C++ nested symbol. We don't need to record it
1804 (I don't think); if we try to look up foo::bar::baz,
1805 then symbols for the symtab containing foo should get
1806 read in, I think. */
1807 /* Someone says sun cc puts out symbols like
1808 /foo/baz/maclib::/usr/local/bin/maclib,
1809 which would get here with a symbol type of ':'. */
1810 continue;
1811
1812 default:
1813 /* Unexpected symbol descriptor. The second and subsequent stabs
1814 of a continued stab can show up here. The question is
1815 whether they ever can mimic a normal stab--it would be
1816 nice if not, since we certainly don't want to spend the
1817 time searching to the end of every string looking for
1818 a backslash. */
1819
1820 complaint (_("unknown symbol descriptor `%c'"),
1821 p[1]);
1822
1823 /* Ignore it; perhaps it is an extension that we don't
1824 know about. */
1825 continue;
1826 }
1827 }
1828
1829 case N_EXCL:
1830
1831 namestring = set_namestring (objfile, &nlist);
1832
1833 /* Find the corresponding bincl and mark that psymtab on the
1834 psymtab dependency list. */
1835 {
1836 legacy_psymtab *needed_pst =
1837 find_corresponding_bincl_psymtab (namestring, nlist.n_value);
1838
1839 /* If this include file was defined earlier in this file,
1840 leave it alone. */
1841 if (needed_pst == pst)
1842 continue;
1843
1844 if (needed_pst)
1845 {
1846 int i;
1847 int found = 0;
1848
1849 for (i = 0; i < dependencies_used; i++)
1850 if (dependency_list[i] == needed_pst)
1851 {
1852 found = 1;
1853 break;
1854 }
1855
1856 /* If it's already in the list, skip the rest. */
1857 if (found)
1858 continue;
1859
1860 dependency_list[dependencies_used++] = needed_pst;
1861 if (dependencies_used >= dependencies_allocated)
1862 {
1863 legacy_psymtab **orig = dependency_list;
1864
1865 dependency_list =
1866 (legacy_psymtab **)
1867 alloca ((dependencies_allocated *= 2)
1868 * sizeof (legacy_psymtab *));
1869 memcpy (dependency_list, orig,
1870 (dependencies_used
1871 * sizeof (legacy_psymtab *)));
1872 #ifdef DEBUG_INFO
1873 gdb_printf (gdb_stderr,
1874 "Had to reallocate "
1875 "dependency list.\n");
1876 gdb_printf (gdb_stderr,
1877 "New dependencies allocated: %d\n",
1878 dependencies_allocated);
1879 #endif
1880 }
1881 }
1882 }
1883 continue;
1884
1885 case N_ENDM:
1886 /* Solaris 2 end of module, finish current partial symbol
1887 table. dbx_end_psymtab will set the high text address of
1888 PST to the proper value, which is necessary if a module
1889 compiled without debugging info follows this module. */
1890 if (pst && gdbarch_sofun_address_maybe_missing (gdbarch))
1891 {
1892 dbx_end_psymtab (objfile, partial_symtabs, pst,
1893 psymtab_include_list, includes_used,
1894 symnum * symbol_size,
1895 (unrelocated_addr) 0, dependency_list,
1896 dependencies_used, textlow_not_set);
1897 pst = (legacy_psymtab *) 0;
1898 includes_used = 0;
1899 dependencies_used = 0;
1900 has_line_numbers = 0;
1901 }
1902 continue;
1903
1904 case N_RBRAC:
1905 #ifdef HANDLE_RBRAC
1906 HANDLE_RBRAC (nlist.n_value);
1907 continue;
1908 #endif
1909 case N_EINCL:
1910 case N_DSLINE:
1911 case N_BSLINE:
1912 case N_SSYM: /* Claim: Structure or union element.
1913 Hopefully, I can ignore this. */
1914 case N_ENTRY: /* Alternate entry point; can ignore. */
1915 case N_MAIN: /* Can definitely ignore this. */
1916 case N_CATCH: /* These are GNU C++ extensions */
1917 case N_EHDECL: /* that can safely be ignored here. */
1918 case N_LENG:
1919 case N_BCOMM:
1920 case N_ECOMM:
1921 case N_ECOML:
1922 case N_FNAME:
1923 case N_SLINE:
1924 case N_RSYM:
1925 case N_PSYM:
1926 case N_BNSYM:
1927 case N_ENSYM:
1928 case N_LBRAC:
1929 case N_NSYMS: /* Ultrix 4.0: symbol count */
1930 case N_DEFD: /* GNU Modula-2 */
1931 case N_ALIAS: /* SunPro F77: alias name, ignore for now. */
1932
1933 case N_OBJ: /* Useless types from Solaris. */
1934 case N_OPT:
1935 case N_PATCH:
1936 /* These symbols aren't interesting; don't worry about them. */
1937 continue;
1938
1939 default:
1940 /* If we haven't found it yet, ignore it. It's probably some
1941 new type we don't know about yet. */
1942 unknown_symtype_complaint (hex_string (nlist.n_type));
1943 continue;
1944 }
1945 }
1946
1947 /* If there's stuff to be cleaned up, clean it up. */
1948 if (pst)
1949 {
1950 /* Don't set high text address of PST lower than it already
1951 is. */
1952 unrelocated_addr text_end
1953 = (unrelocated_addr
1954 ((lowest_text_address == (unrelocated_addr) -1
1955 ? text_addr
1956 : CORE_ADDR (lowest_text_address))
1957 + text_size));
1958
1959 dbx_end_psymtab (objfile, partial_symtabs,
1960 pst, psymtab_include_list, includes_used,
1961 symnum * symbol_size,
1962 (text_end > pst->unrelocated_text_high ()
1963 ? text_end : pst->unrelocated_text_high ()),
1964 dependency_list, dependencies_used, textlow_not_set);
1965 }
1966 }
1967
1968 /* Allocate and partially fill a partial symtab. It will be
1969 completely filled at the end of the symbol list.
1970
1971 SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
1972 is the address relative to which its symbols are (incremental) or 0
1973 (normal). */
1974
1975 static legacy_psymtab *
1976 start_psymtab (psymtab_storage *partial_symtabs, struct objfile *objfile,
1977 const char *filename, unrelocated_addr textlow, int ldsymoff)
1978 {
1979 legacy_psymtab *result = new legacy_psymtab (filename, partial_symtabs,
1980 objfile->per_bfd, textlow);
1981
1982 result->read_symtab_private =
1983 XOBNEW (&objfile->objfile_obstack, struct symloc);
1984 LDSYMOFF (result) = ldsymoff;
1985 result->legacy_read_symtab = dbx_read_symtab;
1986 result->legacy_expand_psymtab = dbx_expand_psymtab;
1987 SYMBOL_SIZE (result) = symbol_size;
1988 SYMBOL_OFFSET (result) = symbol_table_offset;
1989 STRING_OFFSET (result) = string_table_offset;
1990 FILE_STRING_OFFSET (result) = file_string_table_offset;
1991
1992 /* Deduce the source language from the filename for this psymtab. */
1993 psymtab_language = deduce_language_from_filename (filename);
1994 PST_LANGUAGE (result) = psymtab_language;
1995
1996 return result;
1997 }
1998
1999 /* Close off the current usage of PST.
2000 Returns PST or NULL if the partial symtab was empty and thrown away.
2001
2002 FIXME: List variables and peculiarities of same. */
2003
2004 legacy_psymtab *
2005 dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs,
2006 legacy_psymtab *pst,
2007 const char **include_list, int num_includes,
2008 int capping_symbol_offset, unrelocated_addr capping_text,
2009 legacy_psymtab **dependency_list,
2010 int number_dependencies,
2011 int textlow_not_set)
2012 {
2013 int i;
2014 struct gdbarch *gdbarch = objfile->arch ();
2015
2016 if (capping_symbol_offset != -1)
2017 LDSYMLEN (pst) = capping_symbol_offset - LDSYMOFF (pst);
2018 pst->set_text_high (capping_text);
2019
2020 /* Under Solaris, the N_SO symbols always have a value of 0,
2021 instead of the usual address of the .o file. Therefore,
2022 we have to do some tricks to fill in texthigh and textlow.
2023 The first trick is: if we see a static
2024 or global function, and the textlow for the current pst
2025 is not set (ie: textlow_not_set), then we use that function's
2026 address for the textlow of the pst. */
2027
2028 /* Now, to fill in texthigh, we remember the last function seen
2029 in the .o file. Also, there's a hack in
2030 bfd/elf.c and gdb/elfread.c to pass the ELF st_size field
2031 to here via the misc_info field. Therefore, we can fill in
2032 a reliable texthigh by taking the address plus size of the
2033 last function in the file. */
2034
2035 if (!pst->text_high_valid && last_function_name
2036 && gdbarch_sofun_address_maybe_missing (gdbarch))
2037 {
2038 int n;
2039 struct bound_minimal_symbol minsym;
2040
2041 const char *colon = strchr (last_function_name, ':');
2042 if (colon == NULL)
2043 n = 0;
2044 else
2045 n = colon - last_function_name;
2046 char *p = (char *) alloca (n + 2);
2047 strncpy (p, last_function_name, n);
2048 p[n] = 0;
2049
2050 minsym = lookup_minimal_symbol (p, pst->filename, objfile);
2051 if (minsym.minsym == NULL)
2052 {
2053 /* Sun Fortran appends an underscore to the minimal symbol name,
2054 try again with an appended underscore if the minimal symbol
2055 was not found. */
2056 p[n] = '_';
2057 p[n + 1] = 0;
2058 minsym = lookup_minimal_symbol (p, pst->filename, objfile);
2059 }
2060
2061 if (minsym.minsym)
2062 pst->set_text_high
2063 (unrelocated_addr (CORE_ADDR (minsym.minsym->unrelocated_address ())
2064 + minsym.minsym->size ()));
2065
2066 last_function_name = NULL;
2067 }
2068
2069 if (!gdbarch_sofun_address_maybe_missing (gdbarch))
2070 ;
2071 /* This test will be true if the last .o file is only data. */
2072 else if (textlow_not_set)
2073 pst->set_text_low (pst->unrelocated_text_high ());
2074 else
2075 {
2076 /* If we know our own starting text address, then walk through all other
2077 psymtabs for this objfile, and if any didn't know their ending text
2078 address, set it to our starting address. Take care to not set our
2079 own ending address to our starting address. */
2080
2081 for (partial_symtab *p1 : partial_symtabs->range ())
2082 if (!p1->text_high_valid && p1->text_low_valid && p1 != pst)
2083 p1->set_text_high (pst->unrelocated_text_low ());
2084 }
2085
2086 /* End of kludge for patching Solaris textlow and texthigh. */
2087
2088 pst->end ();
2089
2090 pst->number_of_dependencies = number_dependencies;
2091 if (number_dependencies)
2092 {
2093 pst->dependencies
2094 = partial_symtabs->allocate_dependencies (number_dependencies);
2095 memcpy (pst->dependencies, dependency_list,
2096 number_dependencies * sizeof (legacy_psymtab *));
2097 }
2098 else
2099 pst->dependencies = 0;
2100
2101 for (i = 0; i < num_includes; i++)
2102 {
2103 legacy_psymtab *subpst =
2104 new legacy_psymtab (include_list[i], partial_symtabs, objfile->per_bfd);
2105
2106 subpst->read_symtab_private =
2107 XOBNEW (&objfile->objfile_obstack, struct symloc);
2108 LDSYMOFF (subpst) =
2109 LDSYMLEN (subpst) = 0;
2110
2111 /* We could save slight bits of space by only making one of these,
2112 shared by the entire set of include files. FIXME-someday. */
2113 subpst->dependencies =
2114 partial_symtabs->allocate_dependencies (1);
2115 subpst->dependencies[0] = pst;
2116 subpst->number_of_dependencies = 1;
2117
2118 subpst->legacy_read_symtab = pst->legacy_read_symtab;
2119 subpst->legacy_expand_psymtab = pst->legacy_expand_psymtab;
2120 }
2121
2122 if (num_includes == 0
2123 && number_dependencies == 0
2124 && pst->empty ()
2125 && has_line_numbers == 0)
2126 {
2127 /* Throw away this psymtab, it's empty. */
2128 /* Empty psymtabs happen as a result of header files which don't have
2129 any symbols in them. There can be a lot of them. But this check
2130 is wrong, in that a psymtab with N_SLINE entries but nothing else
2131 is not empty, but we don't realize that. Fixing that without slowing
2132 things down might be tricky. */
2133
2134 partial_symtabs->discard_psymtab (pst);
2135
2136 /* Indicate that psymtab was thrown away. */
2137 pst = NULL;
2138 }
2139 return pst;
2140 }
2141 \f
2142 static void
2143 dbx_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile)
2144 {
2145 gdb_assert (!pst->readin);
2146
2147 /* Read in all partial symtabs on which this one is dependent. */
2148 pst->expand_dependencies (objfile);
2149
2150 if (LDSYMLEN (pst)) /* Otherwise it's a dummy. */
2151 {
2152 /* Init stuff necessary for reading in symbols */
2153 stabsread_init ();
2154 scoped_free_pendings free_pending;
2155 file_string_table_offset = FILE_STRING_OFFSET (pst);
2156 symbol_size = SYMBOL_SIZE (pst);
2157
2158 /* Read in this file's symbols. */
2159 if (bfd_seek (objfile->obfd.get (), SYMBOL_OFFSET (pst), SEEK_SET) == 0)
2160 read_ofile_symtab (objfile, pst);
2161 }
2162
2163 pst->readin = true;
2164 }
2165
2166 /* Read in all of the symbols for a given psymtab for real.
2167 Be verbose about it if the user wants that. SELF is not NULL. */
2168
2169 static void
2170 dbx_read_symtab (legacy_psymtab *self, struct objfile *objfile)
2171 {
2172 gdb_assert (!self->readin);
2173
2174 if (LDSYMLEN (self) || self->number_of_dependencies)
2175 {
2176 next_symbol_text_func = dbx_next_symbol_text;
2177
2178 {
2179 scoped_restore restore_stabs_data = make_scoped_restore (&stabs_data);
2180 gdb::unique_xmalloc_ptr<gdb_byte> data_holder;
2181 if (DBX_STAB_SECTION (objfile))
2182 {
2183 stabs_data
2184 = symfile_relocate_debug_section (objfile,
2185 DBX_STAB_SECTION (objfile),
2186 NULL);
2187 data_holder.reset (stabs_data);
2188 }
2189
2190 self->expand_psymtab (objfile);
2191 }
2192
2193 /* Match with global symbols. This only needs to be done once,
2194 after all of the symtabs and dependencies have been read in. */
2195 scan_file_globals (objfile);
2196 }
2197 }
2198
2199 /* Read in a defined section of a specific object file's symbols. */
2200
2201 static void
2202 read_ofile_symtab (struct objfile *objfile, legacy_psymtab *pst)
2203 {
2204 const char *namestring;
2205 struct external_nlist *bufp;
2206 struct internal_nlist nlist;
2207 unsigned char type;
2208 unsigned max_symnum;
2209 bfd *abfd;
2210 int sym_offset; /* Offset to start of symbols to read */
2211 int sym_size; /* Size of symbols to read */
2212 CORE_ADDR text_offset; /* Start of text segment for symbols */
2213 int text_size; /* Size of text segment for symbols */
2214
2215 sym_offset = LDSYMOFF (pst);
2216 sym_size = LDSYMLEN (pst);
2217 text_offset = pst->text_low (objfile);
2218 text_size = pst->text_high (objfile) - pst->text_low (objfile);
2219 const section_offsets &section_offsets = objfile->section_offsets;
2220
2221 dbxread_objfile = objfile;
2222
2223 stringtab_global = DBX_STRINGTAB (objfile);
2224 set_last_source_file (NULL);
2225
2226 abfd = objfile->obfd.get ();
2227 symfile_bfd = objfile->obfd.get (); /* Implicit param to next_text_symbol. */
2228 symbuf_end = symbuf_idx = 0;
2229 symbuf_read = 0;
2230 symbuf_left = sym_offset + sym_size;
2231
2232 /* It is necessary to actually read one symbol *before* the start
2233 of this symtab's symbols, because the GCC_COMPILED_FLAG_SYMBOL
2234 occurs before the N_SO symbol.
2235
2236 Detecting this in read_dbx_symtab
2237 would slow down initial readin, so we look for it here instead. */
2238 if (!processing_acc_compilation && sym_offset >= (int) symbol_size)
2239 {
2240 stabs_seek (sym_offset - symbol_size);
2241 fill_symbuf (abfd);
2242 bufp = &symbuf[symbuf_idx++];
2243 INTERNALIZE_SYMBOL (nlist, bufp, abfd);
2244 OBJSTAT (objfile, n_stabs++);
2245
2246 namestring = set_namestring (objfile, &nlist);
2247
2248 processing_gcc_compilation = 0;
2249 if (nlist.n_type == N_TEXT)
2250 {
2251 const char *tempstring = namestring;
2252
2253 if (strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL) == 0)
2254 processing_gcc_compilation = 1;
2255 else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0)
2256 processing_gcc_compilation = 2;
2257 if (*tempstring != '\0'
2258 && *tempstring == bfd_get_symbol_leading_char (symfile_bfd))
2259 ++tempstring;
2260 if (startswith (tempstring, "__gnu_compiled"))
2261 processing_gcc_compilation = 2;
2262 }
2263 }
2264 else
2265 {
2266 /* The N_SO starting this symtab is the first symbol, so we
2267 better not check the symbol before it. I'm not this can
2268 happen, but it doesn't hurt to check for it. */
2269 stabs_seek (sym_offset);
2270 processing_gcc_compilation = 0;
2271 }
2272
2273 if (symbuf_idx == symbuf_end)
2274 fill_symbuf (abfd);
2275 bufp = &symbuf[symbuf_idx];
2276 if (bfd_h_get_8 (abfd, bufp->e_type) != N_SO)
2277 error (_("First symbol in segment of executable not a source symbol"));
2278
2279 max_symnum = sym_size / symbol_size;
2280
2281 for (symnum = 0;
2282 symnum < max_symnum;
2283 symnum++)
2284 {
2285 QUIT; /* Allow this to be interruptable. */
2286 if (symbuf_idx == symbuf_end)
2287 fill_symbuf (abfd);
2288 bufp = &symbuf[symbuf_idx++];
2289 INTERNALIZE_SYMBOL (nlist, bufp, abfd);
2290 OBJSTAT (objfile, n_stabs++);
2291
2292 type = bfd_h_get_8 (abfd, bufp->e_type);
2293
2294 namestring = set_namestring (objfile, &nlist);
2295
2296 if (type & N_STAB)
2297 {
2298 if (sizeof (nlist.n_value) > 4
2299 /* We are a 64-bit debugger debugging a 32-bit program. */
2300 && (type == N_LSYM || type == N_PSYM))
2301 /* We have to be careful with the n_value in the case of N_LSYM
2302 and N_PSYM entries, because they are signed offsets from frame
2303 pointer, but we actually read them as unsigned 32-bit values.
2304 This is not a problem for 32-bit debuggers, for which negative
2305 values end up being interpreted correctly (as negative
2306 offsets) due to integer overflow.
2307 But we need to sign-extend the value for 64-bit debuggers,
2308 or we'll end up interpreting negative values as very large
2309 positive offsets. */
2310 nlist.n_value = (nlist.n_value ^ 0x80000000) - 0x80000000;
2311 process_one_symbol (type, nlist.n_desc, nlist.n_value,
2312 namestring, section_offsets, objfile,
2313 PST_LANGUAGE (pst));
2314 }
2315 /* We skip checking for a new .o or -l file; that should never
2316 happen in this routine. */
2317 else if (type == N_TEXT)
2318 {
2319 /* I don't think this code will ever be executed, because
2320 the GCC_COMPILED_FLAG_SYMBOL usually is right before
2321 the N_SO symbol which starts this source file.
2322 However, there is no reason not to accept
2323 the GCC_COMPILED_FLAG_SYMBOL anywhere. */
2324
2325 if (strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL) == 0)
2326 processing_gcc_compilation = 1;
2327 else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0)
2328 processing_gcc_compilation = 2;
2329 }
2330 else if (type & N_EXT || type == (unsigned char) N_TEXT
2331 || type == (unsigned char) N_NBTEXT)
2332 {
2333 /* Global symbol: see if we came across a dbx definition for
2334 a corresponding symbol. If so, store the value. Remove
2335 syms from the chain when their values are stored, but
2336 search the whole chain, as there may be several syms from
2337 different files with the same name. */
2338 /* This is probably not true. Since the files will be read
2339 in one at a time, each reference to a global symbol will
2340 be satisfied in each file as it appears. So we skip this
2341 section. */
2342 ;
2343 }
2344 }
2345
2346 /* In a Solaris elf file, this variable, which comes from the value
2347 of the N_SO symbol, will still be 0. Luckily, text_offset, which
2348 comes from low text address of PST, is correct. */
2349 if (get_last_source_start_addr () == 0)
2350 set_last_source_start_addr (text_offset);
2351
2352 /* In reordered executables last_source_start_addr may not be the
2353 lower bound for this symtab, instead use text_offset which comes
2354 from the low text address of PST, which is correct. */
2355 if (get_last_source_start_addr () > text_offset)
2356 set_last_source_start_addr (text_offset);
2357
2358 pst->compunit_symtab = end_compunit_symtab (text_offset + text_size);
2359
2360 end_stabs ();
2361
2362 dbxread_objfile = NULL;
2363 }
2364 \f
2365
2366 /* Record the namespace that the function defined by SYMBOL was
2367 defined in, if necessary. BLOCK is the associated block; use
2368 OBSTACK for allocation. */
2369
2370 static void
2371 cp_set_block_scope (const struct symbol *symbol,
2372 struct block *block,
2373 struct obstack *obstack)
2374 {
2375 if (symbol->demangled_name () != NULL)
2376 {
2377 /* Try to figure out the appropriate namespace from the
2378 demangled name. */
2379
2380 /* FIXME: carlton/2003-04-15: If the function in question is
2381 a method of a class, the name will actually include the
2382 name of the class as well. This should be harmless, but
2383 is a little unfortunate. */
2384
2385 const char *name = symbol->demangled_name ();
2386 unsigned int prefix_len = cp_entire_prefix_len (name);
2387
2388 block->set_scope (obstack_strndup (obstack, name, prefix_len),
2389 obstack);
2390 }
2391 }
2392
2393 /* This handles a single symbol from the symbol-file, building symbols
2394 into a GDB symtab. It takes these arguments and an implicit argument.
2395
2396 TYPE is the type field of the ".stab" symbol entry.
2397 DESC is the desc field of the ".stab" entry.
2398 VALU is the value field of the ".stab" entry.
2399 NAME is the symbol name, in our address space.
2400 SECTION_OFFSETS is a set of amounts by which the sections of this
2401 object file were relocated when it was loaded into memory. Note
2402 that these section_offsets are not the objfile->section_offsets but
2403 the pst->section_offsets. All symbols that refer to memory
2404 locations need to be offset by these amounts.
2405 OBJFILE is the object file from which we are reading symbols. It
2406 is used in end_compunit_symtab.
2407 LANGUAGE is the language of the symtab.
2408 */
2409
2410 void
2411 process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
2412 const section_offsets &section_offsets,
2413 struct objfile *objfile, enum language language)
2414 {
2415 struct gdbarch *gdbarch = objfile->arch ();
2416 struct context_stack *newobj;
2417 struct context_stack cstk;
2418 /* This remembers the address of the start of a function. It is
2419 used because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries
2420 are relative to the current function's start address. On systems
2421 other than Solaris 2, this just holds the SECT_OFF_TEXT value,
2422 and is used to relocate these symbol types rather than
2423 SECTION_OFFSETS. */
2424 static CORE_ADDR function_start_offset;
2425
2426 /* This holds the address of the start of a function, without the
2427 system peculiarities of function_start_offset. */
2428 static CORE_ADDR last_function_start;
2429
2430 /* If this is nonzero, we've seen an N_SLINE since the start of the
2431 current function. We use this to tell us to move the first sline
2432 to the beginning of the function regardless of what its given
2433 value is. */
2434 static int sline_found_in_function = 1;
2435
2436 /* If this is nonzero, we've seen a non-gcc N_OPT symbol for this
2437 source file. Used to detect the SunPRO solaris compiler. */
2438 static int n_opt_found;
2439
2440 /* The section index for this symbol. */
2441 int section_index = -1;
2442
2443 /* Something is wrong if we see real data before seeing a source
2444 file name. */
2445
2446 if (get_last_source_file () == NULL && type != (unsigned char) N_SO)
2447 {
2448 /* Ignore any symbols which appear before an N_SO symbol.
2449 Currently no one puts symbols there, but we should deal
2450 gracefully with the case. A complain()t might be in order,
2451 but this should not be an error (). */
2452 return;
2453 }
2454
2455 switch (type)
2456 {
2457 case N_FUN:
2458 case N_FNAME:
2459
2460 if (*name == '\000')
2461 {
2462 /* This N_FUN marks the end of a function. This closes off
2463 the current block. */
2464 struct block *block;
2465
2466 if (outermost_context_p ())
2467 {
2468 lbrac_mismatch_complaint (symnum);
2469 break;
2470 }
2471
2472 /* The following check is added before recording line 0 at
2473 end of function so as to handle hand-generated stabs
2474 which may have an N_FUN stabs at the end of the function,
2475 but no N_SLINE stabs. */
2476 if (sline_found_in_function)
2477 {
2478 CORE_ADDR addr = last_function_start + valu;
2479
2480 record_line
2481 (get_current_subfile (), 0,
2482 unrelocated_addr (gdbarch_addr_bits_remove (gdbarch, addr)
2483 - objfile->text_section_offset ()));
2484 }
2485
2486 within_function = 0;
2487 cstk = pop_context ();
2488
2489 /* Make a block for the local symbols within. */
2490 block = finish_block (cstk.name,
2491 cstk.old_blocks, NULL,
2492 cstk.start_addr, cstk.start_addr + valu);
2493
2494 /* For C++, set the block's scope. */
2495 if (cstk.name->language () == language_cplus)
2496 cp_set_block_scope (cstk.name, block, &objfile->objfile_obstack);
2497
2498 /* May be switching to an assembler file which may not be using
2499 block relative stabs, so reset the offset. */
2500 function_start_offset = 0;
2501
2502 break;
2503 }
2504
2505 sline_found_in_function = 0;
2506
2507 /* Relocate for dynamic loading. */
2508 section_index = SECT_OFF_TEXT (objfile);
2509 valu += section_offsets[SECT_OFF_TEXT (objfile)];
2510 valu = gdbarch_addr_bits_remove (gdbarch, valu);
2511 last_function_start = valu;
2512
2513 goto define_a_symbol;
2514
2515 case N_LBRAC:
2516 /* This "symbol" just indicates the start of an inner lexical
2517 context within a function. */
2518
2519 /* Ignore extra outermost context from SunPRO cc and acc. */
2520 if (n_opt_found && desc == 1)
2521 break;
2522
2523 valu += function_start_offset;
2524
2525 push_context (desc, valu);
2526 break;
2527
2528 case N_RBRAC:
2529 /* This "symbol" just indicates the end of an inner lexical
2530 context that was started with N_LBRAC. */
2531
2532 /* Ignore extra outermost context from SunPRO cc and acc. */
2533 if (n_opt_found && desc == 1)
2534 break;
2535
2536 valu += function_start_offset;
2537
2538 if (outermost_context_p ())
2539 {
2540 lbrac_mismatch_complaint (symnum);
2541 break;
2542 }
2543
2544 cstk = pop_context ();
2545 if (desc != cstk.depth)
2546 lbrac_mismatch_complaint (symnum);
2547
2548 if (*get_local_symbols () != NULL)
2549 {
2550 /* GCC development snapshots from March to December of
2551 2000 would output N_LSYM entries after N_LBRAC
2552 entries. As a consequence, these symbols are simply
2553 discarded. Complain if this is the case. */
2554 complaint (_("misplaced N_LBRAC entry; discarding local "
2555 "symbols which have no enclosing block"));
2556 }
2557 *get_local_symbols () = cstk.locals;
2558
2559 if (get_context_stack_depth () > 1)
2560 {
2561 /* This is not the outermost LBRAC...RBRAC pair in the
2562 function, its local symbols preceded it, and are the ones
2563 just recovered from the context stack. Define the block
2564 for them (but don't bother if the block contains no
2565 symbols. Should we complain on blocks without symbols?
2566 I can't think of any useful purpose for them). */
2567 if (*get_local_symbols () != NULL)
2568 {
2569 /* Muzzle a compiler bug that makes end < start.
2570
2571 ??? Which compilers? Is this ever harmful?. */
2572 if (cstk.start_addr > valu)
2573 {
2574 complaint (_("block start larger than block end"));
2575 cstk.start_addr = valu;
2576 }
2577 /* Make a block for the local symbols within. */
2578 finish_block (0, cstk.old_blocks, NULL,
2579 cstk.start_addr, valu);
2580 }
2581 }
2582 else
2583 {
2584 /* This is the outermost LBRAC...RBRAC pair. There is no
2585 need to do anything; leave the symbols that preceded it
2586 to be attached to the function's own block. We need to
2587 indicate that we just moved outside of the function. */
2588 within_function = 0;
2589 }
2590
2591 break;
2592
2593 case N_FN:
2594 case N_FN_SEQ:
2595 /* This kind of symbol indicates the start of an object file.
2596 Relocate for dynamic loading. */
2597 section_index = SECT_OFF_TEXT (objfile);
2598 valu += section_offsets[SECT_OFF_TEXT (objfile)];
2599 break;
2600
2601 case N_SO:
2602 /* This type of symbol indicates the start of data for one
2603 source file. Finish the symbol table of the previous source
2604 file (if any) and start accumulating a new symbol table.
2605 Relocate for dynamic loading. */
2606 section_index = SECT_OFF_TEXT (objfile);
2607 valu += section_offsets[SECT_OFF_TEXT (objfile)];
2608
2609 n_opt_found = 0;
2610
2611 if (get_last_source_file ())
2612 {
2613 /* Check if previous symbol was also an N_SO (with some
2614 sanity checks). If so, that one was actually the
2615 directory name, and the current one is the real file
2616 name. Patch things up. */
2617 if (previous_stab_code == (unsigned char) N_SO)
2618 {
2619 patch_subfile_names (get_current_subfile (), name);
2620 break; /* Ignore repeated SOs. */
2621 }
2622 end_compunit_symtab (valu);
2623 end_stabs ();
2624 }
2625
2626 /* Null name means this just marks the end of text for this .o
2627 file. Don't start a new symtab in this case. */
2628 if (*name == '\000')
2629 break;
2630
2631 function_start_offset = 0;
2632
2633 start_stabs ();
2634 start_compunit_symtab (objfile, name, NULL, valu, language);
2635 record_debugformat ("stabs");
2636 break;
2637
2638 case N_SOL:
2639 /* This type of symbol indicates the start of data for a
2640 sub-source-file, one whose contents were copied or included
2641 in the compilation of the main source file (whose name was
2642 given in the N_SO symbol). Relocate for dynamic loading. */
2643 section_index = SECT_OFF_TEXT (objfile);
2644 valu += section_offsets[SECT_OFF_TEXT (objfile)];
2645 start_subfile (name);
2646 break;
2647
2648 case N_BINCL:
2649 push_subfile ();
2650 add_new_header_file (name, valu);
2651 start_subfile (name);
2652 break;
2653
2654 case N_EINCL:
2655 start_subfile (pop_subfile ());
2656 break;
2657
2658 case N_EXCL:
2659 add_old_header_file (name, valu);
2660 break;
2661
2662 case N_SLINE:
2663 /* This type of "symbol" really just records one line-number --
2664 core-address correspondence. Enter it in the line list for
2665 this symbol table. */
2666
2667 /* Relocate for dynamic loading and for ELF acc
2668 function-relative symbols. */
2669 valu += function_start_offset;
2670
2671 /* GCC 2.95.3 emits the first N_SLINE stab somewhere in the
2672 middle of the prologue instead of right at the start of the
2673 function. To deal with this we record the address for the
2674 first N_SLINE stab to be the start of the function instead of
2675 the listed location. We really shouldn't to this. When
2676 compiling with optimization, this first N_SLINE stab might be
2677 optimized away. Other (non-GCC) compilers don't emit this
2678 stab at all. There is no real harm in having an extra
2679 numbered line, although it can be a bit annoying for the
2680 user. However, it totally screws up our testsuite.
2681
2682 So for now, keep adjusting the address of the first N_SLINE
2683 stab, but only for code compiled with GCC. */
2684
2685 if (within_function && sline_found_in_function == 0)
2686 {
2687 CORE_ADDR addr = processing_gcc_compilation == 2 ?
2688 last_function_start : valu;
2689
2690 record_line
2691 (get_current_subfile (), desc,
2692 unrelocated_addr (gdbarch_addr_bits_remove (gdbarch, addr)
2693 - objfile->text_section_offset ()));
2694 sline_found_in_function = 1;
2695 }
2696 else
2697 record_line
2698 (get_current_subfile (), desc,
2699 unrelocated_addr (gdbarch_addr_bits_remove (gdbarch, valu)
2700 - objfile->text_section_offset ()));
2701 break;
2702
2703 case N_BCOMM:
2704 common_block_start (name, objfile);
2705 break;
2706
2707 case N_ECOMM:
2708 common_block_end (objfile);
2709 break;
2710
2711 /* The following symbol types need to have the appropriate
2712 offset added to their value; then we process symbol
2713 definitions in the name. */
2714
2715 case N_STSYM: /* Static symbol in data segment. */
2716 case N_LCSYM: /* Static symbol in BSS segment. */
2717 case N_ROSYM: /* Static symbol in read-only data segment. */
2718 /* HORRID HACK DEPT. However, it's Sun's furgin' fault.
2719 Solaris 2's stabs-in-elf makes *most* symbols relative but
2720 leaves a few absolute (at least for Solaris 2.1 and version
2721 2.0.1 of the SunPRO compiler). N_STSYM and friends sit on
2722 the fence. .stab "foo:S...",N_STSYM is absolute (ld
2723 relocates it) .stab "foo:V...",N_STSYM is relative (section
2724 base subtracted). This leaves us no choice but to search for
2725 the 'S' or 'V'... (or pass the whole section_offsets stuff
2726 down ONE MORE function call level, which we really don't want
2727 to do). */
2728 {
2729 const char *p;
2730
2731 /* Normal object file and NLMs have non-zero text seg offsets,
2732 but don't need their static syms offset in this fashion.
2733 XXX - This is really a crock that should be fixed in the
2734 solib handling code so that I don't have to work around it
2735 here. */
2736
2737 if (!symfile_relocatable)
2738 {
2739 p = strchr (name, ':');
2740 if (p != 0 && p[1] == 'S')
2741 {
2742 /* The linker relocated it. We don't want to add a
2743 Sun-stabs Tfoo.foo-like offset, but we *do*
2744 want to add whatever solib.c passed to
2745 symbol_file_add as addr (this is known to affect
2746 SunOS 4, and I suspect ELF too). Since there is no
2747 Ttext.text symbol, we can get addr from the text offset. */
2748 section_index = SECT_OFF_TEXT (objfile);
2749 valu += section_offsets[SECT_OFF_TEXT (objfile)];
2750 goto define_a_symbol;
2751 }
2752 }
2753 /* Since it's not the kludge case, re-dispatch to the right
2754 handler. */
2755 switch (type)
2756 {
2757 case N_STSYM:
2758 goto case_N_STSYM;
2759 case N_LCSYM:
2760 goto case_N_LCSYM;
2761 case N_ROSYM:
2762 goto case_N_ROSYM;
2763 default:
2764 internal_error (_("failed internal consistency check"));
2765 }
2766 }
2767
2768 case_N_STSYM: /* Static symbol in data segment. */
2769 case N_DSLINE: /* Source line number, data segment. */
2770 section_index = SECT_OFF_DATA (objfile);
2771 valu += section_offsets[SECT_OFF_DATA (objfile)];
2772 goto define_a_symbol;
2773
2774 case_N_LCSYM: /* Static symbol in BSS segment. */
2775 case N_BSLINE: /* Source line number, BSS segment. */
2776 /* N_BROWS: overlaps with N_BSLINE. */
2777 section_index = SECT_OFF_BSS (objfile);
2778 valu += section_offsets[SECT_OFF_BSS (objfile)];
2779 goto define_a_symbol;
2780
2781 case_N_ROSYM: /* Static symbol in read-only data segment. */
2782 section_index = SECT_OFF_RODATA (objfile);
2783 valu += section_offsets[SECT_OFF_RODATA (objfile)];
2784 goto define_a_symbol;
2785
2786 case N_ENTRY: /* Alternate entry point. */
2787 /* Relocate for dynamic loading. */
2788 section_index = SECT_OFF_TEXT (objfile);
2789 valu += section_offsets[SECT_OFF_TEXT (objfile)];
2790 goto define_a_symbol;
2791
2792 /* The following symbol types we don't know how to process.
2793 Handle them in a "default" way, but complain to people who
2794 care. */
2795 default:
2796 case N_CATCH: /* Exception handler catcher. */
2797 case N_EHDECL: /* Exception handler name. */
2798 case N_PC: /* Global symbol in Pascal. */
2799 case N_M2C: /* Modula-2 compilation unit. */
2800 /* N_MOD2: overlaps with N_EHDECL. */
2801 case N_SCOPE: /* Modula-2 scope information. */
2802 case N_ECOML: /* End common (local name). */
2803 case N_NBTEXT: /* Gould Non-Base-Register symbols??? */
2804 case N_NBDATA:
2805 case N_NBBSS:
2806 case N_NBSTS:
2807 case N_NBLCS:
2808 unknown_symtype_complaint (hex_string (type));
2809 /* FALLTHROUGH */
2810
2811 define_a_symbol:
2812 /* These symbol types don't need the address field relocated,
2813 since it is either unused, or is absolute. */
2814 case N_GSYM: /* Global variable. */
2815 case N_NSYMS: /* Number of symbols (Ultrix). */
2816 case N_NOMAP: /* No map? (Ultrix). */
2817 case N_RSYM: /* Register variable. */
2818 case N_DEFD: /* Modula-2 GNU module dependency. */
2819 case N_SSYM: /* Struct or union element. */
2820 case N_LSYM: /* Local symbol in stack. */
2821 case N_PSYM: /* Parameter variable. */
2822 case N_LENG: /* Length of preceding symbol type. */
2823 if (name)
2824 {
2825 int deftype;
2826 const char *colon_pos = strchr (name, ':');
2827
2828 if (colon_pos == NULL)
2829 deftype = '\0';
2830 else
2831 deftype = colon_pos[1];
2832
2833 switch (deftype)
2834 {
2835 case 'f':
2836 case 'F':
2837 /* Deal with the SunPRO 3.0 compiler which omits the
2838 address from N_FUN symbols. */
2839 if (type == N_FUN
2840 && valu == section_offsets[SECT_OFF_TEXT (objfile)]
2841 && gdbarch_sofun_address_maybe_missing (gdbarch))
2842 {
2843 struct bound_minimal_symbol minsym
2844 = find_stab_function (name, get_last_source_file (),
2845 objfile);
2846 if (minsym.minsym != NULL)
2847 valu = minsym.value_address ();
2848 }
2849
2850 /* These addresses are absolute. */
2851 function_start_offset = valu;
2852
2853 within_function = 1;
2854
2855 if (get_context_stack_depth () > 1)
2856 {
2857 complaint (_("unmatched N_LBRAC before symtab pos %d"),
2858 symnum);
2859 break;
2860 }
2861
2862 if (!outermost_context_p ())
2863 {
2864 struct block *block;
2865
2866 cstk = pop_context ();
2867 /* Make a block for the local symbols within. */
2868 block = finish_block (cstk.name,
2869 cstk.old_blocks, NULL,
2870 cstk.start_addr, valu);
2871
2872 /* For C++, set the block's scope. */
2873 if (cstk.name->language () == language_cplus)
2874 cp_set_block_scope (cstk.name, block,
2875 &objfile->objfile_obstack);
2876 }
2877
2878 newobj = push_context (0, valu);
2879 newobj->name = define_symbol (valu, name, desc, type, objfile);
2880 if (newobj->name != nullptr)
2881 newobj->name->set_section_index (section_index);
2882 break;
2883
2884 default:
2885 {
2886 struct symbol *sym = define_symbol (valu, name, desc, type,
2887 objfile);
2888 if (sym != nullptr)
2889 sym->set_section_index (section_index);
2890 }
2891 break;
2892 }
2893 }
2894 break;
2895
2896 /* We use N_OPT to carry the gcc2_compiled flag. Sun uses it
2897 for a bunch of other flags, too. Someday we may parse their
2898 flags; for now we ignore theirs and hope they'll ignore ours. */
2899 case N_OPT: /* Solaris 2: Compiler options. */
2900 if (name)
2901 {
2902 if (strcmp (name, GCC2_COMPILED_FLAG_SYMBOL) == 0)
2903 {
2904 processing_gcc_compilation = 2;
2905 }
2906 else
2907 n_opt_found = 1;
2908 }
2909 break;
2910
2911 case N_MAIN: /* Name of main routine. */
2912 /* FIXME: If one has a symbol file with N_MAIN and then replaces
2913 it with a symbol file with "main" and without N_MAIN. I'm
2914 not sure exactly what rule to follow but probably something
2915 like: N_MAIN takes precedence over "main" no matter what
2916 objfile it is in; If there is more than one N_MAIN, choose
2917 the one in the symfile_objfile; If there is more than one
2918 N_MAIN within a given objfile, complain() and choose
2919 arbitrarily. (kingdon) */
2920 if (name != NULL)
2921 set_objfile_main_name (objfile, name, language_unknown);
2922 break;
2923
2924 /* The following symbol types can be ignored. */
2925 case N_OBJ: /* Solaris 2: Object file dir and name. */
2926 case N_PATCH: /* Solaris 2: Patch Run Time Checker. */
2927 /* N_UNDF: Solaris 2: File separator mark. */
2928 /* N_UNDF: -- we will never encounter it, since we only process
2929 one file's symbols at once. */
2930 case N_ENDM: /* Solaris 2: End of module. */
2931 case N_ALIAS: /* SunPro F77: alias name, ignore for now. */
2932 break;
2933 }
2934
2935 /* '#' is a GNU C extension to allow one symbol to refer to another
2936 related symbol.
2937
2938 Generally this is used so that an alias can refer to its main
2939 symbol. */
2940 gdb_assert (name);
2941 if (name[0] == '#')
2942 {
2943 /* Initialize symbol reference names and determine if this is a
2944 definition. If a symbol reference is being defined, go ahead
2945 and add it. Otherwise, just return. */
2946
2947 const char *s = name;
2948 int refnum;
2949
2950 /* If this stab defines a new reference ID that is not on the
2951 reference list, then put it on the reference list.
2952
2953 We go ahead and advance NAME past the reference, even though
2954 it is not strictly necessary at this time. */
2955 refnum = symbol_reference_defined (&s);
2956 if (refnum >= 0)
2957 if (!ref_search (refnum))
2958 ref_add (refnum, 0, name, valu);
2959 name = s;
2960 }
2961
2962 previous_stab_code = type;
2963 }
2964 \f
2965 /* FIXME: The only difference between this and elfstab_build_psymtabs
2966 is the call to install_minimal_symbols for elf, and the support for
2967 split sections. If the differences are really that small, the code
2968 should be shared. */
2969
2970 /* Scan and build partial symbols for an coff symbol file.
2971 The coff file has already been processed to get its minimal symbols.
2972
2973 This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
2974 rolled into one.
2975
2976 OBJFILE is the object file we are reading symbols from.
2977 ADDR is the address relative to which the symbols are (e.g.
2978 the base address of the text segment).
2979 TEXTADDR is the address of the text section.
2980 TEXTSIZE is the size of the text section.
2981 STABSECTS is the list of .stab sections in OBJFILE.
2982 STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
2983 .stabstr section exists.
2984
2985 This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
2986 adjusted for coff details. */
2987
2988 void
2989 coffstab_build_psymtabs (struct objfile *objfile,
2990 CORE_ADDR textaddr, unsigned int textsize,
2991 const std::vector<asection *> &stabsects,
2992 file_ptr stabstroffset, unsigned int stabstrsize)
2993 {
2994 int val;
2995 bfd *sym_bfd = objfile->obfd.get ();
2996 const char *name = bfd_get_filename (sym_bfd);
2997 unsigned int stabsize;
2998
2999 /* Allocate struct to keep track of stab reading. */
3000 dbx_objfile_data_key.emplace (objfile);
3001
3002 DBX_TEXT_ADDR (objfile) = textaddr;
3003 DBX_TEXT_SIZE (objfile) = textsize;
3004
3005 #define COFF_STABS_SYMBOL_SIZE 12 /* XXX FIXME XXX */
3006 DBX_SYMBOL_SIZE (objfile) = COFF_STABS_SYMBOL_SIZE;
3007 DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
3008
3009 if (stabstrsize > bfd_get_size (sym_bfd))
3010 error (_("ridiculous string table size: %d bytes"), stabstrsize);
3011 DBX_STRINGTAB (objfile) = (char *)
3012 obstack_alloc (&objfile->objfile_obstack, stabstrsize + 1);
3013 OBJSTAT (objfile, sz_strtab += stabstrsize + 1);
3014
3015 /* Now read in the string table in one big gulp. */
3016
3017 val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
3018 if (val < 0)
3019 perror_with_name (name);
3020 val = bfd_read (DBX_STRINGTAB (objfile), stabstrsize, sym_bfd);
3021 if (val != stabstrsize)
3022 perror_with_name (name);
3023
3024 stabsread_new_init ();
3025 free_header_files ();
3026 init_header_files ();
3027
3028 processing_acc_compilation = 1;
3029
3030 /* In a coff file, we've already installed the minimal symbols that came
3031 from the coff (non-stab) symbol table, so always act like an
3032 incremental load here. */
3033 scoped_restore save_symbuf_sections
3034 = make_scoped_restore (&symbuf_sections);
3035 if (stabsects.size () == 1)
3036 {
3037 stabsize = bfd_section_size (stabsects[0]);
3038 DBX_SYMCOUNT (objfile) = stabsize / DBX_SYMBOL_SIZE (objfile);
3039 DBX_SYMTAB_OFFSET (objfile) = stabsects[0]->filepos;
3040 }
3041 else
3042 {
3043 DBX_SYMCOUNT (objfile) = 0;
3044 for (asection *section : stabsects)
3045 {
3046 stabsize = bfd_section_size (section);
3047 DBX_SYMCOUNT (objfile) += stabsize / DBX_SYMBOL_SIZE (objfile);
3048 }
3049
3050 DBX_SYMTAB_OFFSET (objfile) = stabsects[0]->filepos;
3051
3052 sect_idx = 1;
3053 symbuf_sections = &stabsects;
3054 symbuf_left = bfd_section_size (stabsects[0]);
3055 symbuf_read = 0;
3056 }
3057
3058 dbx_symfile_read (objfile, 0);
3059 }
3060 \f
3061 /* Scan and build partial symbols for an ELF symbol file.
3062 This ELF file has already been processed to get its minimal symbols.
3063
3064 This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
3065 rolled into one.
3066
3067 OBJFILE is the object file we are reading symbols from.
3068 ADDR is the address relative to which the symbols are (e.g.
3069 the base address of the text segment).
3070 STABSECT is the BFD section information for the .stab section.
3071 STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
3072 .stabstr section exists.
3073
3074 This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
3075 adjusted for elf details. */
3076
3077 void
3078 elfstab_build_psymtabs (struct objfile *objfile, asection *stabsect,
3079 file_ptr stabstroffset, unsigned int stabstrsize)
3080 {
3081 int val;
3082 bfd *sym_bfd = objfile->obfd.get ();
3083 const char *name = bfd_get_filename (sym_bfd);
3084
3085 stabsread_new_init ();
3086
3087 /* Allocate struct to keep track of stab reading. */
3088 dbx_objfile_data_key.emplace (objfile);
3089
3090 /* Find the first and last text address. dbx_symfile_read seems to
3091 want this. */
3092 find_text_range (sym_bfd, objfile);
3093
3094 #define ELF_STABS_SYMBOL_SIZE 12 /* XXX FIXME XXX */
3095 DBX_SYMBOL_SIZE (objfile) = ELF_STABS_SYMBOL_SIZE;
3096 DBX_SYMCOUNT (objfile)
3097 = bfd_section_size (stabsect) / DBX_SYMBOL_SIZE (objfile);
3098 DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
3099 DBX_SYMTAB_OFFSET (objfile) = stabsect->filepos;
3100 DBX_STAB_SECTION (objfile) = stabsect;
3101
3102 if (stabstrsize > bfd_get_size (sym_bfd))
3103 error (_("ridiculous string table size: %d bytes"), stabstrsize);
3104 DBX_STRINGTAB (objfile) = (char *)
3105 obstack_alloc (&objfile->objfile_obstack, stabstrsize + 1);
3106 OBJSTAT (objfile, sz_strtab += stabstrsize + 1);
3107
3108 /* Now read in the string table in one big gulp. */
3109
3110 val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
3111 if (val < 0)
3112 perror_with_name (name);
3113 val = bfd_read (DBX_STRINGTAB (objfile), stabstrsize, sym_bfd);
3114 if (val != stabstrsize)
3115 perror_with_name (name);
3116
3117 stabsread_new_init ();
3118 free_header_files ();
3119 init_header_files ();
3120
3121 processing_acc_compilation = 1;
3122
3123 symbuf_read = 0;
3124 symbuf_left = bfd_section_size (stabsect);
3125
3126 scoped_restore restore_stabs_data = make_scoped_restore (&stabs_data);
3127 gdb::unique_xmalloc_ptr<gdb_byte> data_holder;
3128
3129 stabs_data = symfile_relocate_debug_section (objfile, stabsect, NULL);
3130 if (stabs_data)
3131 data_holder.reset (stabs_data);
3132
3133 /* In an elf file, we've already installed the minimal symbols that came
3134 from the elf (non-stab) symbol table, so always act like an
3135 incremental load here. dbx_symfile_read should not generate any new
3136 minimal symbols, since we will have already read the ELF dynamic symbol
3137 table and normal symbol entries won't be in the ".stab" section; but in
3138 case it does, it will install them itself. */
3139 dbx_symfile_read (objfile, 0);
3140 }
3141 \f
3142 /* Scan and build partial symbols for a file with special sections for stabs
3143 and stabstrings. The file has already been processed to get its minimal
3144 symbols, and any other symbols that might be necessary to resolve GSYMs.
3145
3146 This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
3147 rolled into one.
3148
3149 OBJFILE is the object file we are reading symbols from.
3150 ADDR is the address relative to which the symbols are (e.g. the base address
3151 of the text segment).
3152 STAB_NAME is the name of the section that contains the stabs.
3153 STABSTR_NAME is the name of the section that contains the stab strings.
3154
3155 This routine is mostly copied from dbx_symfile_init and
3156 dbx_symfile_read. */
3157
3158 void
3159 stabsect_build_psymtabs (struct objfile *objfile, char *stab_name,
3160 char *stabstr_name, char *text_name)
3161 {
3162 int val;
3163 bfd *sym_bfd = objfile->obfd.get ();
3164 const char *name = bfd_get_filename (sym_bfd);
3165 asection *stabsect;
3166 asection *stabstrsect;
3167 asection *text_sect;
3168
3169 stabsect = bfd_get_section_by_name (sym_bfd, stab_name);
3170 stabstrsect = bfd_get_section_by_name (sym_bfd, stabstr_name);
3171
3172 if (!stabsect)
3173 return;
3174
3175 if (!stabstrsect)
3176 error (_("stabsect_build_psymtabs: Found stabs (%s), "
3177 "but not string section (%s)"),
3178 stab_name, stabstr_name);
3179
3180 dbx_objfile_data_key.emplace (objfile);
3181
3182 text_sect = bfd_get_section_by_name (sym_bfd, text_name);
3183 if (!text_sect)
3184 error (_("Can't find %s section in symbol file"), text_name);
3185 DBX_TEXT_ADDR (objfile) = bfd_section_vma (text_sect);
3186 DBX_TEXT_SIZE (objfile) = bfd_section_size (text_sect);
3187
3188 DBX_SYMBOL_SIZE (objfile) = sizeof (struct external_nlist);
3189 DBX_SYMCOUNT (objfile) = bfd_section_size (stabsect)
3190 / DBX_SYMBOL_SIZE (objfile);
3191 DBX_STRINGTAB_SIZE (objfile) = bfd_section_size (stabstrsect);
3192 DBX_SYMTAB_OFFSET (objfile) = stabsect->filepos; /* XXX - FIXME: POKING
3193 INSIDE BFD DATA
3194 STRUCTURES */
3195
3196 if (DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
3197 error (_("ridiculous string table size: %d bytes"),
3198 DBX_STRINGTAB_SIZE (objfile));
3199 DBX_STRINGTAB (objfile) = (char *)
3200 obstack_alloc (&objfile->objfile_obstack,
3201 DBX_STRINGTAB_SIZE (objfile) + 1);
3202 OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile) + 1);
3203
3204 /* Now read in the string table in one big gulp. */
3205
3206 val = bfd_get_section_contents (sym_bfd, /* bfd */
3207 stabstrsect, /* bfd section */
3208 DBX_STRINGTAB (objfile), /* input buffer */
3209 0, /* offset into section */
3210 DBX_STRINGTAB_SIZE (objfile)); /* amount to
3211 read */
3212
3213 if (!val)
3214 perror_with_name (name);
3215
3216 stabsread_new_init ();
3217 free_header_files ();
3218 init_header_files ();
3219
3220 /* Now, do an incremental load. */
3221
3222 processing_acc_compilation = 1;
3223 dbx_symfile_read (objfile, 0);
3224 }
3225 \f
3226 static const struct sym_fns aout_sym_fns =
3227 {
3228 dbx_new_init, /* init anything gbl to entire symtab */
3229 dbx_symfile_init, /* read initial info, setup for sym_read() */
3230 dbx_symfile_read, /* read a symbol file into symtab */
3231 dbx_symfile_finish, /* finished with file, cleanup */
3232 default_symfile_offsets, /* parse user's offsets to internal form */
3233 default_symfile_segments, /* Get segment information from a file. */
3234 NULL,
3235 default_symfile_relocate, /* Relocate a debug section. */
3236 NULL, /* sym_probe_fns */
3237 };
3238
3239 void _initialize_dbxread ();
3240 void
3241 _initialize_dbxread ()
3242 {
3243 add_symtab_fns (bfd_target_aout_flavour, &aout_sym_fns);
3244 }