Commit | Line | Data |
---|---|---|
ccefe4c4 TT |
1 | /* Private partial symbol table definitions. |
2 | ||
3 | Copyright (C) 2009 Free Software Foundation, Inc. | |
4 | ||
5 | This file is part of GDB. | |
6 | ||
7 | This program is free software; you can redistribute it and/or modify | |
8 | it under the terms of the GNU General Public License as published by | |
9 | the Free Software Foundation; either version 3 of the License, or | |
10 | (at your option) any later version. | |
11 | ||
12 | This program is distributed in the hope that it will be useful, | |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | GNU General Public License for more details. | |
16 | ||
17 | You should have received a copy of the GNU General Public License | |
18 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ | |
19 | ||
20 | #ifndef PSYMPRIV_H | |
21 | #define PSYMPRIV_H | |
22 | ||
23 | #include "psymtab.h" | |
24 | ||
25 | /* A partial_symbol records the name, domain, and address class of | |
26 | symbols whose types we have not parsed yet. For functions, it also | |
27 | contains their memory address, so we can find them from a PC value. | |
28 | Each partial_symbol sits in a partial_symtab, all of which are chained | |
29 | on a partial symtab list and which points to the corresponding | |
30 | normal symtab once the partial_symtab has been referenced. */ | |
31 | ||
32 | /* This structure is space critical. See space comments at the top of | |
33 | symtab.h. */ | |
34 | ||
35 | struct partial_symbol | |
36 | { | |
37 | ||
38 | /* The general symbol info required for all types of symbols. */ | |
39 | ||
40 | struct general_symbol_info ginfo; | |
41 | ||
42 | /* Name space code. */ | |
43 | ||
44 | ENUM_BITFIELD(domain_enum_tag) domain : 6; | |
45 | ||
46 | /* Address class (for info_symbols) */ | |
47 | ||
48 | ENUM_BITFIELD(address_class) aclass : 6; | |
49 | ||
50 | }; | |
51 | ||
52 | #define PSYMBOL_DOMAIN(psymbol) (psymbol)->domain | |
53 | #define PSYMBOL_CLASS(psymbol) (psymbol)->aclass | |
54 | ||
55 | /* Each source file that has not been fully read in is represented by | |
56 | a partial_symtab. This contains the information on where in the | |
57 | executable the debugging symbols for a specific file are, and a | |
58 | list of names of global symbols which are located in this file. | |
59 | They are all chained on partial symtab lists. | |
60 | ||
61 | Even after the source file has been read into a symtab, the | |
62 | partial_symtab remains around. They are allocated on an obstack, | |
63 | objfile_obstack. */ | |
64 | ||
65 | struct partial_symtab | |
66 | { | |
67 | ||
68 | /* Chain of all existing partial symtabs. */ | |
69 | ||
70 | struct partial_symtab *next; | |
71 | ||
72 | /* Name of the source file which this partial_symtab defines */ | |
73 | ||
74 | char *filename; | |
75 | ||
76 | /* Full path of the source file. NULL if not known. */ | |
77 | ||
78 | char *fullname; | |
79 | ||
80 | /* Directory in which it was compiled, or NULL if we don't know. */ | |
81 | ||
82 | char *dirname; | |
83 | ||
84 | /* Information about the object file from which symbols should be read. */ | |
85 | ||
86 | struct objfile *objfile; | |
87 | ||
88 | /* Set of relocation offsets to apply to each section. */ | |
89 | ||
90 | struct section_offsets *section_offsets; | |
91 | ||
92 | /* Range of text addresses covered by this file; texthigh is the | |
93 | beginning of the next section. */ | |
94 | ||
95 | CORE_ADDR textlow; | |
96 | CORE_ADDR texthigh; | |
97 | ||
98 | /* Array of pointers to all of the partial_symtab's which this one | |
99 | depends on. Since this array can only be set to previous or | |
100 | the current (?) psymtab, this dependency tree is guaranteed not | |
101 | to have any loops. "depends on" means that symbols must be read | |
102 | for the dependencies before being read for this psymtab; this is | |
103 | for type references in stabs, where if foo.c includes foo.h, declarations | |
104 | in foo.h may use type numbers defined in foo.c. For other debugging | |
105 | formats there may be no need to use dependencies. */ | |
106 | ||
107 | struct partial_symtab **dependencies; | |
108 | ||
109 | int number_of_dependencies; | |
110 | ||
111 | /* Global symbol list. This list will be sorted after readin to | |
112 | improve access. Binary search will be the usual method of | |
113 | finding a symbol within it. globals_offset is an integer offset | |
114 | within global_psymbols[]. */ | |
115 | ||
116 | int globals_offset; | |
117 | int n_global_syms; | |
118 | ||
119 | /* Static symbol list. This list will *not* be sorted after readin; | |
120 | to find a symbol in it, exhaustive search must be used. This is | |
121 | reasonable because searches through this list will eventually | |
122 | lead to either the read in of a files symbols for real (assumed | |
123 | to take a *lot* of time; check) or an error (and we don't care | |
124 | how long errors take). This is an offset and size within | |
125 | static_psymbols[]. */ | |
126 | ||
127 | int statics_offset; | |
128 | int n_static_syms; | |
129 | ||
130 | /* Pointer to symtab eventually allocated for this source file, 0 if | |
131 | !readin or if we haven't looked for the symtab after it was readin. */ | |
132 | ||
133 | struct symtab *symtab; | |
134 | ||
135 | /* Pointer to function which will read in the symtab corresponding to | |
136 | this psymtab. */ | |
137 | ||
138 | void (*read_symtab) (struct partial_symtab *); | |
139 | ||
140 | /* Information that lets read_symtab() locate the part of the symbol table | |
141 | that this psymtab corresponds to. This information is private to the | |
142 | format-dependent symbol reading routines. For further detail examine | |
e38df1d0 | 143 | the various symbol reading modules. */ |
ccefe4c4 | 144 | |
e38df1d0 | 145 | void *read_symtab_private; |
ccefe4c4 TT |
146 | |
147 | /* Non-zero if the symtab corresponding to this psymtab has been readin */ | |
148 | ||
149 | unsigned char readin; | |
150 | }; | |
151 | ||
152 | extern void sort_pst_symbols (struct partial_symtab *); | |
153 | ||
154 | /* Traverse all psymtabs in one objfile. */ | |
155 | ||
156 | #define ALL_OBJFILE_PSYMTABS(objfile, p) \ | |
157 | for ((p) = (objfile) -> psymtabs; (p) != NULL; (p) = (p) -> next) | |
158 | ||
159 | /* Traverse all psymtabs in all objfiles. */ | |
160 | ||
161 | #define ALL_PSYMTABS(objfile, p) \ | |
162 | ALL_OBJFILES (objfile) \ | |
163 | ALL_OBJFILE_PSYMTABS (objfile, p) | |
164 | ||
165 | #endif /* PSYMPRIV_H */ |