]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/dwarf2/loc.h
Update copyright year range in header of all files managed by GDB
[thirdparty/binutils-gdb.git] / gdb / dwarf2 / loc.h
CommitLineData
852483bc
MK
1/* DWARF 2 location expression support for GDB.
2
213516ef 3 Copyright (C) 2003-2023 Free Software Foundation, Inc.
4c2df51b
DJ
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
4c2df51b
DJ
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
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
4c2df51b
DJ
19
20#if !defined (DWARF2LOC_H)
21#define DWARF2LOC_H
22
82ca8957 23#include "dwarf2/expr.h"
b64f50a1 24
768a979c 25struct symbol_computed_ops;
a50264ba 26struct dwarf2_per_objfile;
ae0d2f24 27struct dwarf2_per_cu_data;
8cf6f0b1 28struct dwarf2_loclist_baton;
9f6f94ff
TT
29struct agent_expr;
30struct axs_value;
a67af2b9 31
4c2df51b
DJ
32/* This header is private to the DWARF-2 reader. It is shared between
33 dwarf2read.c and dwarf2loc.c. */
34
8e3b41a9 35/* `set debug entry-values' setting. */
ccce17b0 36extern unsigned int entry_values_debug;
8e3b41a9 37
8cf6f0b1
TT
38/* Find a particular location expression from a location list. */
39const gdb_byte *dwarf2_find_location_expression
40 (struct dwarf2_loclist_baton *baton,
41 size_t *locexpr_length,
42 CORE_ADDR pc);
43
af945b75
TT
44/* Find the frame base information for FRAMEFUNC at PC. START is an
45 out parameter which is set to point to the DWARF expression to
46 compute. LENGTH is an out parameter which is set to the length of
47 the DWARF expression. This throws an exception on error or if an
48 expression is not found; the returned length will never be
49 zero. */
50
51extern void func_get_frame_base_dwarf_block (struct symbol *framefunc,
52 CORE_ADDR pc,
53 const gdb_byte **start,
54 size_t *length);
55
f4091d26
ZZ
56/* A helper function to find the definition of NAME and compute its
57 value. Returns nullptr if the name is not found. */
a580d960 58
f4091d26 59value *compute_var_value (const char *name);
a580d960 60
0a2b69d0
ZZ
61/* Fetch call_site_parameter from caller matching KIND and KIND_U.
62 FRAME is for callee.
63
64 Function always returns non-NULL, it throws NO_ENTRY_VALUE_ERROR
65 otherwise. */
66
67struct call_site_parameter *dwarf_expr_reg_to_entry_parameter
bd2b40ac 68 (frame_info_ptr frame, enum call_site_parameter_kind kind,
0a2b69d0
ZZ
69 union call_site_parameter_u kind_u, dwarf2_per_cu_data **per_cu_return,
70 dwarf2_per_objfile **per_objfile_return);
71
72
98bfdba5
PA
73/* Evaluate a location description, starting at DATA and with length
74 SIZE, to find the current location of variable of TYPE in the context
70454ee7
ZZ
75 of FRAME. AS_LVAL defines if the resulting struct value is expected to
76 be a value or a location description. */
98bfdba5
PA
77
78struct value *dwarf2_evaluate_loc_desc (struct type *type,
bd2b40ac 79 frame_info_ptr frame,
98bfdba5 80 const gdb_byte *data,
56eb65bd 81 size_t size,
9f47c707 82 dwarf2_per_cu_data *per_cu,
70454ee7
ZZ
83 dwarf2_per_objfile *per_objfile,
84 bool as_lval = true);
98bfdba5 85
df25ebbd
JB
86/* A chain of addresses that might be needed to resolve a dynamic
87 property. */
88
89struct property_addr_info
90{
91 /* The type of the object whose dynamic properties, if any, are
92 being resolved. */
93 struct type *type;
94
c3345124 95 /* If not NULL, a buffer containing the object's value. */
b249d2c2 96 gdb::array_view<const gdb_byte> valaddr;
c3345124 97
df25ebbd
JB
98 /* The address of that object. */
99 CORE_ADDR addr;
100
101 /* If not NULL, a pointer to the info for the object containing
102 the object described by this node. */
103 struct property_addr_info *next;
104};
105
63e43d3a
PMR
106/* Converts a dynamic property into a static one. FRAME is the frame in which
107 the property is evaluated; if NULL, the selected frame (if any) is used
108 instead.
109
110 ADDR_STACK is the stack of addresses that might be needed to evaluate the
111 property. When evaluating a property that is not related to a type, it can
112 be NULL.
113
603490bf 114 Returns true if PROP could be converted and the static value is passed
61122aa9
TT
115 back into VALUE, otherwise returns false.
116
1fb43cf7
AB
117 Any values in PUSH_VALUES will be pushed before evaluating the location
118 expression, PUSH_VALUES[0] will be pushed first, then PUSH_VALUES[1],
119 etc. This means the during evaluation PUSH_VALUES[0] will be at the
120 bottom of the stack. */
80180f79 121
603490bf 122bool dwarf2_evaluate_property (const struct dynamic_prop *prop,
bd2b40ac 123 frame_info_ptr frame,
fe26d3a3 124 const struct property_addr_info *addr_stack,
61122aa9 125 CORE_ADDR *value,
1fb43cf7 126 gdb::array_view<CORE_ADDR> push_values = {});
80180f79 127
bb2ec1b3
TT
128/* A helper for the compiler interface that compiles a single dynamic
129 property to C code.
130
131 STREAM is where the C code is to be written.
132 RESULT_NAME is the name of the generated variable.
133 GDBARCH is the architecture to use.
134 REGISTERS_USED is a bit-vector that is filled to note which
135 registers are required by the generated expression.
136 PROP is the property for which code is generated.
137 ADDRESS is the address at which the property is considered to be
138 evaluated.
139 SYM the originating symbol, used for error reporting. */
140
d82b3862 141void dwarf2_compile_property_to_c (string_file *stream,
bb2ec1b3
TT
142 const char *result_name,
143 struct gdbarch *gdbarch,
3637a558 144 std::vector<bool> &registers_used,
bb2ec1b3
TT
145 const struct dynamic_prop *prop,
146 CORE_ADDR address,
147 struct symbol *sym);
148
0d53c4c4
DJ
149/* The symbol location baton types used by the DWARF-2 reader (i.e.
150 SYMBOL_LOCATION_BATON for a LOC_COMPUTED symbol). "struct
151 dwarf2_locexpr_baton" is for a symbol with a single location
152 expression; "struct dwarf2_loclist_baton" is for a symbol with a
153 location list. */
4c2df51b
DJ
154
155struct dwarf2_locexpr_baton
156{
1d6edc3c
JK
157 /* Pointer to the start of the location expression. Valid only if SIZE is
158 not zero. */
947bb88f 159 const gdb_byte *data;
0d53c4c4 160
1d6edc3c
JK
161 /* Length of the location expression. For optimized out expressions it is
162 zero. */
56eb65bd 163 size_t size;
0d53c4c4 164
9a49df9d
AB
165 /* When true this location expression is a reference and actually
166 describes the address at which the value of the attribute can be
167 found. When false the expression provides the value of the attribute
168 directly. */
169 bool is_reference;
170
a50264ba
TT
171 /* The objfile that was used when creating this. */
172 dwarf2_per_objfile *per_objfile;
173
ae0d2f24
UW
174 /* The compilation unit containing the symbol whose location
175 we're computing. */
176 struct dwarf2_per_cu_data *per_cu;
0d53c4c4
DJ
177};
178
179struct dwarf2_loclist_baton
180{
181 /* The initial base address for the location list, based on the compilation
182 unit. */
183 CORE_ADDR base_address;
184
185 /* Pointer to the start of the location list. */
947bb88f 186 const gdb_byte *data;
0d53c4c4
DJ
187
188 /* Length of the location list. */
56eb65bd 189 size_t size;
0d53c4c4 190
a50264ba
TT
191 /* The objfile that was used when creating this. */
192 dwarf2_per_objfile *per_objfile;
193
ae0d2f24
UW
194 /* The compilation unit containing the symbol whose location
195 we're computing. */
196 struct dwarf2_per_cu_data *per_cu;
f664829e
DE
197
198 /* Non-zero if the location list lives in .debug_loc.dwo.
199 The format of entries in this section are different. */
200 unsigned char from_dwo;
4c2df51b
DJ
201};
202
df25ebbd
JB
203/* The baton used when a dynamic property is an offset to a parent
204 type. This can be used, for instance, then the bound of an array
205 inside a record is determined by the value of another field inside
206 that record. */
207
208struct dwarf2_offset_baton
209{
210 /* The offset from the parent type where the value of the property
211 is stored. In the example provided above, this would be the offset
212 of the field being used as the array bound. */
213 LONGEST offset;
214
215 /* The type of the object whose property is dynamic. In the example
6471e7d2 216 provided above, this would the array's index type. */
df25ebbd
JB
217 struct type *type;
218};
219
80180f79
SA
220/* A dynamic property is either expressed as a single location expression
221 or a location list. If the property is an indirection, pointing to
9a49df9d
AB
222 another die, keep track of the targeted type in PROPERTY_TYPE.
223 Alternatively, if the property location gives the property value
224 directly then it will have PROPERTY_TYPE. */
80180f79
SA
225
226struct dwarf2_property_baton
227{
228 /* If the property is an indirection, we need to evaluate the location
9a49df9d
AB
229 in the context of the type PROPERTY_TYPE. If the property is supplied
230 by value then it will be of PROPERTY_TYPE. This field should never be
231 NULL. */
232 struct type *property_type;
80180f79
SA
233 union
234 {
9a49df9d
AB
235 /* Location expression either evaluated in the context of
236 PROPERTY_TYPE, or a value of type PROPERTY_TYPE. */
80180f79
SA
237 struct dwarf2_locexpr_baton locexpr;
238
9a49df9d 239 /* Location list to be evaluated in the context of PROPERTY_TYPE. */
80180f79 240 struct dwarf2_loclist_baton loclist;
df25ebbd 241
9a49df9d 242 /* The location is an offset to PROPERTY_TYPE. */
df25ebbd 243 struct dwarf2_offset_baton offset_info;
80180f79
SA
244 };
245};
246
768a979c
UW
247extern const struct symbol_computed_ops dwarf2_locexpr_funcs;
248extern const struct symbol_computed_ops dwarf2_loclist_funcs;
4c2df51b 249
f1e6e072
TT
250extern const struct symbol_block_ops dwarf2_block_frame_base_locexpr_funcs;
251extern const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs;
252
111c6489
JK
253/* Determined tail calls for constructing virtual tail call frames. */
254
255struct call_site_chain
256 {
257 /* Initially CALLERS == CALLEES == LENGTH. For partially ambiguous result
258 CALLERS + CALLEES < LENGTH. */
259 int callers, callees, length;
260
261 /* Variably sized array with LENGTH elements. Later [0..CALLERS-1] contain
262 top (GDB "prev") sites and [LENGTH-CALLEES..LENGTH-1] contain bottom
263 (GDB "next") sites. One is interested primarily in the PC field. */
264 struct call_site *call_site[1];
265 };
266
8084e579
TT
267extern gdb::unique_xmalloc_ptr<call_site_chain> call_site_find_chain
268 (struct gdbarch *gdbarch, CORE_ADDR caller_pc, CORE_ADDR callee_pc);
111c6489 269
d064d1be
JK
270/* A helper function to convert a DWARF register to an arch register.
271 ARCH is the architecture.
272 DWARF_REG is the register.
0fde2c53
DE
273 If DWARF_REG is bad then a complaint is issued and -1 is returned.
274 Note: Some targets get this wrong. */
d064d1be 275
0fde2c53
DE
276extern int dwarf_reg_to_regnum (struct gdbarch *arch, int dwarf_reg);
277
278/* A wrapper on dwarf_reg_to_regnum to throw an exception if the
279 DWARF register cannot be translated to an architecture register.
280 This takes a ULONGEST instead of an int because some callers actually have
281 a ULONGEST. Negative values passed as ints will still be flagged as
282 invalid. */
283
284extern int dwarf_reg_to_regnum_or_error (struct gdbarch *arch,
285 ULONGEST dwarf_reg);
d064d1be 286
ba5bc3e5
ZZ
287/* Helper function which throws an error if a synthetic pointer is
288 invalid. */
289
290extern void invalid_synthetic_pointer ();
291
f4091d26
ZZ
292/* Fetch the value pointed to by a synthetic pointer. */
293
294extern struct value *indirect_synthetic_pointer
295 (sect_offset die, LONGEST byte_offset, dwarf2_per_cu_data *per_cu,
bd2b40ac 296 dwarf2_per_objfile *per_objfile, frame_info_ptr frame,
f4091d26
ZZ
297 struct type *type, bool resolve_abstract_p = false);
298
a0eda3df
CL
299/* Read parameter of TYPE at (callee) FRAME's function entry. KIND and KIND_U
300 are used to match DW_AT_location at the caller's
301 DW_TAG_call_site_parameter.
302
303 Function always returns non-NULL value. It throws NO_ENTRY_VALUE_ERROR if
304 it cannot resolve the parameter for any reason. */
305
306extern struct value *value_of_dwarf_reg_entry (struct type *type,
307 struct frame_info_ptr frame,
308 enum call_site_parameter_kind kind,
309 union call_site_parameter_u kind_u);
6c111a4e 310#endif /* DWARF2LOC_H */