]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/psymtab.h
Add two methods to tui_data_window
[thirdparty/binutils-gdb.git] / gdb / psymtab.h
CommitLineData
ccefe4c4
TT
1/* Public partial symbol table definitions.
2
42a4f53d 3 Copyright (C) 2009-2019 Free Software Foundation, Inc.
ccefe4c4
TT
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 PSYMTAB_H
21#define PSYMTAB_H
22
a9342b62 23#include "gdb_obstack.h"
44b13c5a 24#include "symfile.h"
268a13a5 25#include "gdbsupport/next-iterator.h"
25629dfd 26#include "bcache.h"
44b13c5a 27
d320c2b5
TT
28struct partial_symbol;
29
d320c2b5 30/* An instance of this class manages the partial symbol tables and
8d7bcccb
TT
31 partial symbols for a given objfile.
32
33 The core psymtab functions -- those in psymtab.c -- arrange for
34 nearly all psymtab- and psymbol-related allocations to happen
35 either in the psymtab_storage object (either on its obstack or in
36 other memory managed by this class), or on the per-BFD object. The
37 only link from the psymtab storage object back to the objfile (or
38 objfile_obstack) that is made by the core psymtab code is the
39 compunit_symtab member in the psymtab.
40
41 However, it is up to each symbol reader to maintain this invariant
42 in other ways, if it wants to reuse psymtabs across multiple
43 objfiles. The main issue here is ensuring that read_symtab_private
44 does not point into objfile_obstack. */
cbd70537 45
d320c2b5
TT
46class psymtab_storage
47{
48public:
ccefe4c4 49
8d7bcccb 50 psymtab_storage ();
9291a0cd 51
d320c2b5 52 ~psymtab_storage ();
b22a7c6a 53
d320c2b5
TT
54 DISABLE_COPY_AND_ASSIGN (psymtab_storage);
55
56 /* Discard all partial symbol tables starting with "psymtabs" and
57 proceeding until "to" has been discarded. */
b22a7c6a 58
d320c2b5 59 void discard_psymtabs_to (struct partial_symtab *to)
b22a7c6a 60 {
d320c2b5
TT
61 while (psymtabs != to)
62 discard_psymtab (psymtabs);
b22a7c6a 63 }
d320c2b5
TT
64
65 /* Discard the partial symbol table. */
66
67 void discard_psymtab (struct partial_symtab *pst);
68
5923a04c
TT
69 /* Return the obstack that is used for storage by this object. */
70
71 struct obstack *obstack ()
72 {
8d7bcccb
TT
73 if (!m_obstack.has_value ())
74 m_obstack.emplace ();
75 return &*m_obstack;
5923a04c
TT
76 }
77
a9342b62
TT
78 /* Allocate storage for the "dependencies" field of a psymtab.
79 NUMBER says how many dependencies there are. */
80
81 struct partial_symtab **allocate_dependencies (int number)
82 {
83 return OBSTACK_CALLOC (obstack (), number, struct partial_symtab *);
84 }
85
b596a3c7
TT
86 /* Allocate a new psymtab on the psymtab obstack. The new psymtab
87 will be linked in to the "psymtabs" list, but otherwise all other
88 fields will be zero. */
89
90 struct partial_symtab *allocate_psymtab ();
91
f252c6d5
TT
92 typedef next_adapter<struct partial_symtab> partial_symtab_range;
93
94 /* A range adapter that makes it possible to iterate over all
95 psymtabs in one objfile. */
96
97 partial_symtab_range range ()
98 {
99 return partial_symtab_range (psymtabs);
100 }
101
d320c2b5
TT
102
103 /* Each objfile points to a linked list of partial symtabs derived from
104 this file, one partial symtab structure for each compilation unit
105 (source file). */
106
107 struct partial_symtab *psymtabs = nullptr;
108
109 /* Map addresses to the entries of PSYMTABS. It would be more efficient to
110 have a map per the whole process but ADDRMAP cannot selectively remove
111 its items during FREE_OBJFILE. This mapping is already present even for
112 PARTIAL_SYMTABs which still have no corresponding full SYMTABs read. */
113
114 struct addrmap *psymtabs_addrmap = nullptr;
115
d320c2b5
TT
116 /* A byte cache where we can stash arbitrary "chunks" of bytes that
117 will not change. */
118
25629dfd 119 struct bcache psymbol_cache;
d320c2b5
TT
120
121 /* Vectors of all partial symbols read in from file. The actual data
122 is stored in the objfile_obstack. */
123
124 std::vector<partial_symbol *> global_psymbols;
125 std::vector<partial_symbol *> static_psymbols;
5923a04c
TT
126
127private:
128
b596a3c7
TT
129 /* List of freed partial symtabs, available for re-use. */
130
131 struct partial_symtab *free_psymtabs = nullptr;
132
8d7bcccb
TT
133 /* The obstack where allocations are made. This is lazily allocated
134 so that we don't waste memory when there are no psymtabs. */
5923a04c 135
8d7bcccb 136 gdb::optional<auto_obstack> m_obstack;
b22a7c6a
TT
137};
138
d320c2b5 139
d320c2b5
TT
140extern const struct quick_symbol_functions psym_functions;
141
142extern const struct quick_symbol_functions dwarf2_gdb_index_functions;
143extern const struct quick_symbol_functions dwarf2_debug_names_functions;
144
b11896a5
TT
145/* Ensure that the partial symbols for OBJFILE have been loaded. If
146 VERBOSE is non-zero, then this will print a message when symbols
b22a7c6a
TT
147 are loaded. This function returns a range adapter suitable for
148 iterating over the psymtabs of OBJFILE. */
b11896a5 149
f252c6d5
TT
150extern psymtab_storage::partial_symtab_range require_partial_symbols
151 (struct objfile *objfile, int verbose);
b11896a5 152
ccefe4c4 153#endif /* PSYMTAB_H */