GDB (xrefs)
/tmp/gdb-7.10/gdb/psympriv.h
Go to the documentation of this file.
1 /* Private partial symbol table definitions.
2 
3  Copyright (C) 2009-2015 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 
26 
27 /* A partial_symbol records the name, domain, and address class of
28  symbols whose types we have not parsed yet. For functions, it also
29  contains their memory address, so we can find them from a PC value.
30  Each partial_symbol sits in a partial_symtab, all of which are chained
31  on a partial symtab list and which points to the corresponding
32  normal symtab once the partial_symtab has been referenced. */
33 
34 /* This structure is space critical. See space comments at the top of
35  symtab.h. */
36 
38 {
39 
40  /* The general symbol info required for all types of symbols. */
41 
43 
44  /* Name space code. */
45 
46  ENUM_BITFIELD(domain_enum_tag) domain : 6;
47 
48  /* Address class (for info_symbols). Note that we don't allow
49  synthetic "aclass" values here at present, simply because there's
50  no need. */
51 
52  ENUM_BITFIELD(address_class) aclass : 6;
53 
54 };
55 
56 #define PSYMBOL_DOMAIN(psymbol) (psymbol)->domain
57 #define PSYMBOL_CLASS(psymbol) (psymbol)->aclass
58 
59 /* A convenience enum to give names to some constants used when
60  searching psymtabs. This is internal to psymtab and should not be
61  used elsewhere. */
62 
64  {
68  };
69 
70 /* Each source file that has not been fully read in is represented by
71  a partial_symtab. This contains the information on where in the
72  executable the debugging symbols for a specific file are, and a
73  list of names of global symbols which are located in this file.
74  They are all chained on partial symtab lists.
75 
76  Even after the source file has been read into a symtab, the
77  partial_symtab remains around. They are allocated on an obstack,
78  objfile_obstack. */
79 
80 struct partial_symtab
81 {
82 
83  /* Chain of all existing partial symtabs. */
84 
85  struct partial_symtab *next;
86 
87  /* Name of the source file which this partial_symtab defines,
88  or if the psymtab is anonymous then a descriptive name for
89  debugging purposes, or "". It must not be NULL. */
90 
91  const char *filename;
92 
93  /* Full path of the source file. NULL if not known. */
94 
95  char *fullname;
96 
97  /* Directory in which it was compiled, or NULL if we don't know. */
98 
99  const char *dirname;
100 
101  /* Range of text addresses covered by this file; texthigh is the
102  beginning of the next section. Do not use if PSYMTABS_ADDRMAP_SUPPORTED
103  is set. */
104 
107 
108  /* If NULL, this is an ordinary partial symbol table.
109 
110  If non-NULL, this holds a single includer of this partial symbol
111  table, and this partial symbol table is a shared one.
112 
113  A shared psymtab is one that is referenced by multiple other
114  psymtabs, and which conceptually has its contents directly
115  included in those.
116 
117  Shared psymtabs have special semantics. When a search finds a
118  symbol in a shared table, we instead return one of the non-shared
119  tables that include this one.
120 
121  A shared psymtabs can be referred to by other shared ones.
122 
123  The psymtabs that refer to a shared psymtab will list the shared
124  psymtab in their 'dependencies' array.
125 
126  In DWARF terms, a shared psymtab is a DW_TAG_partial_unit; but
127  of course using a name based on that would be too confusing, so
128  "shared" was chosen instead.
129 
130  Only a single user is needed because, when expanding a shared
131  psymtab, we only need to expand its "canonical" non-shared user.
132  The choice of which one should be canonical is left to the
133  debuginfo reader; it can be arbitrary. */
134 
135  struct partial_symtab *user;
136 
137  /* Array of pointers to all of the partial_symtab's which this one
138  depends on. Since this array can only be set to previous or
139  the current (?) psymtab, this dependency tree is guaranteed not
140  to have any loops. "depends on" means that symbols must be read
141  for the dependencies before being read for this psymtab; this is
142  for type references in stabs, where if foo.c includes foo.h, declarations
143  in foo.h may use type numbers defined in foo.c. For other debugging
144  formats there may be no need to use dependencies. */
145 
146  struct partial_symtab **dependencies;
147 
149 
150  /* Global symbol list. This list will be sorted after readin to
151  improve access. Binary search will be the usual method of
152  finding a symbol within it. globals_offset is an integer offset
153  within global_psymbols[]. */
154 
157 
158  /* Static symbol list. This list will *not* be sorted after readin;
159  to find a symbol in it, exhaustive search must be used. This is
160  reasonable because searches through this list will eventually
161  lead to either the read in of a files symbols for real (assumed
162  to take a *lot* of time; check) or an error (and we don't care
163  how long errors take). This is an offset and size within
164  static_psymbols[]. */
165 
168 
169  /* Non-zero if the symtab corresponding to this psymtab has been
170  readin. This is located here so that this structure packs better
171  on 64-bit systems. */
172 
173  unsigned char readin;
174 
175  /* True iff objfile->psymtabs_addrmap is properly populated for this
176  partial_symtab. For discontiguous overlapping psymtabs is the only usable
177  info in PSYMTABS_ADDRMAP. */
178 
180 
181  /* True if the name of this partial symtab is not a source file name. */
182 
183  unsigned char anonymous;
184 
185  /* A flag that is temporarily used when searching psymtabs. */
186 
188 
189  /* Pointer to compunit eventually allocated for this source file, 0 if
190  !readin or if we haven't looked for the symtab after it was readin. */
191 
193 
194  /* Pointer to function which will read in the symtab corresponding to
195  this psymtab. */
196 
197  void (*read_symtab) (struct partial_symtab *, struct objfile *);
198 
199  /* Information that lets read_symtab() locate the part of the symbol table
200  that this psymtab corresponds to. This information is private to the
201  format-dependent symbol reading routines. For further detail examine
202  the various symbol reading modules. */
203 
205 };
206 
207 extern void sort_pst_symbols (struct objfile *, struct partial_symtab *);
208 
209 /* Add any kind of symbol to a psymbol_allocation_list. */
210 
211 extern void add_psymbol_to_list (const char *, int,
212  int, domain_enum,
213  enum address_class,
214  struct psymbol_allocation_list *,
215  long, CORE_ADDR,
216  enum language, struct objfile *);
217 
218 extern void init_psymbol_list (struct objfile *, int);
219 
220 extern struct partial_symtab *start_psymtab_common (struct objfile *,
221  const char *, CORE_ADDR,
222  struct partial_symbol **,
223  struct partial_symbol **);
224 
225 extern struct partial_symtab *allocate_psymtab (const char *,
226  struct objfile *)
227  ATTRIBUTE_NONNULL (1);
228 
229 extern void discard_psymtab (struct objfile *, struct partial_symtab *);
230 
231 extern struct cleanup *make_cleanup_discard_psymtabs (struct objfile *);
232 
233 /* Traverse all psymtabs in one objfile. */
234 
235 #define ALL_OBJFILE_PSYMTABS(objfile, p) \
236  for ((p) = (objfile) -> psymtabs; (p) != NULL; (p) = (p) -> next)
237 
238 #endif /* PSYMPRIV_H */
const char * filename
Definition: psympriv.h:91
domain_enum_tag
Definition: symtab.h:432
void discard_psymtab(struct objfile *, struct partial_symtab *)
Definition: psymtab.c:1824
unsigned char readin
Definition: psympriv.h:173
bfd_vma CORE_ADDR
Definition: common-types.h:41
struct type ** const(pascal_builtin_types[])
enum domain_enum_tag domain_enum
struct general_symbol_info ginfo
Definition: psympriv.h:42
__extension__ enum domain_enum_tag domain
Definition: psympriv.h:46
int n_static_syms
Definition: psympriv.h:167
int globals_offset
Definition: psympriv.h:155
void init_psymbol_list(struct objfile *, int)
Definition: psymtab.c:1737
struct partial_symtab * start_psymtab_common(struct objfile *, const char *, CORE_ADDR, struct partial_symbol **, struct partial_symbol **)
Definition: psymtab.c:1516
struct cleanup * make_cleanup_discard_psymtabs(struct objfile *)
Definition: psymtab.c:1876
int statics_offset
Definition: psympriv.h:166
address_class
Definition: symtab.h:493
__extension__ enum psymtab_search_status searched_flag
Definition: psympriv.h:187
CORE_ADDR textlow
Definition: psympriv.h:105
int number_of_dependencies
Definition: psympriv.h:148
unsigned char psymtabs_addrmap_supported
Definition: psympriv.h:179
struct partial_symtab * user
Definition: psympriv.h:135
void * read_symtab_private
Definition: psympriv.h:204
struct partial_symtab * allocate_psymtab(const char *, struct objfile *) ATTRIBUTE_NONNULL(1)
Definition: psymtab.c:1774
void add_psymbol_to_list(const char *, int, int, domain_enum, enum address_class, struct psymbol_allocation_list *, long, CORE_ADDR, enum language, struct objfile *)
int n_global_syms
Definition: psympriv.h:156
void sort_pst_symbols(struct objfile *, struct partial_symtab *)
Definition: psymtab.c:1501
struct partial_symtab * next
Definition: psympriv.h:85
const char * dirname
Definition: psympriv.h:99
struct partial_symtab ** dependencies
Definition: psympriv.h:146
char * fullname
Definition: psympriv.h:95
void(* read_symtab)(struct partial_symtab *, struct objfile *)
Definition: psympriv.h:197
unsigned char anonymous
Definition: psympriv.h:183
language
Definition: defs.h:167
psymtab_search_status
Definition: psympriv.h:63
__extension__ enum address_class aclass
Definition: psympriv.h:52
CORE_ADDR texthigh
Definition: psympriv.h:106