1 /* Shared code to pre-read a stab (dbx-style), when building a psymtab.
2 Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
3 1996, 1997, 1998, 1999, 2000, 2001
4 Free Software Foundation, Inc.
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
23 /* The following need to be defined:
24 SET_NAMESTRING() --Set namestring to name of symbol.
25 CUR_SYMBOL_TYPE --Type code of current symbol.
26 CUR_SYMBOL_VALUE --Value field of current symbol. May be adjusted here.
27 namestring - variable pointing to the name of the stab.
28 pst - the partial symbol table being built.
30 psymtab_include_list, includes_used, includes_allocated - list of include
31 file names (N_SOL) seen so far.
32 dependency_list, dependencies_used, dependencies_allocated - list of
33 N_EXCL stabs seen so far.
35 END_PSYMTAB -- end a partial symbol table.
36 START_PSYMTAB -- start a partial symbol table.
39 /* End of macro definitions, now let's handle them symbols! */
41 switch (CUR_SYMBOL_TYPE)
43 static struct complaint function_outside_compilation_unit = {
44 "function `%s' appears to be defined outside of all compilation units", 0, 0
48 * Standard, external, non-debugger, symbols
52 case N_NBTEXT | N_EXT:
53 CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
57 case N_NBDATA | N_EXT:
58 CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
64 case N_SETV | N_EXT: /* FIXME, is this in BSS? */
65 CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
74 record_minimal_symbol (namestring, CUR_SYMBOL_VALUE,
75 CUR_SYMBOL_TYPE, objfile); /* Always */
76 #endif /* DBXREAD_ONLY */
79 /* Standard, local, non-debugger, symbols */
83 /* We need to be able to deal with both N_FN or N_TEXT,
84 because we have no way of knowing whether the sys-supplied ld
85 or GNU ld was used to make the executable. Sequents throw
86 in another wrinkle -- they renumbered N_FN. */
92 CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
94 if ((namestring[0] == '-' && namestring[1] == 'l')
95 || (namestring[(nsl = strlen (namestring)) - 1] == 'o'
96 && namestring[nsl - 2] == '.'))
98 if (objfile->ei.entry_point < CUR_SYMBOL_VALUE &&
99 objfile->ei.entry_point >= last_o_file_start)
101 objfile->ei.entry_file_lowpc = last_o_file_start;
102 objfile->ei.entry_file_highpc = CUR_SYMBOL_VALUE;
104 if (past_first_source_file && pst
105 /* The gould NP1 uses low values for .o and -l symbols
106 which are not the address. */
107 && CUR_SYMBOL_VALUE >= pst->textlow)
109 END_PSYMTAB (pst, psymtab_include_list, includes_used,
110 symnum * symbol_size,
111 CUR_SYMBOL_VALUE > pst->texthigh
112 ? CUR_SYMBOL_VALUE : pst->texthigh,
113 dependency_list, dependencies_used, textlow_not_set);
114 pst = (struct partial_symtab *) 0;
116 dependencies_used = 0;
119 past_first_source_file = 1;
120 last_o_file_start = CUR_SYMBOL_VALUE;
124 #endif /* DBXREAD_ONLY */
128 CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
133 if (CUR_SYMBOL_VALUE != 0)
135 /* This is a "Fortran COMMON" symbol. See if the target
136 environment knows where it has been relocated to. */
141 if (target_lookup_symbol (namestring, &reladdr))
143 continue; /* Error in lookup; ignore symbol for now. */
145 CUR_SYMBOL_TYPE ^= (N_BSS ^ N_UNDF); /* Define it as a bss-symbol */
146 CUR_SYMBOL_VALUE = reladdr;
149 #endif /* DBXREAD_ONLY */
150 continue; /* Just undefined, not COMMON */
154 if (processing_acc_compilation && CUR_SYMBOL_STRX == 1)
156 /* Deal with relative offsets in the string table
157 used in ELF+STAB under Solaris. If we want to use the
158 n_strx field, which contains the name of the file,
159 we must adjust file_string_table_offset *before* calling
161 past_first_source_file = 1;
162 file_string_table_offset = next_file_string_table_offset;
163 next_file_string_table_offset =
164 file_string_table_offset + CUR_SYMBOL_VALUE;
165 if (next_file_string_table_offset < file_string_table_offset)
166 error ("string table offset backs up at %d", symnum);
167 /* FIXME -- replace error() with complaint. */
170 #endif /* DBXREAD_ONLY */
173 /* Lots of symbol types we can just ignore. */
180 /* Keep going . . . */
183 * Special symbol types for GNU
205 static int prev_so_symnum = -10;
206 static int first_so_symnum;
208 int prev_textlow_not_set;
210 valu = CUR_SYMBOL_VALUE + ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
212 prev_textlow_not_set = textlow_not_set;
214 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
215 /* A zero value is probably an indication for the SunPRO 3.0
216 compiler. end_psymtab explicitly tests for zero, so
217 don't relocate it. */
219 if (CUR_SYMBOL_VALUE == 0)
229 past_first_source_file = 1;
231 if (prev_so_symnum != symnum - 1)
232 { /* Here if prev stab wasn't N_SO */
233 first_so_symnum = symnum;
237 END_PSYMTAB (pst, psymtab_include_list, includes_used,
238 symnum * symbol_size,
239 valu > pst->texthigh ? valu : pst->texthigh,
240 dependency_list, dependencies_used,
241 prev_textlow_not_set);
242 pst = (struct partial_symtab *) 0;
244 dependencies_used = 0;
248 prev_so_symnum = symnum;
250 /* End the current partial symtab and start a new one */
254 /* Null name means end of .o file. Don't start a new one. */
255 if (*namestring == '\000')
258 /* Some compilers (including gcc) emit a pair of initial N_SOs.
259 The first one is a directory name; the second the file name.
260 If pst exists, is empty, and has a filename ending in '/',
261 we assume the previous N_SO was a directory name. */
263 p = strrchr (namestring, '/');
264 if (p && *(p + 1) == '\000')
265 continue; /* Simply ignore directory name SOs */
267 /* Some other compilers (C++ ones in particular) emit useless
268 SOs for non-existant .c files. We ignore all subsequent SOs that
269 immediately follow the first. */
272 pst = START_PSYMTAB (objfile,
274 first_so_symnum * symbol_size,
275 objfile->global_psymbols.next,
276 objfile->static_psymbols.next);
283 enum language tmp_language;
284 /* Add this bincl to the bincl_list for future EXCLs. No
285 need to save the string; it'll be around until
286 read_dbx_symtab function returns */
290 tmp_language = deduce_language_from_filename (namestring);
292 /* Only change the psymtab's language if we've learned
293 something useful (eg. tmp_language is not language_unknown).
294 In addition, to match what start_subfile does, never change
296 if (tmp_language != language_unknown
297 && (tmp_language != language_c
298 || psymtab_language != language_cplus))
299 psymtab_language = tmp_language;
303 /* FIXME: we should not get here without a PST to work on.
304 Attempt to recover. */
305 complain (&unclaimed_bincl_complaint, namestring, symnum);
308 add_bincl_to_list (pst, namestring, CUR_SYMBOL_VALUE);
310 /* Mark down an include file in the current psymtab */
312 goto record_include_file;
314 #else /* DBXREAD_ONLY */
321 enum language tmp_language;
322 /* Mark down an include file in the current psymtab */
326 tmp_language = deduce_language_from_filename (namestring);
328 /* Only change the psymtab's language if we've learned
329 something useful (eg. tmp_language is not language_unknown).
330 In addition, to match what start_subfile does, never change
332 if (tmp_language != language_unknown
333 && (tmp_language != language_c
334 || psymtab_language != language_cplus))
335 psymtab_language = tmp_language;
337 /* In C++, one may expect the same filename to come round many
338 times, when code is coming alternately from the main file
339 and from inline functions in other files. So I check to see
340 if this is a file we've seen before -- either the main
341 source file, or a previously included file.
343 This seems to be a lot of time to be spending on N_SOL, but
344 things like "break c-exp.y:435" need to work (I
345 suppose the psymtab_include_list could be hashed or put
346 in a binary tree, if profiling shows this is a major hog). */
347 if (pst && STREQ (namestring, pst->filename))
351 for (i = 0; i < includes_used; i++)
352 if (STREQ (namestring, psymtab_include_list[i]))
365 psymtab_include_list[includes_used++] = namestring;
366 if (includes_used >= includes_allocated)
368 char **orig = psymtab_include_list;
370 psymtab_include_list = (char **)
371 alloca ((includes_allocated *= 2) *
373 memcpy ((PTR) psymtab_include_list, (PTR) orig,
374 includes_used * sizeof (char *));
378 case N_LSYM: /* Typedef or automatic variable. */
379 case N_STSYM: /* Data seg var -- static */
380 case N_LCSYM: /* BSS " */
381 case N_ROSYM: /* Read-only data seg var -- static. */
382 case N_NBSTS: /* Gould nobase. */
383 case N_NBLCS: /* symbols. */
385 case N_GSYM: /* Global (extern) variable; can be
386 data or bss (sigh FIXME). */
388 /* Following may probably be ignored; I'll leave them here
389 for now (until I do Pascal and Modula 2 extensions). */
391 case N_PC: /* I may or may not need this; I
393 case N_M2C: /* I suspect that I can ignore this here. */
394 case N_SCOPE: /* Same. */
399 /* See if this is an end of function stab. */
400 if (pst && CUR_SYMBOL_TYPE == N_FUN && *namestring == '\000')
404 /* It's value is the size (in bytes) of the function for
405 function relative stabs, or the address of the function's
406 end for old style stabs. */
407 valu = CUR_SYMBOL_VALUE + last_function_start;
408 if (pst->texthigh == 0 || valu > pst->texthigh)
409 pst->texthigh = valu;
414 p = (char *) strchr (namestring, ':');
416 continue; /* Not a debugging symbol. */
420 /* Main processing section for debugging symbols which
421 the initial read through the symbol tables needs to worry
422 about. If we reach this point, the symbol which we are
423 considering is definitely one we are interested in.
424 p must also contain the (valid) index into the namestring
425 which indicates the debugging type symbol. */
430 CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
431 #ifdef STATIC_TRANSFORM_NAME
432 namestring = STATIC_TRANSFORM_NAME (namestring);
434 add_psymbol_to_list (namestring, p - namestring,
435 VAR_NAMESPACE, LOC_STATIC,
436 &objfile->static_psymbols,
438 psymtab_language, objfile);
441 CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
442 /* The addresses in these entries are reported to be
443 wrong. See the code that reads 'G's for symtabs. */
444 add_psymbol_to_list (namestring, p - namestring,
445 VAR_NAMESPACE, LOC_STATIC,
446 &objfile->global_psymbols,
448 psymtab_language, objfile);
452 /* When a 'T' entry is defining an anonymous enum, it
453 may have a name which is the empty string, or a
454 single space. Since they're not really defining a
455 symbol, those shouldn't go in the partial symbol
456 table. We do pick up the elements of such enums at
457 'check_enum:', below. */
458 if (p >= namestring + 2
459 || (p == namestring + 1
460 && namestring[0] != ' '))
462 add_psymbol_to_list (namestring, p - namestring,
463 STRUCT_NAMESPACE, LOC_TYPEDEF,
464 &objfile->static_psymbols,
466 psymtab_language, objfile);
469 /* Also a typedef with the same name. */
470 add_psymbol_to_list (namestring, p - namestring,
471 VAR_NAMESPACE, LOC_TYPEDEF,
472 &objfile->static_psymbols,
474 psymtab_language, objfile);
477 /* The semantics of C++ state that "struct foo { ... }"
478 also defines a typedef for "foo". Unfortuantely, cfront
479 never makes the typedef when translating from C++ to C.
480 We make the typedef here so that "ptype foo" works as
481 expected for cfront translated code. */
482 else if (psymtab_language == language_cplus)
484 /* Also a typedef with the same name. */
485 add_psymbol_to_list (namestring, p - namestring,
486 VAR_NAMESPACE, LOC_TYPEDEF,
487 &objfile->static_psymbols,
489 psymtab_language, objfile);
494 if (p != namestring) /* a name is there, not just :T... */
496 add_psymbol_to_list (namestring, p - namestring,
497 VAR_NAMESPACE, LOC_TYPEDEF,
498 &objfile->static_psymbols,
500 psymtab_language, objfile);
503 /* If this is an enumerated type, we need to
504 add all the enum constants to the partial symbol
505 table. This does not cover enums without names, e.g.
506 "enum {a, b} c;" in C, but fortunately those are
507 rare. There is no way for GDB to find those from the
508 enum type without spending too much time on it. Thus
509 to solve this problem, the compiler needs to put out the
510 enum in a nameless type. GCC2 does this. */
512 /* We are looking for something of the form
513 <name> ":" ("t" | "T") [<number> "="] "e"
514 {<constant> ":" <value> ","} ";". */
516 /* Skip over the colon and the 't' or 'T'. */
518 /* This type may be given a number. Also, numbers can come
519 in pairs like (0,26). Skip over it. */
520 while ((*p >= '0' && *p <= '9')
521 || *p == '(' || *p == ',' || *p == ')'
527 /* The aix4 compiler emits extra crud before the members. */
530 /* Skip over the type (?). */
534 /* Skip over the colon. */
538 /* We have found an enumerated type. */
539 /* According to comments in read_enum_type
540 a comma could end it instead of a semicolon.
541 I don't know where that happens.
543 while (*p && *p != ';' && *p != ',')
547 /* Check for and handle cretinous dbx symbol name
549 if (*p == '\\' || (*p == '?' && p[1] == '\0'))
550 p = next_symbol_text (objfile);
552 /* Point to the character after the name
553 of the enum constant. */
554 for (q = p; *q && *q != ':'; q++)
556 /* Note that the value doesn't matter for
557 enum constants in psymtabs, just in symtabs. */
558 add_psymbol_to_list (p, q - p,
559 VAR_NAMESPACE, LOC_CONST,
560 &objfile->static_psymbols, 0,
561 0, psymtab_language, objfile);
562 /* Point past the name. */
564 /* Skip over the value. */
565 while (*p && *p != ',')
567 /* Advance past the comma. */
574 /* Constant, e.g. from "const" in Pascal. */
575 add_psymbol_to_list (namestring, p - namestring,
576 VAR_NAMESPACE, LOC_CONST,
577 &objfile->static_psymbols, CUR_SYMBOL_VALUE,
578 0, psymtab_language, objfile);
584 int name_len = p - namestring;
585 char *name = xmalloc (name_len + 1);
586 memcpy (name, namestring, name_len);
587 name[name_len] = '\0';
588 complain (&function_outside_compilation_unit, name);
591 CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
593 /* Kludges for ELF/STABS with Sun ACC */
594 last_function_name = namestring;
595 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
596 /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
597 value for the bottom of the text seg in those cases. */
598 if (CUR_SYMBOL_VALUE == ANOFFSET (objfile->section_offsets,
599 SECT_OFF_TEXT (objfile)))
601 CORE_ADDR minsym_valu =
602 find_stab_function_addr (namestring, pst->filename, objfile);
603 /* find_stab_function_addr will return 0 if the minimal
604 symbol wasn't found. (Unfortunately, this might also
605 be a valid address.) Anyway, if it *does* return 0,
606 it is likely that the value was set correctly to begin
608 if (minsym_valu != 0)
609 CUR_SYMBOL_VALUE = minsym_valu;
611 if (pst && textlow_not_set)
613 pst->textlow = CUR_SYMBOL_VALUE;
619 /* Keep track of the start of the last function so we
620 can handle end of function symbols. */
621 last_function_start = CUR_SYMBOL_VALUE;
623 /* In reordered executables this function may lie outside
624 the bounds created by N_SO symbols. If that's the case
625 use the address of this function as the low bound for
626 the partial symbol table. */
629 || (CUR_SYMBOL_VALUE < pst->textlow
631 != ANOFFSET (objfile->section_offsets,
632 SECT_OFF_TEXT (objfile))))))
634 pst->textlow = CUR_SYMBOL_VALUE;
637 #endif /* DBXREAD_ONLY */
638 add_psymbol_to_list (namestring, p - namestring,
639 VAR_NAMESPACE, LOC_BLOCK,
640 &objfile->static_psymbols,
642 psymtab_language, objfile);
645 /* Global functions were ignored here, but now they
646 are put into the global psymtab like one would expect.
647 They're also in the minimal symbol table. */
651 int name_len = p - namestring;
652 char *name = xmalloc (name_len + 1);
653 memcpy (name, namestring, name_len);
654 name[name_len] = '\0';
655 complain (&function_outside_compilation_unit, name);
658 CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
660 /* Kludges for ELF/STABS with Sun ACC */
661 last_function_name = namestring;
662 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
663 /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
664 value for the bottom of the text seg in those cases. */
665 if (CUR_SYMBOL_VALUE == ANOFFSET (objfile->section_offsets,
666 SECT_OFF_TEXT (objfile)))
668 CORE_ADDR minsym_valu =
669 find_stab_function_addr (namestring, pst->filename, objfile);
670 /* find_stab_function_addr will return 0 if the minimal
671 symbol wasn't found. (Unfortunately, this might also
672 be a valid address.) Anyway, if it *does* return 0,
673 it is likely that the value was set correctly to begin
675 if (minsym_valu != 0)
676 CUR_SYMBOL_VALUE = minsym_valu;
678 if (pst && textlow_not_set)
680 pst->textlow = CUR_SYMBOL_VALUE;
686 /* Keep track of the start of the last function so we
687 can handle end of function symbols. */
688 last_function_start = CUR_SYMBOL_VALUE;
690 /* In reordered executables this function may lie outside
691 the bounds created by N_SO symbols. If that's the case
692 use the address of this function as the low bound for
693 the partial symbol table. */
696 || (CUR_SYMBOL_VALUE < pst->textlow
698 != ANOFFSET (objfile->section_offsets,
699 SECT_OFF_TEXT (objfile))))))
701 pst->textlow = CUR_SYMBOL_VALUE;
704 #endif /* DBXREAD_ONLY */
705 add_psymbol_to_list (namestring, p - namestring,
706 VAR_NAMESPACE, LOC_BLOCK,
707 &objfile->global_psymbols,
709 psymtab_language, objfile);
712 /* Two things show up here (hopefully); static symbols of
713 local scope (static used inside braces) or extensions
714 of structure symbols. We can ignore both. */
728 case '#': /* for symbol identification (used in live ranges) */
729 /* added to support cfront stabs strings */
730 case 'Z': /* for definition continuations */
731 case 'P': /* for prototypes */
735 /* It is a C++ nested symbol. We don't need to record it
736 (I don't think); if we try to look up foo::bar::baz,
737 then symbols for the symtab containing foo should get
739 /* Someone says sun cc puts out symbols like
740 /foo/baz/maclib::/usr/local/bin/maclib,
741 which would get here with a symbol type of ':'. */
745 /* Unexpected symbol descriptor. The second and subsequent stabs
746 of a continued stab can show up here. The question is
747 whether they ever can mimic a normal stab--it would be
748 nice if not, since we certainly don't want to spend the
749 time searching to the end of every string looking for
752 complain (&unknown_symchar_complaint, p[1]);
754 /* Ignore it; perhaps it is an extension that we don't
764 /* Find the corresponding bincl and mark that psymtab on the
765 psymtab dependency list */
767 struct partial_symtab *needed_pst =
768 find_corresponding_bincl_psymtab (namestring, CUR_SYMBOL_VALUE);
770 /* If this include file was defined earlier in this file,
772 if (needed_pst == pst)
780 for (i = 0; i < dependencies_used; i++)
781 if (dependency_list[i] == needed_pst)
787 /* If it's already in the list, skip the rest. */
791 dependency_list[dependencies_used++] = needed_pst;
792 if (dependencies_used >= dependencies_allocated)
794 struct partial_symtab **orig = dependency_list;
796 (struct partial_symtab **)
797 alloca ((dependencies_allocated *= 2)
798 * sizeof (struct partial_symtab *));
799 memcpy ((PTR) dependency_list, (PTR) orig,
801 * sizeof (struct partial_symtab *)));
803 fprintf_unfiltered (gdb_stderr, "Had to reallocate dependency list.\n");
804 fprintf_unfiltered (gdb_stderr, "New dependencies allocated: %d\n",
805 dependencies_allocated);
810 #endif /* DBXREAD_ONLY */
814 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
815 /* Solaris 2 end of module, finish current partial symbol table.
816 END_PSYMTAB will set pst->texthigh to the proper value, which
817 is necessary if a module compiled without debugging info
818 follows this module. */
821 END_PSYMTAB (pst, psymtab_include_list, includes_used,
822 symnum * symbol_size,
824 dependency_list, dependencies_used, textlow_not_set);
825 pst = (struct partial_symtab *) 0;
827 dependencies_used = 0;
834 HANDLE_RBRAC (CUR_SYMBOL_VALUE);
840 case N_SSYM: /* Claim: Structure or union element.
841 Hopefully, I can ignore this. */
842 case N_ENTRY: /* Alternate entry point; can ignore. */
843 case N_MAIN: /* Can definitely ignore this. */
844 case N_CATCH: /* These are GNU C++ extensions */
845 case N_EHDECL: /* that can safely be ignored here. */
855 case N_NSYMS: /* Ultrix 4.0: symbol count */
856 case N_DEFD: /* GNU Modula-2 */
857 case N_ALIAS: /* SunPro F77: alias name, ignore for now. */
859 case N_OBJ: /* useless types from Solaris */
861 /* These symbols aren't interesting; don't worry about them */
866 /* If we haven't found it yet, ignore it. It's probably some
867 new type we don't know about yet. */
868 complain (&unknown_symtype_complaint,
869 local_hex_string (CUR_SYMBOL_TYPE));