]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/dwarf2/loc.c
gdb: remove TYPE_LENGTH
[thirdparty/binutils-gdb.git] / gdb / dwarf2 / loc.c
CommitLineData
4c2df51b 1/* DWARF 2 location expression support for GDB.
feb13ab0 2
4a94e368 3 Copyright (C) 2003-2022 Free Software Foundation, Inc.
feb13ab0 4
4c2df51b
DJ
5 Contributed by Daniel Jacobowitz, MontaVista Software, Inc.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7
JB
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
4c2df51b 13
a9762ec7
JB
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
4c2df51b
DJ
18
19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
4c2df51b
DJ
21
22#include "defs.h"
4de283e4
TT
23#include "ui-out.h"
24#include "value.h"
25#include "frame.h"
26#include "gdbcore.h"
27#include "target.h"
28#include "inferior.h"
d55e5aa6 29#include "ax.h"
4de283e4
TT
30#include "ax-gdb.h"
31#include "regcache.h"
32#include "objfiles.h"
edb3359d 33#include "block.h"
4de283e4 34#include "gdbcmd.h"
0fde2c53 35#include "complaints.h"
fa8f86ff 36#include "dwarf2.h"
82ca8957
TT
37#include "dwarf2/expr.h"
38#include "dwarf2/loc.h"
39#include "dwarf2/read.h"
40#include "dwarf2/frame.h"
f4382c45 41#include "dwarf2/leb.h"
4de283e4 42#include "compile/compile.h"
268a13a5 43#include "gdbsupport/selftest.h"
4de283e4
TT
44#include <algorithm>
45#include <vector>
46#include <unordered_set>
268a13a5
TT
47#include "gdbsupport/underlying.h"
48#include "gdbsupport/byte-vector.h"
4c2df51b 49
9f47c707
SM
50static struct value *dwarf2_evaluate_loc_desc_full
51 (struct type *type, struct frame_info *frame, const gdb_byte *data,
52 size_t size, dwarf2_per_cu_data *per_cu, dwarf2_per_objfile *per_objfile,
70454ee7 53 struct type *subobj_type, LONGEST subobj_byte_offset, bool as_lval = true);
8cf6f0b1 54
f664829e
DE
55/* Until these have formal names, we define these here.
56 ref: http://gcc.gnu.org/wiki/DebugFission
57 Each entry in .debug_loc.dwo begins with a byte that describes the entry,
58 and is then followed by data specific to that entry. */
59
60enum debug_loc_kind
61{
62 /* Indicates the end of the list of entries. */
63 DEBUG_LOC_END_OF_LIST = 0,
64
65 /* This is followed by an unsigned LEB128 number that is an index into
66 .debug_addr and specifies the base address for all following entries. */
67 DEBUG_LOC_BASE_ADDRESS = 1,
68
69 /* This is followed by two unsigned LEB128 numbers that are indices into
70 .debug_addr and specify the beginning and ending addresses, and then
71 a normal location expression as in .debug_loc. */
3771a44c
DE
72 DEBUG_LOC_START_END = 2,
73
74 /* This is followed by an unsigned LEB128 number that is an index into
75 .debug_addr and specifies the beginning address, and a 4 byte unsigned
76 number that specifies the length, and then a normal location expression
77 as in .debug_loc. */
78 DEBUG_LOC_START_LENGTH = 3,
f664829e 79
9fc3eaae 80 /* This is followed by two unsigned LEB128 operands. The values of these
81 operands are the starting and ending offsets, respectively, relative to
82 the applicable base address. */
83 DEBUG_LOC_OFFSET_PAIR = 4,
84
f664829e
DE
85 /* An internal value indicating there is insufficient data. */
86 DEBUG_LOC_BUFFER_OVERFLOW = -1,
87
88 /* An internal value indicating an invalid kind of entry was found. */
89 DEBUG_LOC_INVALID_ENTRY = -2
90};
91
b6807d98
TT
92/* Helper function which throws an error if a synthetic pointer is
93 invalid. */
94
ba5bc3e5 95void
b6807d98
TT
96invalid_synthetic_pointer (void)
97{
98 error (_("access outside bounds of object "
99 "referenced via synthetic pointer"));
100}
101
f664829e
DE
102/* Decode the addresses in a non-dwo .debug_loc entry.
103 A pointer to the next byte to examine is returned in *NEW_PTR.
104 The encoded low,high addresses are return in *LOW,*HIGH.
105 The result indicates the kind of entry found. */
106
107static enum debug_loc_kind
108decode_debug_loc_addresses (const gdb_byte *loc_ptr, const gdb_byte *buf_end,
109 const gdb_byte **new_ptr,
110 CORE_ADDR *low, CORE_ADDR *high,
111 enum bfd_endian byte_order,
112 unsigned int addr_size,
113 int signed_addr_p)
114{
115 CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
116
117 if (buf_end - loc_ptr < 2 * addr_size)
118 return DEBUG_LOC_BUFFER_OVERFLOW;
119
120 if (signed_addr_p)
121 *low = extract_signed_integer (loc_ptr, addr_size, byte_order);
122 else
123 *low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
124 loc_ptr += addr_size;
125
126 if (signed_addr_p)
127 *high = extract_signed_integer (loc_ptr, addr_size, byte_order);
128 else
129 *high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
130 loc_ptr += addr_size;
131
132 *new_ptr = loc_ptr;
133
134 /* A base-address-selection entry. */
135 if ((*low & base_mask) == base_mask)
136 return DEBUG_LOC_BASE_ADDRESS;
137
138 /* An end-of-list entry. */
139 if (*low == 0 && *high == 0)
140 return DEBUG_LOC_END_OF_LIST;
141
7b9f73fa
TT
142 /* We want the caller to apply the base address, so we must return
143 DEBUG_LOC_OFFSET_PAIR here. */
144 return DEBUG_LOC_OFFSET_PAIR;
f664829e
DE
145}
146
43988095
JK
147/* Decode the addresses in .debug_loclists entry.
148 A pointer to the next byte to examine is returned in *NEW_PTR.
149 The encoded low,high addresses are return in *LOW,*HIGH.
150 The result indicates the kind of entry found. */
151
152static enum debug_loc_kind
82ca3f51
SM
153decode_debug_loclists_addresses (dwarf2_per_cu_data *per_cu,
154 dwarf2_per_objfile *per_objfile,
43988095
JK
155 const gdb_byte *loc_ptr,
156 const gdb_byte *buf_end,
157 const gdb_byte **new_ptr,
158 CORE_ADDR *low, CORE_ADDR *high,
159 enum bfd_endian byte_order,
160 unsigned int addr_size,
161 int signed_addr_p)
162{
163 uint64_t u64;
164
165 if (loc_ptr == buf_end)
166 return DEBUG_LOC_BUFFER_OVERFLOW;
167
168 switch (*loc_ptr++)
169 {
3112ed97
NA
170 case DW_LLE_base_addressx:
171 *low = 0;
172 loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
173 if (loc_ptr == NULL)
174 return DEBUG_LOC_BUFFER_OVERFLOW;
1fb5ee62 175
82ca3f51 176 *high = dwarf2_read_addr_index (per_cu, per_objfile, u64);
3112ed97
NA
177 *new_ptr = loc_ptr;
178 return DEBUG_LOC_BASE_ADDRESS;
1fb5ee62 179
3112ed97
NA
180 case DW_LLE_startx_length:
181 loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
182 if (loc_ptr == NULL)
183 return DEBUG_LOC_BUFFER_OVERFLOW;
1fb5ee62 184
82ca3f51 185 *low = dwarf2_read_addr_index (per_cu, per_objfile, u64);
3112ed97
NA
186 *high = *low;
187 loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
188 if (loc_ptr == NULL)
189 return DEBUG_LOC_BUFFER_OVERFLOW;
1fb5ee62 190
3112ed97
NA
191 *high += u64;
192 *new_ptr = loc_ptr;
193 return DEBUG_LOC_START_LENGTH;
1fb5ee62 194
3112ed97
NA
195 case DW_LLE_start_length:
196 if (buf_end - loc_ptr < addr_size)
197 return DEBUG_LOC_BUFFER_OVERFLOW;
1fb5ee62 198
3112ed97
NA
199 if (signed_addr_p)
200 *low = extract_signed_integer (loc_ptr, addr_size, byte_order);
201 else
202 *low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
1fb5ee62 203
3112ed97
NA
204 loc_ptr += addr_size;
205 *high = *low;
1fb5ee62 206
3112ed97
NA
207 loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
208 if (loc_ptr == NULL)
209 return DEBUG_LOC_BUFFER_OVERFLOW;
1fb5ee62 210
3112ed97
NA
211 *high += u64;
212 *new_ptr = loc_ptr;
213 return DEBUG_LOC_START_LENGTH;
1fb5ee62 214
43988095
JK
215 case DW_LLE_end_of_list:
216 *new_ptr = loc_ptr;
217 return DEBUG_LOC_END_OF_LIST;
1fb5ee62 218
43988095
JK
219 case DW_LLE_base_address:
220 if (loc_ptr + addr_size > buf_end)
221 return DEBUG_LOC_BUFFER_OVERFLOW;
1fb5ee62 222
43988095
JK
223 if (signed_addr_p)
224 *high = extract_signed_integer (loc_ptr, addr_size, byte_order);
225 else
226 *high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
1fb5ee62 227
43988095
JK
228 loc_ptr += addr_size;
229 *new_ptr = loc_ptr;
230 return DEBUG_LOC_BASE_ADDRESS;
1fb5ee62 231
43988095
JK
232 case DW_LLE_offset_pair:
233 loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
234 if (loc_ptr == NULL)
235 return DEBUG_LOC_BUFFER_OVERFLOW;
1fb5ee62 236
43988095
JK
237 *low = u64;
238 loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
239 if (loc_ptr == NULL)
240 return DEBUG_LOC_BUFFER_OVERFLOW;
1fb5ee62 241
43988095
JK
242 *high = u64;
243 *new_ptr = loc_ptr;
9fc3eaae 244 return DEBUG_LOC_OFFSET_PAIR;
1fb5ee62 245
80d1206d
AS
246 case DW_LLE_start_end:
247 if (loc_ptr + 2 * addr_size > buf_end)
248 return DEBUG_LOC_BUFFER_OVERFLOW;
249
250 if (signed_addr_p)
251 *low = extract_signed_integer (loc_ptr, addr_size, byte_order);
252 else
253 *low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
254
255 loc_ptr += addr_size;
256 if (signed_addr_p)
257 *high = extract_signed_integer (loc_ptr, addr_size, byte_order);
258 else
259 *high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
260
261 loc_ptr += addr_size;
262 *new_ptr = loc_ptr;
263 return DEBUG_LOC_START_END;
264
3112ed97
NA
265 /* Following cases are not supported yet. */
266 case DW_LLE_startx_endx:
3112ed97 267 case DW_LLE_default_location:
43988095
JK
268 default:
269 return DEBUG_LOC_INVALID_ENTRY;
270 }
271}
272
f664829e
DE
273/* Decode the addresses in .debug_loc.dwo entry.
274 A pointer to the next byte to examine is returned in *NEW_PTR.
275 The encoded low,high addresses are return in *LOW,*HIGH.
276 The result indicates the kind of entry found. */
277
278static enum debug_loc_kind
82ca3f51
SM
279decode_debug_loc_dwo_addresses (dwarf2_per_cu_data *per_cu,
280 dwarf2_per_objfile *per_objfile,
f664829e
DE
281 const gdb_byte *loc_ptr,
282 const gdb_byte *buf_end,
283 const gdb_byte **new_ptr,
3771a44c
DE
284 CORE_ADDR *low, CORE_ADDR *high,
285 enum bfd_endian byte_order)
f664829e 286{
9fccedf7 287 uint64_t low_index, high_index;
f664829e
DE
288
289 if (loc_ptr == buf_end)
290 return DEBUG_LOC_BUFFER_OVERFLOW;
291
292 switch (*loc_ptr++)
293 {
43988095 294 case DW_LLE_GNU_end_of_list_entry:
f664829e
DE
295 *new_ptr = loc_ptr;
296 return DEBUG_LOC_END_OF_LIST;
fc3ecb3e 297
43988095 298 case DW_LLE_GNU_base_address_selection_entry:
f664829e
DE
299 *low = 0;
300 loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index);
301 if (loc_ptr == NULL)
302 return DEBUG_LOC_BUFFER_OVERFLOW;
fc3ecb3e 303
82ca3f51 304 *high = dwarf2_read_addr_index (per_cu, per_objfile, high_index);
f664829e
DE
305 *new_ptr = loc_ptr;
306 return DEBUG_LOC_BASE_ADDRESS;
fc3ecb3e 307
43988095 308 case DW_LLE_GNU_start_end_entry:
f664829e
DE
309 loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index);
310 if (loc_ptr == NULL)
311 return DEBUG_LOC_BUFFER_OVERFLOW;
fc3ecb3e 312
82ca3f51 313 *low = dwarf2_read_addr_index (per_cu, per_objfile, low_index);
f664829e
DE
314 loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index);
315 if (loc_ptr == NULL)
316 return DEBUG_LOC_BUFFER_OVERFLOW;
fc3ecb3e 317
82ca3f51 318 *high = dwarf2_read_addr_index (per_cu, per_objfile, high_index);
f664829e 319 *new_ptr = loc_ptr;
3771a44c 320 return DEBUG_LOC_START_END;
fc3ecb3e 321
43988095 322 case DW_LLE_GNU_start_length_entry:
3771a44c
DE
323 loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index);
324 if (loc_ptr == NULL)
325 return DEBUG_LOC_BUFFER_OVERFLOW;
fc3ecb3e 326
82ca3f51 327 *low = dwarf2_read_addr_index (per_cu, per_objfile, low_index);
3771a44c
DE
328 if (loc_ptr + 4 > buf_end)
329 return DEBUG_LOC_BUFFER_OVERFLOW;
fc3ecb3e 330
3771a44c
DE
331 *high = *low;
332 *high += extract_unsigned_integer (loc_ptr, 4, byte_order);
333 *new_ptr = loc_ptr + 4;
334 return DEBUG_LOC_START_LENGTH;
fc3ecb3e 335
f664829e
DE
336 default:
337 return DEBUG_LOC_INVALID_ENTRY;
338 }
339}
340
8cf6f0b1 341/* A function for dealing with location lists. Given a
0d53c4c4
DJ
342 symbol baton (BATON) and a pc value (PC), find the appropriate
343 location expression, set *LOCEXPR_LENGTH, and return a pointer
344 to the beginning of the expression. Returns NULL on failure.
345
346 For now, only return the first matching location expression; there
347 can be more than one in the list. */
348
8cf6f0b1
TT
349const gdb_byte *
350dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton,
351 size_t *locexpr_length, CORE_ADDR pc)
0d53c4c4 352{
a50264ba
TT
353 dwarf2_per_objfile *per_objfile = baton->per_objfile;
354 struct objfile *objfile = per_objfile->objfile;
08feed99 355 struct gdbarch *gdbarch = objfile->arch ();
e17a4113 356 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
09ba997f 357 unsigned int addr_size = baton->per_cu->addr_size ();
98badbfd 358 int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd.get ());
0c7af292
TT
359 /* Adjustment for relocatable objects. */
360 CORE_ADDR text_offset = baton->per_objfile->objfile->text_section_offset ();
361 CORE_ADDR base_address = baton->base_address;
f664829e 362 const gdb_byte *loc_ptr, *buf_end;
0d53c4c4
DJ
363
364 loc_ptr = baton->data;
365 buf_end = baton->data + baton->size;
366
367 while (1)
368 {
f664829e
DE
369 CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
370 int length;
371 enum debug_loc_kind kind;
372 const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
373
9fc3eaae 374 if (baton->per_cu->version () < 5 && baton->from_dwo)
f664829e 375 kind = decode_debug_loc_dwo_addresses (baton->per_cu,
82ca3f51 376 baton->per_objfile,
f664829e 377 loc_ptr, buf_end, &new_ptr,
3771a44c 378 &low, &high, byte_order);
09ba997f 379 else if (baton->per_cu->version () < 5)
f664829e
DE
380 kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
381 &low, &high,
382 byte_order, addr_size,
383 signed_addr_p);
43988095
JK
384 else
385 kind = decode_debug_loclists_addresses (baton->per_cu,
82ca3f51 386 baton->per_objfile,
43988095
JK
387 loc_ptr, buf_end, &new_ptr,
388 &low, &high, byte_order,
389 addr_size, signed_addr_p);
390
f664829e
DE
391 loc_ptr = new_ptr;
392 switch (kind)
1d6edc3c 393 {
f664829e 394 case DEBUG_LOC_END_OF_LIST:
1d6edc3c
JK
395 *locexpr_length = 0;
396 return NULL;
fc3ecb3e 397
f664829e 398 case DEBUG_LOC_BASE_ADDRESS:
0c7af292 399 base_address = high;
f664829e 400 continue;
fc3ecb3e 401
3771a44c
DE
402 case DEBUG_LOC_START_END:
403 case DEBUG_LOC_START_LENGTH:
9fc3eaae 404 case DEBUG_LOC_OFFSET_PAIR:
f664829e 405 break;
fc3ecb3e 406
f664829e
DE
407 case DEBUG_LOC_BUFFER_OVERFLOW:
408 case DEBUG_LOC_INVALID_ENTRY:
409 error (_("dwarf2_find_location_expression: "
410 "Corrupted DWARF expression."));
fc3ecb3e 411
f664829e
DE
412 default:
413 gdb_assert_not_reached ("bad debug_loc_kind");
1d6edc3c 414 }
b5758fe4 415
bed911e5 416 /* Otherwise, a location expression entry.
8ddd5a6c 417 If the entry is from a DWO, don't add base address: the entry is from
9fc3eaae 418 .debug_addr which already has the DWARF "base address". We still add
0c7af292 419 text offset in case we're debugging a PIE executable. However, if the
9fc3eaae 420 entry is DW_LLE_offset_pair from a DWO, add the base address as the
7b9f73fa
TT
421 operands are offsets relative to the applicable base address.
422 If the entry is DW_LLE_start_end or DW_LLE_start_length, then
423 it already is an address, and we don't need to add the base. */
0c7af292
TT
424 low += text_offset;
425 high += text_offset;
426 if (!baton->from_dwo && kind == DEBUG_LOC_OFFSET_PAIR)
bed911e5
DE
427 {
428 low += base_address;
429 high += base_address;
430 }
0d53c4c4 431
09ba997f 432 if (baton->per_cu->version () < 5)
43988095
JK
433 {
434 length = extract_unsigned_integer (loc_ptr, 2, byte_order);
435 loc_ptr += 2;
436 }
437 else
438 {
439 unsigned int bytes_read;
440
441 length = read_unsigned_leb128 (NULL, loc_ptr, &bytes_read);
442 loc_ptr += bytes_read;
443 }
0d53c4c4 444
e18b2753
JK
445 if (low == high && pc == low)
446 {
447 /* This is entry PC record present only at entry point
448 of a function. Verify it is really the function entry point. */
449
3977b71f 450 const struct block *pc_block = block_for_pc (pc);
e18b2753
JK
451 struct symbol *pc_func = NULL;
452
453 if (pc_block)
454 pc_func = block_linkage_function (pc_block);
455
6395b628 456 if (pc_func && pc == pc_func->value_block ()->entry_pc ())
e18b2753
JK
457 {
458 *locexpr_length = length;
459 return loc_ptr;
460 }
461 }
462
0d53c4c4
DJ
463 if (pc >= low && pc < high)
464 {
465 *locexpr_length = length;
466 return loc_ptr;
467 }
468
469 loc_ptr += length;
470 }
471}
472
f1e6e072
TT
473/* Implement find_frame_base_location method for LOC_BLOCK functions using
474 DWARF expression for its DW_AT_frame_base. */
475
476static void
477locexpr_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc,
478 const gdb_byte **start, size_t *length)
479{
9a3c8263
SM
480 struct dwarf2_locexpr_baton *symbaton
481 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (framefunc);
f1e6e072
TT
482
483 *length = symbaton->size;
484 *start = symbaton->data;
485}
486
7d1c9c9b
JB
487/* Implement the struct symbol_block_ops::get_frame_base method for
488 LOC_BLOCK functions using a DWARF expression as its DW_AT_frame_base. */
63e43d3a
PMR
489
490static CORE_ADDR
7d1c9c9b 491locexpr_get_frame_base (struct symbol *framefunc, struct frame_info *frame)
63e43d3a
PMR
492{
493 struct gdbarch *gdbarch;
494 struct type *type;
495 struct dwarf2_locexpr_baton *dlbaton;
496 const gdb_byte *start;
497 size_t length;
498 struct value *result;
499
500 /* If this method is called, then FRAMEFUNC is supposed to be a DWARF block.
501 Thus, it's supposed to provide the find_frame_base_location method as
502 well. */
503 gdb_assert (SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location != NULL);
504
505 gdbarch = get_frame_arch (frame);
506 type = builtin_type (gdbarch)->builtin_data_ptr;
9a3c8263 507 dlbaton = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (framefunc);
63e43d3a
PMR
508
509 SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location
510 (framefunc, get_frame_pc (frame), &start, &length);
511 result = dwarf2_evaluate_loc_desc (type, frame, start, length,
9f47c707 512 dlbaton->per_cu, dlbaton->per_objfile);
63e43d3a
PMR
513
514 /* The DW_AT_frame_base attribute contains a location description which
515 computes the base address itself. However, the call to
516 dwarf2_evaluate_loc_desc returns a value representing a variable at
517 that address. The frame base address is thus this variable's
518 address. */
519 return value_address (result);
520}
521
f1e6e072
TT
522/* Vector for inferior functions as represented by LOC_BLOCK, if the inferior
523 function uses DWARF expression for its DW_AT_frame_base. */
524
525const struct symbol_block_ops dwarf2_block_frame_base_locexpr_funcs =
526{
63e43d3a 527 locexpr_find_frame_base_location,
7d1c9c9b 528 locexpr_get_frame_base
f1e6e072
TT
529};
530
531/* Implement find_frame_base_location method for LOC_BLOCK functions using
532 DWARF location list for its DW_AT_frame_base. */
533
534static void
535loclist_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc,
536 const gdb_byte **start, size_t *length)
537{
9a3c8263
SM
538 struct dwarf2_loclist_baton *symbaton
539 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (framefunc);
f1e6e072
TT
540
541 *start = dwarf2_find_location_expression (symbaton, length, pc);
542}
543
7d1c9c9b
JB
544/* Implement the struct symbol_block_ops::get_frame_base method for
545 LOC_BLOCK functions using a DWARF location list as its DW_AT_frame_base. */
546
547static CORE_ADDR
548loclist_get_frame_base (struct symbol *framefunc, struct frame_info *frame)
549{
550 struct gdbarch *gdbarch;
551 struct type *type;
552 struct dwarf2_loclist_baton *dlbaton;
553 const gdb_byte *start;
554 size_t length;
555 struct value *result;
556
557 /* If this method is called, then FRAMEFUNC is supposed to be a DWARF block.
558 Thus, it's supposed to provide the find_frame_base_location method as
559 well. */
560 gdb_assert (SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location != NULL);
561
562 gdbarch = get_frame_arch (frame);
563 type = builtin_type (gdbarch)->builtin_data_ptr;
9a3c8263 564 dlbaton = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (framefunc);
7d1c9c9b
JB
565
566 SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location
567 (framefunc, get_frame_pc (frame), &start, &length);
568 result = dwarf2_evaluate_loc_desc (type, frame, start, length,
9f47c707 569 dlbaton->per_cu, dlbaton->per_objfile);
7d1c9c9b
JB
570
571 /* The DW_AT_frame_base attribute contains a location description which
572 computes the base address itself. However, the call to
573 dwarf2_evaluate_loc_desc returns a value representing a variable at
574 that address. The frame base address is thus this variable's
575 address. */
576 return value_address (result);
577}
578
f1e6e072
TT
579/* Vector for inferior functions as represented by LOC_BLOCK, if the inferior
580 function uses DWARF location list for its DW_AT_frame_base. */
581
582const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs =
583{
63e43d3a 584 loclist_find_frame_base_location,
7d1c9c9b 585 loclist_get_frame_base
f1e6e072
TT
586};
587
6c111a4e 588/* See dwarf2/loc.h. */
af945b75
TT
589
590void
591func_get_frame_base_dwarf_block (struct symbol *framefunc, CORE_ADDR pc,
592 const gdb_byte **start, size_t *length)
0936ad1d 593{
f1e6e072 594 if (SYMBOL_BLOCK_OPS (framefunc) != NULL)
0d53c4c4 595 {
f1e6e072 596 const struct symbol_block_ops *ops_block = SYMBOL_BLOCK_OPS (framefunc);
22c6caba 597
f1e6e072 598 ops_block->find_frame_base_location (framefunc, pc, start, length);
0d53c4c4
DJ
599 }
600 else
f1e6e072 601 *length = 0;
0d53c4c4 602
1d6edc3c 603 if (*length == 0)
8a3fe4f8 604 error (_("Could not find the frame base for \"%s\"."),
987012b8 605 framefunc->natural_name ());
4c2df51b
DJ
606}
607
f4091d26 608/* See loc.h. */
386de171 609
f4091d26 610value *
386de171
TT
611compute_var_value (const char *name)
612{
613 struct block_symbol sym = lookup_symbol (name, nullptr, VAR_DOMAIN,
614 nullptr);
615 if (sym.symbol != nullptr)
616 return value_of_variable (sym.symbol, sym.block);
617 return nullptr;
618}
619
6c111a4e 620/* See dwarf2/loc.h. */
8e3b41a9 621
ccce17b0 622unsigned int entry_values_debug = 0;
8e3b41a9
JK
623
624/* Helper to set entry_values_debug. */
625
626static void
627show_entry_values_debug (struct ui_file *file, int from_tty,
628 struct cmd_list_element *c, const char *value)
629{
6cb06a8c
TT
630 gdb_printf (file,
631 _("Entry values and tail call frames debugging is %s.\n"),
632 value);
8e3b41a9
JK
633}
634
797662d7 635/* See gdbtypes.h. */
8e3b41a9 636
a0e0ca70
TT
637void
638call_site_target::iterate_over_addresses
639 (struct gdbarch *call_site_gdbarch,
640 const struct call_site *call_site,
641 struct frame_info *caller_frame,
642 iterate_ftype callback) const
8e3b41a9 643{
797662d7 644 switch (m_loc_kind)
8e3b41a9 645 {
7eb21cc7 646 case call_site_target::DWARF_BLOCK:
8e3b41a9
JK
647 {
648 struct dwarf2_locexpr_baton *dwarf_block;
649 struct value *val;
650 struct type *caller_core_addr_type;
651 struct gdbarch *caller_arch;
652
797662d7 653 dwarf_block = m_loc.dwarf_block;
8e3b41a9
JK
654 if (dwarf_block == NULL)
655 {
7cbd4a93 656 struct bound_minimal_symbol msym;
8e3b41a9 657
b84aaada 658 msym = lookup_minimal_symbol_by_pc (call_site->pc () - 1);
8e3b41a9 659 throw_error (NO_ENTRY_VALUE_ERROR,
216f72a1 660 _("DW_AT_call_target is not specified at %s in %s"),
b84aaada 661 paddress (call_site_gdbarch, call_site->pc ()),
7cbd4a93 662 (msym.minsym == NULL ? "???"
c9d95fa3 663 : msym.minsym->print_name ()));
8e3b41a9
JK
664
665 }
666 if (caller_frame == NULL)
667 {
7cbd4a93 668 struct bound_minimal_symbol msym;
8e3b41a9 669
b84aaada 670 msym = lookup_minimal_symbol_by_pc (call_site->pc () - 1);
8e3b41a9 671 throw_error (NO_ENTRY_VALUE_ERROR,
216f72a1 672 _("DW_AT_call_target DWARF block resolving "
8e3b41a9
JK
673 "requires known frame which is currently not "
674 "available at %s in %s"),
b84aaada 675 paddress (call_site_gdbarch, call_site->pc ()),
7cbd4a93 676 (msym.minsym == NULL ? "???"
c9d95fa3 677 : msym.minsym->print_name ()));
8e3b41a9
JK
678
679 }
680 caller_arch = get_frame_arch (caller_frame);
681 caller_core_addr_type = builtin_type (caller_arch)->builtin_func_ptr;
682 val = dwarf2_evaluate_loc_desc (caller_core_addr_type, caller_frame,
683 dwarf_block->data, dwarf_block->size,
9f47c707
SM
684 dwarf_block->per_cu,
685 dwarf_block->per_objfile);
216f72a1 686 /* DW_AT_call_target is a DWARF expression, not a DWARF location. */
8e3b41a9 687 if (VALUE_LVAL (val) == lval_memory)
a0e0ca70 688 callback (value_address (val));
8e3b41a9 689 else
a0e0ca70 690 callback (value_as_address (val));
8e3b41a9 691 }
a0e0ca70 692 break;
8e3b41a9 693
7eb21cc7 694 case call_site_target::PHYSNAME:
8e3b41a9
JK
695 {
696 const char *physname;
3b7344d5 697 struct bound_minimal_symbol msym;
8e3b41a9 698
797662d7 699 physname = m_loc.physname;
9112db09
JK
700
701 /* Handle both the mangled and demangled PHYSNAME. */
702 msym = lookup_minimal_symbol (physname, NULL, NULL);
3b7344d5 703 if (msym.minsym == NULL)
8e3b41a9 704 {
b84aaada 705 msym = lookup_minimal_symbol_by_pc (call_site->pc () - 1);
8e3b41a9
JK
706 throw_error (NO_ENTRY_VALUE_ERROR,
707 _("Cannot find function \"%s\" for a call site target "
708 "at %s in %s"),
b84aaada 709 physname, paddress (call_site_gdbarch, call_site->pc ()),
3b7344d5 710 (msym.minsym == NULL ? "???"
c9d95fa3 711 : msym.minsym->print_name ()));
8e3b41a9
JK
712
713 }
4aeddc50 714 callback (msym.value_address ());
8e3b41a9 715 }
a0e0ca70 716 break;
8e3b41a9 717
7eb21cc7 718 case call_site_target::PHYSADDR:
b0b8879e
SM
719 {
720 dwarf2_per_objfile *per_objfile = call_site->per_objfile;
721 compunit_symtab *cust = per_objfile->get_symtab (call_site->per_cu);
c1e35bc9 722 int sect_idx = cust->block_line_section ();
b0b8879e
SM
723 CORE_ADDR delta = per_objfile->objfile->section_offsets[sect_idx];
724
a0e0ca70 725 callback (m_loc.physaddr + delta);
b0b8879e 726 }
a0e0ca70 727 break;
8e3b41a9 728
48ac197b
TT
729 case call_site_target::ADDRESSES:
730 {
731 dwarf2_per_objfile *per_objfile = call_site->per_objfile;
732 compunit_symtab *cust = per_objfile->get_symtab (call_site->per_cu);
733 int sect_idx = cust->block_line_section ();
734 CORE_ADDR delta = per_objfile->objfile->section_offsets[sect_idx];
735
736 for (unsigned i = 0; i < m_loc.addresses.length; ++i)
737 callback (m_loc.addresses.values[i] + delta);
738 }
739 break;
740
8e3b41a9
JK
741 default:
742 internal_error (__FILE__, __LINE__, _("invalid call site target kind"));
743 }
744}
745
111c6489
JK
746/* Convert function entry point exact address ADDR to the function which is
747 compliant with TAIL_CALL_LIST_COMPLETE condition. Throw
748 NO_ENTRY_VALUE_ERROR otherwise. */
749
750static struct symbol *
751func_addr_to_tail_call_list (struct gdbarch *gdbarch, CORE_ADDR addr)
752{
753 struct symbol *sym = find_pc_function (addr);
754 struct type *type;
755
6395b628 756 if (sym == NULL || sym->value_block ()->entry_pc () != addr)
111c6489 757 throw_error (NO_ENTRY_VALUE_ERROR,
216f72a1 758 _("DW_TAG_call_site resolving failed to find function "
111c6489
JK
759 "name for address %s"),
760 paddress (gdbarch, addr));
761
5f9c5a63 762 type = sym->type ();
78134374 763 gdb_assert (type->code () == TYPE_CODE_FUNC);
111c6489
JK
764 gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_FUNC);
765
766 return sym;
767}
768
2d6c5dc2
JK
769/* Verify function with entry point exact address ADDR can never call itself
770 via its tail calls (incl. transitively). Throw NO_ENTRY_VALUE_ERROR if it
771 can call itself via tail calls.
772
773 If a funtion can tail call itself its entry value based parameters are
774 unreliable. There is no verification whether the value of some/all
775 parameters is unchanged through the self tail call, we expect if there is
776 a self tail call all the parameters can be modified. */
777
778static void
779func_verify_no_selftailcall (struct gdbarch *gdbarch, CORE_ADDR verify_addr)
780{
2d6c5dc2
JK
781 CORE_ADDR addr;
782
2d6c5dc2
JK
783 /* The verification is completely unordered. Track here function addresses
784 which still need to be iterated. */
fc4007c9 785 std::vector<CORE_ADDR> todo;
2d6c5dc2 786
fc4007c9
TT
787 /* Track here CORE_ADDRs which were already visited. */
788 std::unordered_set<CORE_ADDR> addr_hash;
2d6c5dc2 789
fc4007c9
TT
790 todo.push_back (verify_addr);
791 while (!todo.empty ())
2d6c5dc2
JK
792 {
793 struct symbol *func_sym;
794 struct call_site *call_site;
795
fc4007c9
TT
796 addr = todo.back ();
797 todo.pop_back ();
2d6c5dc2
JK
798
799 func_sym = func_addr_to_tail_call_list (gdbarch, addr);
800
5f9c5a63 801 for (call_site = TYPE_TAIL_CALL_LIST (func_sym->type ());
2d6c5dc2
JK
802 call_site; call_site = call_site->tail_call_next)
803 {
2d6c5dc2
JK
804 /* CALLER_FRAME with registers is not available for tail-call jumped
805 frames. */
a0e0ca70
TT
806 call_site->iterate_over_addresses (gdbarch, nullptr,
807 [&] (CORE_ADDR target_addr)
2d6c5dc2 808 {
a0e0ca70
TT
809 if (target_addr == verify_addr)
810 {
811 struct bound_minimal_symbol msym;
812
813 msym = lookup_minimal_symbol_by_pc (verify_addr);
814 throw_error (NO_ENTRY_VALUE_ERROR,
815 _("DW_OP_entry_value resolving has found "
816 "function \"%s\" at %s can call itself via tail "
817 "calls"),
818 (msym.minsym == NULL ? "???"
819 : msym.minsym->print_name ()),
820 paddress (gdbarch, verify_addr));
821 }
822
823 if (addr_hash.insert (target_addr).second)
824 todo.push_back (target_addr);
825 });
2d6c5dc2
JK
826 }
827 }
2d6c5dc2
JK
828}
829
111c6489
JK
830/* Print user readable form of CALL_SITE->PC to gdb_stdlog. Used only for
831 ENTRY_VALUES_DEBUG. */
832
833static void
834tailcall_dump (struct gdbarch *gdbarch, const struct call_site *call_site)
835{
b84aaada 836 CORE_ADDR addr = call_site->pc ();
7cbd4a93 837 struct bound_minimal_symbol msym = lookup_minimal_symbol_by_pc (addr - 1);
111c6489 838
6cb06a8c
TT
839 gdb_printf (gdb_stdlog, " %s(%s)", paddress (gdbarch, addr),
840 (msym.minsym == NULL ? "???"
841 : msym.minsym->print_name ()));
111c6489
JK
842
843}
844
111c6489
JK
845/* Intersect RESULTP with CHAIN to keep RESULTP unambiguous, keep in RESULTP
846 only top callers and bottom callees which are present in both. GDBARCH is
847 used only for ENTRY_VALUES_DEBUG. RESULTP is NULL after return if there are
848 no remaining possibilities to provide unambiguous non-trivial result.
849 RESULTP should point to NULL on the first (initialization) call. Caller is
850 responsible for xfree of any RESULTP data. */
851
852static void
fc4007c9
TT
853chain_candidate (struct gdbarch *gdbarch,
854 gdb::unique_xmalloc_ptr<struct call_site_chain> *resultp,
394d8c59 855 const std::vector<struct call_site *> &chain)
111c6489 856{
394d8c59 857 long length = chain.size ();
111c6489
JK
858 int callers, callees, idx;
859
fc4007c9 860 if (*resultp == NULL)
111c6489
JK
861 {
862 /* Create the initial chain containing all the passed PCs. */
863
fc4007c9
TT
864 struct call_site_chain *result
865 = ((struct call_site_chain *)
866 xmalloc (sizeof (*result)
867 + sizeof (*result->call_site) * (length - 1)));
111c6489
JK
868 result->length = length;
869 result->callers = result->callees = length;
394d8c59
TT
870 if (!chain.empty ())
871 memcpy (result->call_site, chain.data (),
19a1b230 872 sizeof (*result->call_site) * length);
fc4007c9 873 resultp->reset (result);
111c6489
JK
874
875 if (entry_values_debug)
876 {
6cb06a8c 877 gdb_printf (gdb_stdlog, "tailcall: initial:");
111c6489
JK
878 for (idx = 0; idx < length; idx++)
879 tailcall_dump (gdbarch, result->call_site[idx]);
a11ac3b3 880 gdb_putc ('\n', gdb_stdlog);
111c6489
JK
881 }
882
883 return;
884 }
885
886 if (entry_values_debug)
887 {
6cb06a8c 888 gdb_printf (gdb_stdlog, "tailcall: compare:");
111c6489 889 for (idx = 0; idx < length; idx++)
394d8c59 890 tailcall_dump (gdbarch, chain[idx]);
a11ac3b3 891 gdb_putc ('\n', gdb_stdlog);
111c6489
JK
892 }
893
894 /* Intersect callers. */
895
fc4007c9 896 callers = std::min ((long) (*resultp)->callers, length);
111c6489 897 for (idx = 0; idx < callers; idx++)
394d8c59 898 if ((*resultp)->call_site[idx] != chain[idx])
111c6489 899 {
fc4007c9 900 (*resultp)->callers = idx;
111c6489
JK
901 break;
902 }
903
904 /* Intersect callees. */
905
fc4007c9 906 callees = std::min ((long) (*resultp)->callees, length);
111c6489 907 for (idx = 0; idx < callees; idx++)
fc4007c9 908 if ((*resultp)->call_site[(*resultp)->length - 1 - idx]
394d8c59 909 != chain[length - 1 - idx])
111c6489 910 {
fc4007c9 911 (*resultp)->callees = idx;
111c6489
JK
912 break;
913 }
914
915 if (entry_values_debug)
916 {
6cb06a8c 917 gdb_printf (gdb_stdlog, "tailcall: reduced:");
fc4007c9
TT
918 for (idx = 0; idx < (*resultp)->callers; idx++)
919 tailcall_dump (gdbarch, (*resultp)->call_site[idx]);
0426ad51 920 gdb_puts (" |", gdb_stdlog);
fc4007c9
TT
921 for (idx = 0; idx < (*resultp)->callees; idx++)
922 tailcall_dump (gdbarch,
923 (*resultp)->call_site[(*resultp)->length
924 - (*resultp)->callees + idx]);
a11ac3b3 925 gdb_putc ('\n', gdb_stdlog);
111c6489
JK
926 }
927
fc4007c9 928 if ((*resultp)->callers == 0 && (*resultp)->callees == 0)
111c6489
JK
929 {
930 /* There are no common callers or callees. It could be also a direct
931 call (which has length 0) with ambiguous possibility of an indirect
932 call - CALLERS == CALLEES == 0 is valid during the first allocation
933 but any subsequence processing of such entry means ambiguity. */
fc4007c9 934 resultp->reset (NULL);
111c6489
JK
935 return;
936 }
937
938 /* See call_site_find_chain_1 why there is no way to reach the bottom callee
939 PC again. In such case there must be two different code paths to reach
e0619de6 940 it. CALLERS + CALLEES equal to LENGTH in the case of self tail-call. */
fc4007c9 941 gdb_assert ((*resultp)->callers + (*resultp)->callees <= (*resultp)->length);
111c6489
JK
942}
943
206bedc2
TT
944/* Recursively try to construct the call chain. GDBARCH, RESULTP, and
945 CHAIN are passed to chain_candidate. ADDR_HASH tracks which
946 addresses have already been seen along the current chain.
947 CALL_SITE is the call site to visit, and CALLEE_PC is the PC we're
948 trying to "reach". Returns false if an error has already been
949 detected and so an early return can be done. If it makes sense to
950 keep trying (even if no answer has yet been found), returns
951 true. */
952
953static bool
954call_site_find_chain_2
955 (struct gdbarch *gdbarch,
956 gdb::unique_xmalloc_ptr<struct call_site_chain> *resultp,
957 std::vector<struct call_site *> &chain,
958 std::unordered_set<CORE_ADDR> &addr_hash,
959 struct call_site *call_site,
960 CORE_ADDR callee_pc)
961{
a0e0ca70
TT
962 std::vector<CORE_ADDR> addresses;
963 bool found_exact = false;
964 call_site->iterate_over_addresses (gdbarch, nullptr,
965 [&] (CORE_ADDR addr)
966 {
967 if (addr == callee_pc)
968 found_exact = true;
969 else
970 addresses.push_back (addr);
971 });
206bedc2 972
a0e0ca70 973 if (found_exact)
206bedc2
TT
974 {
975 chain_candidate (gdbarch, resultp, chain);
976 /* If RESULTP was reset, then chain_candidate failed, and so we
977 can tell our callers to early-return. */
978 return *resultp != nullptr;
979 }
980
a0e0ca70 981 for (CORE_ADDR target_func_addr : addresses)
206bedc2 982 {
a0e0ca70
TT
983 struct symbol *target_func
984 = func_addr_to_tail_call_list (gdbarch, target_func_addr);
985 for (struct call_site *target_call_site
986 = TYPE_TAIL_CALL_LIST (target_func->type ());
987 target_call_site != nullptr;
988 target_call_site = target_call_site->tail_call_next)
206bedc2 989 {
a0e0ca70
TT
990 if (addr_hash.insert (target_call_site->pc ()).second)
991 {
992 /* Successfully entered TARGET_CALL_SITE. */
993 chain.push_back (target_call_site);
206bedc2 994
a0e0ca70
TT
995 if (!call_site_find_chain_2 (gdbarch, resultp, chain,
996 addr_hash, target_call_site,
997 callee_pc))
998 return false;
206bedc2 999
a0e0ca70
TT
1000 size_t removed = addr_hash.erase (target_call_site->pc ());
1001 gdb_assert (removed == 1);
1002 chain.pop_back ();
1003 }
206bedc2
TT
1004 }
1005 }
1006
1007 return true;
1008}
1009
1010/* Create and return call_site_chain for CALLER_PC and CALLEE_PC. All
1011 the assumed frames between them use GDBARCH. Any unreliability
1012 results in thrown NO_ENTRY_VALUE_ERROR. */
111c6489 1013
8084e579 1014static gdb::unique_xmalloc_ptr<call_site_chain>
111c6489
JK
1015call_site_find_chain_1 (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
1016 CORE_ADDR callee_pc)
1017{
c4be5165 1018 CORE_ADDR save_callee_pc = callee_pc;
fc4007c9 1019 gdb::unique_xmalloc_ptr<struct call_site_chain> retval;
111c6489
JK
1020 struct call_site *call_site;
1021
111c6489
JK
1022 /* CHAIN contains only the intermediate CALL_SITEs. Neither CALLER_PC's
1023 call_site nor any possible call_site at CALLEE_PC's function is there.
1024 Any CALL_SITE in CHAIN will be iterated to its siblings - via
1025 TAIL_CALL_NEXT. This is inappropriate for CALLER_PC's call_site. */
fc4007c9 1026 std::vector<struct call_site *> chain;
111c6489 1027
a0e0ca70
TT
1028 /* A given call site may have multiple associated addresses. This
1029 can happen if, e.g., the caller is split by hot/cold
1030 partitioning. This vector tracks the ones we haven't visited
1031 yet. */
1032 std::vector<std::vector<CORE_ADDR>> unvisited_addresses;
1033
111c6489
JK
1034 /* We are not interested in the specific PC inside the callee function. */
1035 callee_pc = get_pc_function_start (callee_pc);
1036 if (callee_pc == 0)
1037 throw_error (NO_ENTRY_VALUE_ERROR, _("Unable to find function for PC %s"),
c4be5165 1038 paddress (gdbarch, save_callee_pc));
111c6489 1039
fc4007c9
TT
1040 /* Mark CALL_SITEs so we do not visit the same ones twice. */
1041 std::unordered_set<CORE_ADDR> addr_hash;
111c6489
JK
1042
1043 /* Do not push CALL_SITE to CHAIN. Push there only the first tail call site
1044 at the target's function. All the possible tail call sites in the
1045 target's function will get iterated as already pushed into CHAIN via their
1046 TAIL_CALL_NEXT. */
1047 call_site = call_site_for_pc (gdbarch, caller_pc);
206bedc2
TT
1048 /* No need to check the return value here, because we no longer care
1049 about possible early returns. */
1050 call_site_find_chain_2 (gdbarch, &retval, chain, addr_hash, call_site,
1051 callee_pc);
111c6489
JK
1052
1053 if (retval == NULL)
1054 {
7cbd4a93 1055 struct bound_minimal_symbol msym_caller, msym_callee;
111c6489
JK
1056
1057 msym_caller = lookup_minimal_symbol_by_pc (caller_pc);
1058 msym_callee = lookup_minimal_symbol_by_pc (callee_pc);
1059 throw_error (NO_ENTRY_VALUE_ERROR,
1060 _("There are no unambiguously determinable intermediate "
1061 "callers or callees between caller function \"%s\" at %s "
1062 "and callee function \"%s\" at %s"),
7cbd4a93 1063 (msym_caller.minsym == NULL
c9d95fa3 1064 ? "???" : msym_caller.minsym->print_name ()),
111c6489 1065 paddress (gdbarch, caller_pc),
7cbd4a93 1066 (msym_callee.minsym == NULL
c9d95fa3 1067 ? "???" : msym_callee.minsym->print_name ()),
111c6489
JK
1068 paddress (gdbarch, callee_pc));
1069 }
1070
8084e579 1071 return retval;
111c6489
JK
1072}
1073
1074/* Create and return call_site_chain for CALLER_PC and CALLEE_PC. All the
1075 assumed frames between them use GDBARCH. If valid call_site_chain cannot be
8084e579 1076 constructed return NULL. */
111c6489 1077
8084e579 1078gdb::unique_xmalloc_ptr<call_site_chain>
111c6489
JK
1079call_site_find_chain (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
1080 CORE_ADDR callee_pc)
1081{
8084e579 1082 gdb::unique_xmalloc_ptr<call_site_chain> retval;
111c6489 1083
a70b8144 1084 try
111c6489
JK
1085 {
1086 retval = call_site_find_chain_1 (gdbarch, caller_pc, callee_pc);
1087 }
230d2906 1088 catch (const gdb_exception_error &e)
111c6489
JK
1089 {
1090 if (e.error == NO_ENTRY_VALUE_ERROR)
1091 {
1092 if (entry_values_debug)
1093 exception_print (gdb_stdout, e);
1094
1095 return NULL;
1096 }
1097 else
eedc3f4f 1098 throw;
111c6489 1099 }
492d29ea 1100
111c6489
JK
1101 return retval;
1102}
1103
24c5c679
JK
1104/* Return 1 if KIND and KIND_U match PARAMETER. Return 0 otherwise. */
1105
1106static int
1107call_site_parameter_matches (struct call_site_parameter *parameter,
1108 enum call_site_parameter_kind kind,
1109 union call_site_parameter_u kind_u)
1110{
1111 if (kind == parameter->kind)
1112 switch (kind)
1113 {
1114 case CALL_SITE_PARAMETER_DWARF_REG:
1115 return kind_u.dwarf_reg == parameter->u.dwarf_reg;
fc3ecb3e 1116
24c5c679
JK
1117 case CALL_SITE_PARAMETER_FB_OFFSET:
1118 return kind_u.fb_offset == parameter->u.fb_offset;
fc3ecb3e 1119
1788b2d3 1120 case CALL_SITE_PARAMETER_PARAM_OFFSET:
9c541725 1121 return kind_u.param_cu_off == parameter->u.param_cu_off;
24c5c679
JK
1122 }
1123 return 0;
1124}
1125
0a2b69d0 1126/* See loc.h. */
8e3b41a9 1127
0a2b69d0 1128struct call_site_parameter *
24c5c679
JK
1129dwarf_expr_reg_to_entry_parameter (struct frame_info *frame,
1130 enum call_site_parameter_kind kind,
1131 union call_site_parameter_u kind_u,
9f47c707
SM
1132 dwarf2_per_cu_data **per_cu_return,
1133 dwarf2_per_objfile **per_objfile_return)
8e3b41a9 1134{
9e3a7d65
JK
1135 CORE_ADDR func_addr, caller_pc;
1136 struct gdbarch *gdbarch;
1137 struct frame_info *caller_frame;
8e3b41a9
JK
1138 struct call_site *call_site;
1139 int iparams;
509f0fd9
JK
1140 /* Initialize it just to avoid a GCC false warning. */
1141 struct call_site_parameter *parameter = NULL;
8e3b41a9
JK
1142 CORE_ADDR target_addr;
1143
9e3a7d65
JK
1144 while (get_frame_type (frame) == INLINE_FRAME)
1145 {
1146 frame = get_prev_frame (frame);
1147 gdb_assert (frame != NULL);
1148 }
1149
1150 func_addr = get_frame_func (frame);
1151 gdbarch = get_frame_arch (frame);
1152 caller_frame = get_prev_frame (frame);
8e3b41a9
JK
1153 if (gdbarch != frame_unwind_arch (frame))
1154 {
7cbd4a93
TT
1155 struct bound_minimal_symbol msym
1156 = lookup_minimal_symbol_by_pc (func_addr);
8e3b41a9
JK
1157 struct gdbarch *caller_gdbarch = frame_unwind_arch (frame);
1158
1159 throw_error (NO_ENTRY_VALUE_ERROR,
216f72a1 1160 _("DW_OP_entry_value resolving callee gdbarch %s "
8e3b41a9
JK
1161 "(of %s (%s)) does not match caller gdbarch %s"),
1162 gdbarch_bfd_arch_info (gdbarch)->printable_name,
1163 paddress (gdbarch, func_addr),
7cbd4a93 1164 (msym.minsym == NULL ? "???"
c9d95fa3 1165 : msym.minsym->print_name ()),
8e3b41a9
JK
1166 gdbarch_bfd_arch_info (caller_gdbarch)->printable_name);
1167 }
1168
1169 if (caller_frame == NULL)
1170 {
7cbd4a93
TT
1171 struct bound_minimal_symbol msym
1172 = lookup_minimal_symbol_by_pc (func_addr);
8e3b41a9 1173
216f72a1 1174 throw_error (NO_ENTRY_VALUE_ERROR, _("DW_OP_entry_value resolving "
8e3b41a9
JK
1175 "requires caller of %s (%s)"),
1176 paddress (gdbarch, func_addr),
7cbd4a93 1177 (msym.minsym == NULL ? "???"
c9d95fa3 1178 : msym.minsym->print_name ()));
8e3b41a9
JK
1179 }
1180 caller_pc = get_frame_pc (caller_frame);
1181 call_site = call_site_for_pc (gdbarch, caller_pc);
1182
a0e0ca70
TT
1183 bool found = false;
1184 unsigned count = 0;
1185 call_site->iterate_over_addresses (gdbarch, caller_frame,
1186 [&] (CORE_ADDR addr)
1187 {
1188 /* Preserve any address. */
1189 target_addr = addr;
1190 ++count;
1191 if (addr == func_addr)
1192 found = true;
1193 });
1194 if (!found)
8e3b41a9
JK
1195 {
1196 struct minimal_symbol *target_msym, *func_msym;
1197
7cbd4a93
TT
1198 target_msym = lookup_minimal_symbol_by_pc (target_addr).minsym;
1199 func_msym = lookup_minimal_symbol_by_pc (func_addr).minsym;
8e3b41a9 1200 throw_error (NO_ENTRY_VALUE_ERROR,
a0e0ca70 1201 _("DW_OP_entry_value resolving expects callee %s at %s %s"
8e3b41a9
JK
1202 "but the called frame is for %s at %s"),
1203 (target_msym == NULL ? "???"
c9d95fa3 1204 : target_msym->print_name ()),
8e3b41a9 1205 paddress (gdbarch, target_addr),
a0e0ca70
TT
1206 (count > 0
1207 ? _("(but note there are multiple addresses not listed)")
1208 : ""),
c9d95fa3 1209 func_msym == NULL ? "???" : func_msym->print_name (),
8e3b41a9
JK
1210 paddress (gdbarch, func_addr));
1211 }
1212
2d6c5dc2
JK
1213 /* No entry value based parameters would be reliable if this function can
1214 call itself via tail calls. */
1215 func_verify_no_selftailcall (gdbarch, func_addr);
1216
8e3b41a9
JK
1217 for (iparams = 0; iparams < call_site->parameter_count; iparams++)
1218 {
1219 parameter = &call_site->parameter[iparams];
24c5c679 1220 if (call_site_parameter_matches (parameter, kind, kind_u))
8e3b41a9
JK
1221 break;
1222 }
1223 if (iparams == call_site->parameter_count)
1224 {
7cbd4a93
TT
1225 struct minimal_symbol *msym
1226 = lookup_minimal_symbol_by_pc (caller_pc).minsym;
8e3b41a9 1227
216f72a1 1228 /* DW_TAG_call_site_parameter will be missing just if GCC could not
8e3b41a9
JK
1229 determine its value. */
1230 throw_error (NO_ENTRY_VALUE_ERROR, _("Cannot find matching parameter "
216f72a1 1231 "at DW_TAG_call_site %s at %s"),
8e3b41a9 1232 paddress (gdbarch, caller_pc),
c9d95fa3 1233 msym == NULL ? "???" : msym->print_name ());
8e3b41a9
JK
1234 }
1235
1236 *per_cu_return = call_site->per_cu;
9f47c707 1237 *per_objfile_return = call_site->per_objfile;
8e3b41a9
JK
1238 return parameter;
1239}
1240
a471c594 1241/* Return value for PARAMETER matching DEREF_SIZE. If DEREF_SIZE is -1, return
216f72a1
JK
1242 the normal DW_AT_call_value block. Otherwise return the
1243 DW_AT_call_data_value (dereferenced) block.
e18b2753
JK
1244
1245 TYPE and CALLER_FRAME specify how to evaluate the DWARF block into returned
1246 struct value.
1247
1248 Function always returns non-NULL, non-optimized out value. It throws
1249 NO_ENTRY_VALUE_ERROR if it cannot resolve the value for any reason. */
1250
1251static struct value *
1252dwarf_entry_parameter_to_value (struct call_site_parameter *parameter,
a471c594 1253 CORE_ADDR deref_size, struct type *type,
e18b2753 1254 struct frame_info *caller_frame,
9f47c707
SM
1255 dwarf2_per_cu_data *per_cu,
1256 dwarf2_per_objfile *per_objfile)
e18b2753 1257{
a471c594 1258 const gdb_byte *data_src;
a471c594
JK
1259 size_t size;
1260
1261 data_src = deref_size == -1 ? parameter->value : parameter->data_value;
1262 size = deref_size == -1 ? parameter->value_size : parameter->data_value_size;
1263
1264 /* DEREF_SIZE size is not verified here. */
1265 if (data_src == NULL)
1266 throw_error (NO_ENTRY_VALUE_ERROR,
216f72a1 1267 _("Cannot resolve DW_AT_call_data_value"));
e18b2753 1268
70454ee7
ZZ
1269 return dwarf2_evaluate_loc_desc (type, caller_frame, data_src, size, per_cu,
1270 per_objfile, false);
e18b2753
JK
1271}
1272
a471c594
JK
1273/* VALUE must be of type lval_computed with entry_data_value_funcs. Perform
1274 the indirect method on it, that is use its stored target value, the sole
1275 purpose of entry_data_value_funcs.. */
1276
1277static struct value *
1278entry_data_value_coerce_ref (const struct value *value)
1279{
1280 struct type *checked_type = check_typedef (value_type (value));
1281 struct value *target_val;
1282
aa006118 1283 if (!TYPE_IS_REFERENCE (checked_type))
a471c594
JK
1284 return NULL;
1285
9a3c8263 1286 target_val = (struct value *) value_computed_closure (value);
a471c594
JK
1287 value_incref (target_val);
1288 return target_val;
1289}
1290
1291/* Implement copy_closure. */
1292
1293static void *
1294entry_data_value_copy_closure (const struct value *v)
1295{
9a3c8263 1296 struct value *target_val = (struct value *) value_computed_closure (v);
a471c594
JK
1297
1298 value_incref (target_val);
1299 return target_val;
1300}
1301
1302/* Implement free_closure. */
1303
1304static void
1305entry_data_value_free_closure (struct value *v)
1306{
9a3c8263 1307 struct value *target_val = (struct value *) value_computed_closure (v);
a471c594 1308
22bc8444 1309 value_decref (target_val);
a471c594
JK
1310}
1311
1312/* Vector for methods for an entry value reference where the referenced value
1313 is stored in the caller. On the first dereference use
216f72a1 1314 DW_AT_call_data_value in the caller. */
a471c594
JK
1315
1316static const struct lval_funcs entry_data_value_funcs =
1317{
1318 NULL, /* read */
1319 NULL, /* write */
a519e8ff 1320 nullptr,
a471c594
JK
1321 NULL, /* indirect */
1322 entry_data_value_coerce_ref,
1323 NULL, /* check_synthetic_pointer */
1324 entry_data_value_copy_closure,
1325 entry_data_value_free_closure
1326};
1327
24c5c679
JK
1328/* Read parameter of TYPE at (callee) FRAME's function entry. KIND and KIND_U
1329 are used to match DW_AT_location at the caller's
216f72a1 1330 DW_TAG_call_site_parameter.
e18b2753
JK
1331
1332 Function always returns non-NULL value. It throws NO_ENTRY_VALUE_ERROR if it
1333 cannot resolve the parameter for any reason. */
1334
1335static struct value *
1336value_of_dwarf_reg_entry (struct type *type, struct frame_info *frame,
24c5c679
JK
1337 enum call_site_parameter_kind kind,
1338 union call_site_parameter_u kind_u)
e18b2753 1339{
a471c594 1340 struct type *checked_type = check_typedef (type);
27710edb 1341 struct type *target_type = checked_type->target_type ();
e18b2753 1342 struct frame_info *caller_frame = get_prev_frame (frame);
a471c594 1343 struct value *outer_val, *target_val, *val;
e18b2753 1344 struct call_site_parameter *parameter;
9f47c707
SM
1345 dwarf2_per_cu_data *caller_per_cu;
1346 dwarf2_per_objfile *caller_per_objfile;
e18b2753 1347
24c5c679 1348 parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u,
9f47c707
SM
1349 &caller_per_cu,
1350 &caller_per_objfile);
e18b2753 1351
a471c594
JK
1352 outer_val = dwarf_entry_parameter_to_value (parameter, -1 /* deref_size */,
1353 type, caller_frame,
9f47c707
SM
1354 caller_per_cu,
1355 caller_per_objfile);
a471c594 1356
216f72a1 1357 /* Check if DW_AT_call_data_value cannot be used. If it should be
a471c594
JK
1358 used and it is not available do not fall back to OUTER_VAL - dereferencing
1359 TYPE_CODE_REF with non-entry data value would give current value - not the
1360 entry value. */
1361
aa006118 1362 if (!TYPE_IS_REFERENCE (checked_type)
27710edb 1363 || checked_type->target_type () == NULL)
a471c594
JK
1364 return outer_val;
1365
1366 target_val = dwarf_entry_parameter_to_value (parameter,
df86565b 1367 target_type->length (),
a471c594 1368 target_type, caller_frame,
9f47c707
SM
1369 caller_per_cu,
1370 caller_per_objfile);
a471c594 1371
a471c594 1372 val = allocate_computed_value (type, &entry_data_value_funcs,
895dafa6 1373 release_value (target_val).release ());
a471c594
JK
1374
1375 /* Copy the referencing pointer to the new computed value. */
50888e42
SM
1376 memcpy (value_contents_raw (val).data (),
1377 value_contents_raw (outer_val).data (),
df86565b 1378 checked_type->length ());
a471c594
JK
1379 set_value_lazy (val, 0);
1380
1381 return val;
e18b2753
JK
1382}
1383
1384/* Read parameter of TYPE at (callee) FRAME's function entry. DATA and
1385 SIZE are DWARF block used to match DW_AT_location at the caller's
216f72a1 1386 DW_TAG_call_site_parameter.
e18b2753
JK
1387
1388 Function always returns non-NULL value. It throws NO_ENTRY_VALUE_ERROR if it
1389 cannot resolve the parameter for any reason. */
1390
1391static struct value *
1392value_of_dwarf_block_entry (struct type *type, struct frame_info *frame,
1393 const gdb_byte *block, size_t block_len)
1394{
24c5c679 1395 union call_site_parameter_u kind_u;
e18b2753 1396
24c5c679
JK
1397 kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (block, block + block_len);
1398 if (kind_u.dwarf_reg != -1)
1399 return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_DWARF_REG,
1400 kind_u);
e18b2753 1401
24c5c679
JK
1402 if (dwarf_block_to_fb_offset (block, block + block_len, &kind_u.fb_offset))
1403 return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_FB_OFFSET,
dda83cd7 1404 kind_u);
e18b2753
JK
1405
1406 /* This can normally happen - throw NO_ENTRY_VALUE_ERROR to get the message
1407 suppressed during normal operation. The expression can be arbitrary if
1408 there is no caller-callee entry value binding expected. */
1409 throw_error (NO_ENTRY_VALUE_ERROR,
216f72a1 1410 _("DWARF-2 expression error: DW_OP_entry_value is supported "
e18b2753
JK
1411 "only for single DW_OP_reg* or for DW_OP_fbreg(*)"));
1412}
1413
3326303b
MG
1414/* Fetch a DW_AT_const_value through a synthetic pointer. */
1415
1416static struct value *
1417fetch_const_value_from_synthetic_pointer (sect_offset die, LONGEST byte_offset,
14095eb3
SM
1418 dwarf2_per_cu_data *per_cu,
1419 dwarf2_per_objfile *per_objfile,
3326303b
MG
1420 struct type *type)
1421{
1422 struct value *result = NULL;
3326303b
MG
1423 const gdb_byte *bytes;
1424 LONGEST len;
1425
8268c778 1426 auto_obstack temp_obstack;
14095eb3
SM
1427 bytes = dwarf2_fetch_constant_bytes (die, per_cu, per_objfile,
1428 &temp_obstack, &len);
3326303b
MG
1429
1430 if (bytes != NULL)
1431 {
1432 if (byte_offset >= 0
df86565b 1433 && byte_offset + type->target_type ()->length () <= len)
3326303b
MG
1434 {
1435 bytes += byte_offset;
27710edb 1436 result = value_from_contents (type->target_type (), bytes);
3326303b
MG
1437 }
1438 else
1439 invalid_synthetic_pointer ();
1440 }
1441 else
27710edb 1442 result = allocate_optimized_out_value (type->target_type ());
3326303b 1443
3326303b
MG
1444 return result;
1445}
1446
f4091d26 1447/* See loc.h. */
3326303b 1448
f4091d26 1449struct value *
3326303b 1450indirect_synthetic_pointer (sect_offset die, LONGEST byte_offset,
14095eb3
SM
1451 dwarf2_per_cu_data *per_cu,
1452 dwarf2_per_objfile *per_objfile,
e4a62c65
TV
1453 struct frame_info *frame, struct type *type,
1454 bool resolve_abstract_p)
3326303b
MG
1455{
1456 /* Fetch the location expression of the DIE we're pointing to. */
041d9819
SM
1457 auto get_frame_address_in_block_wrapper = [frame] ()
1458 {
1459 return get_frame_address_in_block (frame);
1460 };
3326303b 1461 struct dwarf2_locexpr_baton baton
14095eb3 1462 = dwarf2_fetch_die_loc_sect_off (die, per_cu, per_objfile,
041d9819 1463 get_frame_address_in_block_wrapper,
e4a62c65 1464 resolve_abstract_p);
3326303b 1465
7942e96e 1466 /* Get type of pointed-to DIE. */
14095eb3
SM
1467 struct type *orig_type = dwarf2_fetch_die_type_sect_off (die, per_cu,
1468 per_objfile);
7942e96e
AA
1469 if (orig_type == NULL)
1470 invalid_synthetic_pointer ();
1471
3326303b
MG
1472 /* If pointed-to DIE has a DW_AT_location, evaluate it and return the
1473 resulting value. Otherwise, it may have a DW_AT_const_value instead,
1474 or it may've been optimized out. */
1475 if (baton.data != NULL)
7942e96e
AA
1476 return dwarf2_evaluate_loc_desc_full (orig_type, frame, baton.data,
1477 baton.size, baton.per_cu,
9f47c707 1478 baton.per_objfile,
27710edb 1479 type->target_type (),
3326303b
MG
1480 byte_offset);
1481 else
1482 return fetch_const_value_from_synthetic_pointer (die, byte_offset, per_cu,
14095eb3 1483 per_objfile, type);
3326303b
MG
1484}
1485
4c2df51b 1486/* Evaluate a location description, starting at DATA and with length
8cf6f0b1 1487 SIZE, to find the current location of variable of TYPE in the
7942e96e
AA
1488 context of FRAME. If SUBOBJ_TYPE is non-NULL, return instead the
1489 location of the subobject of type SUBOBJ_TYPE at byte offset
1490 SUBOBJ_BYTE_OFFSET within the variable of type TYPE. */
a2d33775 1491
8cf6f0b1
TT
1492static struct value *
1493dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
56eb65bd 1494 const gdb_byte *data, size_t size,
9f47c707
SM
1495 dwarf2_per_cu_data *per_cu,
1496 dwarf2_per_objfile *per_objfile,
7942e96e 1497 struct type *subobj_type,
70454ee7
ZZ
1498 LONGEST subobj_byte_offset,
1499 bool as_lval)
4c2df51b 1500{
7942e96e
AA
1501 if (subobj_type == NULL)
1502 {
1503 subobj_type = type;
1504 subobj_byte_offset = 0;
1505 }
1506 else if (subobj_byte_offset < 0)
8cf6f0b1
TT
1507 invalid_synthetic_pointer ();
1508
0d53c4c4 1509 if (size == 0)
7942e96e 1510 return allocate_optimized_out_value (subobj_type);
0d53c4c4 1511
0579205a 1512 dwarf_expr_context ctx (per_objfile, per_cu->addr_size ());
4c2df51b 1513
0579205a 1514 value *retval;
0cf08227 1515 scoped_value_mark free_values;
4a227398 1516
a70b8144 1517 try
79e1a869 1518 {
70454ee7
ZZ
1519 retval = ctx.evaluate (data, size, as_lval, per_cu, frame, nullptr,
1520 type, subobj_type, subobj_byte_offset);
79e1a869 1521 }
230d2906 1522 catch (const gdb_exception_error &ex)
79e1a869
PA
1523 {
1524 if (ex.error == NOT_AVAILABLE_ERROR)
1525 {
0cf08227 1526 free_values.free_to_mark ();
7942e96e
AA
1527 retval = allocate_value (subobj_type);
1528 mark_value_bytes_unavailable (retval, 0,
df86565b 1529 subobj_type->length ());
79e1a869
PA
1530 return retval;
1531 }
8e3b41a9
JK
1532 else if (ex.error == NO_ENTRY_VALUE_ERROR)
1533 {
1534 if (entry_values_debug)
1535 exception_print (gdb_stdout, ex);
0cf08227 1536 free_values.free_to_mark ();
7942e96e 1537 return allocate_optimized_out_value (subobj_type);
8e3b41a9 1538 }
79e1a869 1539 else
eedc3f4f 1540 throw;
79e1a869
PA
1541 }
1542
ba5bc3e5
ZZ
1543 /* We need to clean up all the values that are not needed any more.
1544 The problem with a value_ref_ptr class is that it disconnects the
1545 RETVAL from the value garbage collection, so we need to make
1546 a copy of that value on the stack to keep everything consistent.
1547 The value_ref_ptr will clean up after itself at the end of this block. */
1548 value_ref_ptr value_holder = value_ref_ptr::new_reference (retval);
1549 free_values.free_to_mark ();
42be36b3 1550
ba5bc3e5 1551 return value_copy (retval);
4c2df51b 1552}
8cf6f0b1
TT
1553
1554/* The exported interface to dwarf2_evaluate_loc_desc_full; it always
1555 passes 0 as the byte_offset. */
1556
1557struct value *
1558dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame,
56eb65bd 1559 const gdb_byte *data, size_t size,
9f47c707 1560 dwarf2_per_cu_data *per_cu,
70454ee7 1561 dwarf2_per_objfile *per_objfile, bool as_lval)
8cf6f0b1 1562{
7942e96e 1563 return dwarf2_evaluate_loc_desc_full (type, frame, data, size, per_cu,
70454ee7 1564 per_objfile, NULL, 0, as_lval);
8cf6f0b1
TT
1565}
1566
b249d2c2
TT
1567/* Evaluates a dwarf expression and stores the result in VAL,
1568 expecting that the dwarf expression only produces a single
1569 CORE_ADDR. FRAME is the frame in which the expression is
1570 evaluated. ADDR_STACK is a context (location of a variable) and
1571 might be needed to evaluate the location expression.
22480d7c 1572
1fb43cf7
AB
1573 PUSH_VALUES is an array of values to be pushed to the expression stack
1574 before evaluation starts. PUSH_VALUES[0] is pushed first, then
1575 PUSH_VALUES[1], and so on.
22480d7c
AB
1576
1577 Returns 1 on success, 0 otherwise. */
80180f79
SA
1578
1579static int
1580dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton,
63e43d3a 1581 struct frame_info *frame,
b249d2c2 1582 const struct property_addr_info *addr_stack,
61122aa9 1583 CORE_ADDR *valp,
1fb43cf7 1584 gdb::array_view<CORE_ADDR> push_values,
7ce05d21 1585 bool *is_reference)
80180f79 1586{
80180f79
SA
1587 if (dlbaton == NULL || dlbaton->size == 0)
1588 return 0;
1589
89b07335 1590 dwarf2_per_objfile *per_objfile = dlbaton->per_objfile;
0579205a
ZZ
1591 dwarf2_per_cu_data *per_cu = dlbaton->per_cu;
1592 dwarf_expr_context ctx (per_objfile, per_cu->addr_size ());
80180f79 1593
0579205a 1594 value *result;
ba5bc3e5
ZZ
1595 scoped_value_mark free_values;
1596
1fb43cf7
AB
1597 /* Place any initial values onto the expression stack. */
1598 for (const auto &val : push_values)
1599 ctx.push_address (val, false);
80180f79 1600
a70b8144 1601 try
16f808ec 1602 {
0579205a 1603 result = ctx.evaluate (dlbaton->data, dlbaton->size,
70454ee7 1604 true, per_cu, frame, addr_stack);
16f808ec 1605 }
230d2906 1606 catch (const gdb_exception_error &ex)
16f808ec
TV
1607 {
1608 if (ex.error == NOT_AVAILABLE_ERROR)
1609 {
1610 return 0;
1611 }
1612 else if (ex.error == NO_ENTRY_VALUE_ERROR)
1613 {
1614 if (entry_values_debug)
1615 exception_print (gdb_stdout, ex);
1616 return 0;
1617 }
1618 else
eedc3f4f 1619 throw;
16f808ec 1620 }
80180f79 1621
ba5bc3e5
ZZ
1622 if (value_optimized_out (result))
1623 return 0;
1624
1625 if (VALUE_LVAL (result) == lval_memory)
1626 *valp = value_address (result);
1627 else
80180f79 1628 {
ba5bc3e5
ZZ
1629 if (VALUE_LVAL (result) == not_lval)
1630 *is_reference = false;
1631
1632 *valp = value_as_address (result);
80180f79
SA
1633 }
1634
ba5bc3e5 1635 return 1;
80180f79
SA
1636}
1637
6c111a4e 1638/* See dwarf2/loc.h. */
80180f79 1639
603490bf 1640bool
08412b07 1641dwarf2_evaluate_property (const struct dynamic_prop *prop,
63e43d3a 1642 struct frame_info *frame,
fe26d3a3 1643 const struct property_addr_info *addr_stack,
61122aa9 1644 CORE_ADDR *value,
1fb43cf7 1645 gdb::array_view<CORE_ADDR> push_values)
80180f79
SA
1646{
1647 if (prop == NULL)
603490bf 1648 return false;
80180f79 1649
63e43d3a
PMR
1650 if (frame == NULL && has_stack_frames ())
1651 frame = get_selected_frame (NULL);
1652
8c2e4e06 1653 switch (prop->kind ())
80180f79
SA
1654 {
1655 case PROP_LOCEXPR:
1656 {
9a3c8263 1657 const struct dwarf2_property_baton *baton
8c2e4e06 1658 = (const struct dwarf2_property_baton *) prop->baton ();
9a49df9d 1659 gdb_assert (baton->property_type != NULL);
80180f79 1660
7ce05d21 1661 bool is_reference = baton->locexpr.is_reference;
b249d2c2 1662 if (dwarf2_locexpr_baton_eval (&baton->locexpr, frame, addr_stack,
1fb43cf7 1663 value, push_values, &is_reference))
80180f79 1664 {
7ce05d21 1665 if (is_reference)
80180f79 1666 {
9a49df9d 1667 struct value *val = value_at (baton->property_type, *value);
80180f79
SA
1668 *value = value_as_address (val);
1669 }
0d4e84ed
AB
1670 else
1671 {
1672 gdb_assert (baton->property_type != NULL);
1673
1674 struct type *type = check_typedef (baton->property_type);
df86565b 1675 if (type->length () < sizeof (CORE_ADDR)
c6d940a9 1676 && !type->is_unsigned ())
0d4e84ed
AB
1677 {
1678 /* If we have a valid return candidate and it's value
1679 is signed, we have to sign-extend the value because
1680 CORE_ADDR on 64bit machine has 8 bytes but address
1681 size of an 32bit application is bytes. */
1682 const int addr_size
09ba997f 1683 = (baton->locexpr.per_cu->addr_size ()
0d4e84ed
AB
1684 * TARGET_CHAR_BIT);
1685 const CORE_ADDR neg_mask
1686 = (~((CORE_ADDR) 0) << (addr_size - 1));
1687
1688 /* Check if signed bit is set and sign-extend values. */
1689 if (*value & neg_mask)
1690 *value |= neg_mask;
1691 }
1692 }
603490bf 1693 return true;
80180f79
SA
1694 }
1695 }
1696 break;
1697
1698 case PROP_LOCLIST:
1699 {
9a3c8263 1700 struct dwarf2_property_baton *baton
8c2e4e06 1701 = (struct dwarf2_property_baton *) prop->baton ();
1c33af77 1702 CORE_ADDR pc;
80180f79
SA
1703 const gdb_byte *data;
1704 struct value *val;
1705 size_t size;
1706
1c33af77
TV
1707 if (frame == NULL
1708 || !get_frame_address_in_block_if_available (frame, &pc))
1709 return false;
1710
80180f79
SA
1711 data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
1712 if (data != NULL)
1713 {
9a49df9d 1714 val = dwarf2_evaluate_loc_desc (baton->property_type, frame, data,
9f47c707
SM
1715 size, baton->loclist.per_cu,
1716 baton->loclist.per_objfile);
80180f79
SA
1717 if (!value_optimized_out (val))
1718 {
1719 *value = value_as_address (val);
603490bf 1720 return true;
80180f79
SA
1721 }
1722 }
1723 }
1724 break;
1725
1726 case PROP_CONST:
8c2e4e06 1727 *value = prop->const_val ();
603490bf 1728 return true;
df25ebbd
JB
1729
1730 case PROP_ADDR_OFFSET:
1731 {
9a3c8263 1732 struct dwarf2_property_baton *baton
8c2e4e06 1733 = (struct dwarf2_property_baton *) prop->baton ();
fe26d3a3 1734 const struct property_addr_info *pinfo;
df25ebbd
JB
1735 struct value *val;
1736
1737 for (pinfo = addr_stack; pinfo != NULL; pinfo = pinfo->next)
988915ee
TT
1738 {
1739 /* This approach lets us avoid checking the qualifiers. */
1740 if (TYPE_MAIN_TYPE (pinfo->type)
9a49df9d 1741 == TYPE_MAIN_TYPE (baton->property_type))
988915ee
TT
1742 break;
1743 }
df25ebbd 1744 if (pinfo == NULL)
2c811c0f 1745 error (_("cannot find reference address for offset property"));
b249d2c2 1746 if (pinfo->valaddr.data () != NULL)
c3345124
JB
1747 val = value_from_contents
1748 (baton->offset_info.type,
b249d2c2 1749 pinfo->valaddr.data () + baton->offset_info.offset);
c3345124
JB
1750 else
1751 val = value_at (baton->offset_info.type,
1752 pinfo->addr + baton->offset_info.offset);
df25ebbd 1753 *value = value_as_address (val);
603490bf 1754 return true;
df25ebbd 1755 }
386de171
TT
1756
1757 case PROP_VARIABLE_NAME:
1758 {
1759 struct value *val = compute_var_value (prop->variable_name ());
1760 if (val != nullptr)
1761 {
1762 *value = value_as_long (val);
1763 return true;
1764 }
1765 }
1766 break;
80180f79
SA
1767 }
1768
603490bf 1769 return false;
80180f79
SA
1770}
1771
6c111a4e 1772/* See dwarf2/loc.h. */
bb2ec1b3
TT
1773
1774void
d82b3862 1775dwarf2_compile_property_to_c (string_file *stream,
bb2ec1b3
TT
1776 const char *result_name,
1777 struct gdbarch *gdbarch,
3637a558 1778 std::vector<bool> &registers_used,
bb2ec1b3
TT
1779 const struct dynamic_prop *prop,
1780 CORE_ADDR pc,
1781 struct symbol *sym)
1782{
9a3c8263 1783 struct dwarf2_property_baton *baton
8c2e4e06 1784 = (struct dwarf2_property_baton *) prop->baton ();
bb2ec1b3
TT
1785 const gdb_byte *data;
1786 size_t size;
4b167ea1
SM
1787 dwarf2_per_cu_data *per_cu;
1788 dwarf2_per_objfile *per_objfile;
bb2ec1b3 1789
8c2e4e06 1790 if (prop->kind () == PROP_LOCEXPR)
bb2ec1b3
TT
1791 {
1792 data = baton->locexpr.data;
1793 size = baton->locexpr.size;
1794 per_cu = baton->locexpr.per_cu;
4b167ea1 1795 per_objfile = baton->locexpr.per_objfile;
bb2ec1b3
TT
1796 }
1797 else
1798 {
8c2e4e06 1799 gdb_assert (prop->kind () == PROP_LOCLIST);
bb2ec1b3
TT
1800
1801 data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
1802 per_cu = baton->loclist.per_cu;
4b167ea1 1803 per_objfile = baton->loclist.per_objfile;
bb2ec1b3
TT
1804 }
1805
1806 compile_dwarf_bounds_to_c (stream, result_name, prop, sym, pc,
1807 gdbarch, registers_used,
09ba997f 1808 per_cu->addr_size (),
4b167ea1 1809 data, data + size, per_cu, per_objfile);
bb2ec1b3
TT
1810}
1811
183657ed
ZZ
1812/* Compute the correct symbol_needs_kind value for the location
1813 expression in EXPR.
1814
1815 Implemented by traversing the logical control flow graph of the
1816 expression. */
4c2df51b 1817
183657ed
ZZ
1818static enum symbol_needs_kind
1819dwarf2_get_symbol_read_needs (gdb::array_view<const gdb_byte> expr,
1820 dwarf2_per_cu_data *per_cu,
1821 dwarf2_per_objfile *per_objfile,
1822 bfd_endian byte_order,
1823 int addr_size,
1824 int ref_addr_size,
1825 int depth = 0)
4c2df51b 1826{
183657ed 1827 enum symbol_needs_kind symbol_needs = SYMBOL_NEEDS_NONE;
192ca6d8 1828
183657ed
ZZ
1829 /* If the expression is empty, we have nothing to do. */
1830 if (expr.empty ())
1831 return symbol_needs;
4c2df51b 1832
183657ed 1833 const gdb_byte *expr_end = expr.data () + expr.size ();
192ca6d8 1834
183657ed
ZZ
1835 /* List of operations to visit. Operations in this list are not visited yet,
1836 so are not in VISITED_OPS (and vice-versa). */
1837 std::vector<const gdb_byte *> ops_to_visit;
192ca6d8 1838
183657ed
ZZ
1839 /* Operations already visited. */
1840 std::unordered_set<const gdb_byte *> visited_ops;
192ca6d8 1841
183657ed
ZZ
1842 /* Insert OP in OPS_TO_VISIT if it is within the expression's range and
1843 hasn't been visited yet. */
1844 auto insert_in_ops_to_visit
1845 = [expr_end, &visited_ops, &ops_to_visit] (const gdb_byte *op_ptr)
1846 {
1847 if (op_ptr >= expr_end)
1848 return;
192ca6d8 1849
183657ed
ZZ
1850 if (visited_ops.find (op_ptr) != visited_ops.end ())
1851 return;
192ca6d8 1852
183657ed
ZZ
1853 ops_to_visit.push_back (op_ptr);
1854 };
192ca6d8 1855
183657ed
ZZ
1856 /* Expressions can invoke other expressions with DW_OP_call*. Protect against
1857 a loop of calls. */
1858 const int max_depth = 256;
192ca6d8 1859
183657ed
ZZ
1860 if (depth > max_depth)
1861 error (_("DWARF-2 expression error: Loop detected."));
192ca6d8 1862
183657ed 1863 depth++;
7d5697f9 1864
183657ed
ZZ
1865 /* Initialize the to-visit list with the first operation. */
1866 insert_in_ops_to_visit (&expr[0]);
192ca6d8 1867
183657ed
ZZ
1868 while (!ops_to_visit.empty ())
1869 {
1870 /* Pop one op to visit, mark it as visited. */
1871 const gdb_byte *op_ptr = ops_to_visit.back ();
1872 ops_to_visit.pop_back ();
1873 gdb_assert (visited_ops.find (op_ptr) == visited_ops.end ());
1874 visited_ops.insert (op_ptr);
192ca6d8 1875
183657ed 1876 dwarf_location_atom op = (dwarf_location_atom) *op_ptr;
192ca6d8 1877
183657ed
ZZ
1878 /* Most operations have a single possible following operation
1879 (they are not conditional branches). The code below updates
1880 OP_PTR to point to that following operation, which is pushed
1881 back to OPS_TO_VISIT, if needed, at the bottom. Here, leave
1882 OP_PTR pointing just after the operand. */
1883 op_ptr++;
a6b786da 1884
183657ed
ZZ
1885 /* The DWARF expression might have a bug causing an infinite
1886 loop. In that case, quitting is the only way out. */
1887 QUIT;
a6b786da 1888
183657ed
ZZ
1889 switch (op)
1890 {
1891 case DW_OP_lit0:
1892 case DW_OP_lit1:
1893 case DW_OP_lit2:
1894 case DW_OP_lit3:
1895 case DW_OP_lit4:
1896 case DW_OP_lit5:
1897 case DW_OP_lit6:
1898 case DW_OP_lit7:
1899 case DW_OP_lit8:
1900 case DW_OP_lit9:
1901 case DW_OP_lit10:
1902 case DW_OP_lit11:
1903 case DW_OP_lit12:
1904 case DW_OP_lit13:
1905 case DW_OP_lit14:
1906 case DW_OP_lit15:
1907 case DW_OP_lit16:
1908 case DW_OP_lit17:
1909 case DW_OP_lit18:
1910 case DW_OP_lit19:
1911 case DW_OP_lit20:
1912 case DW_OP_lit21:
1913 case DW_OP_lit22:
1914 case DW_OP_lit23:
1915 case DW_OP_lit24:
1916 case DW_OP_lit25:
1917 case DW_OP_lit26:
1918 case DW_OP_lit27:
1919 case DW_OP_lit28:
1920 case DW_OP_lit29:
1921 case DW_OP_lit30:
1922 case DW_OP_lit31:
1923 case DW_OP_stack_value:
1924 case DW_OP_dup:
1925 case DW_OP_drop:
1926 case DW_OP_swap:
1927 case DW_OP_over:
1928 case DW_OP_rot:
1929 case DW_OP_deref:
1930 case DW_OP_abs:
1931 case DW_OP_neg:
1932 case DW_OP_not:
1933 case DW_OP_and:
1934 case DW_OP_div:
1935 case DW_OP_minus:
1936 case DW_OP_mod:
1937 case DW_OP_mul:
1938 case DW_OP_or:
1939 case DW_OP_plus:
1940 case DW_OP_shl:
1941 case DW_OP_shr:
1942 case DW_OP_shra:
1943 case DW_OP_xor:
1944 case DW_OP_le:
1945 case DW_OP_ge:
1946 case DW_OP_eq:
1947 case DW_OP_lt:
1948 case DW_OP_gt:
1949 case DW_OP_ne:
1950 case DW_OP_GNU_push_tls_address:
1951 case DW_OP_nop:
1952 case DW_OP_GNU_uninit:
1953 case DW_OP_push_object_address:
1954 break;
192ca6d8 1955
183657ed
ZZ
1956 case DW_OP_form_tls_address:
1957 if (symbol_needs <= SYMBOL_NEEDS_REGISTERS)
1958 symbol_needs = SYMBOL_NEEDS_REGISTERS;
1959 break;
3019eac3 1960
183657ed
ZZ
1961 case DW_OP_convert:
1962 case DW_OP_GNU_convert:
1963 case DW_OP_reinterpret:
1964 case DW_OP_GNU_reinterpret:
1965 case DW_OP_addrx:
1966 case DW_OP_GNU_addr_index:
1967 case DW_OP_GNU_const_index:
1968 case DW_OP_constu:
1969 case DW_OP_plus_uconst:
1970 case DW_OP_piece:
1971 op_ptr = safe_skip_leb128 (op_ptr, expr_end);
1972 break;
3019eac3 1973
183657ed
ZZ
1974 case DW_OP_consts:
1975 op_ptr = safe_skip_leb128 (op_ptr, expr_end);
1976 break;
08412b07 1977
183657ed
ZZ
1978 case DW_OP_bit_piece:
1979 op_ptr = safe_skip_leb128 (op_ptr, expr_end);
1980 op_ptr = safe_skip_leb128 (op_ptr, expr_end);
1981 break;
7635cf79 1982
183657ed
ZZ
1983 case DW_OP_deref_type:
1984 case DW_OP_GNU_deref_type:
1985 op_ptr++;
1986 op_ptr = safe_skip_leb128 (op_ptr, expr_end);
1987 break;
7635cf79 1988
183657ed
ZZ
1989 case DW_OP_addr:
1990 op_ptr += addr_size;
1991 break;
9e8b7a03 1992
183657ed
ZZ
1993 case DW_OP_const1u:
1994 case DW_OP_const1s:
1995 op_ptr += 1;
1996 break;
4c2df51b 1997
183657ed
ZZ
1998 case DW_OP_const2u:
1999 case DW_OP_const2s:
2000 op_ptr += 2;
2001 break;
eb115069 2002
183657ed
ZZ
2003 case DW_OP_const4s:
2004 case DW_OP_const4u:
2005 op_ptr += 4;
2006 break;
192ca6d8 2007
183657ed
ZZ
2008 case DW_OP_const8s:
2009 case DW_OP_const8u:
2010 op_ptr += 8;
2011 break;
2012
2013 case DW_OP_reg0:
2014 case DW_OP_reg1:
2015 case DW_OP_reg2:
2016 case DW_OP_reg3:
2017 case DW_OP_reg4:
2018 case DW_OP_reg5:
2019 case DW_OP_reg6:
2020 case DW_OP_reg7:
2021 case DW_OP_reg8:
2022 case DW_OP_reg9:
2023 case DW_OP_reg10:
2024 case DW_OP_reg11:
2025 case DW_OP_reg12:
2026 case DW_OP_reg13:
2027 case DW_OP_reg14:
2028 case DW_OP_reg15:
2029 case DW_OP_reg16:
2030 case DW_OP_reg17:
2031 case DW_OP_reg18:
2032 case DW_OP_reg19:
2033 case DW_OP_reg20:
2034 case DW_OP_reg21:
2035 case DW_OP_reg22:
2036 case DW_OP_reg23:
2037 case DW_OP_reg24:
2038 case DW_OP_reg25:
2039 case DW_OP_reg26:
2040 case DW_OP_reg27:
2041 case DW_OP_reg28:
2042 case DW_OP_reg29:
2043 case DW_OP_reg30:
2044 case DW_OP_reg31:
2045 case DW_OP_regx:
2046 case DW_OP_breg0:
2047 case DW_OP_breg1:
2048 case DW_OP_breg2:
2049 case DW_OP_breg3:
2050 case DW_OP_breg4:
2051 case DW_OP_breg5:
2052 case DW_OP_breg6:
2053 case DW_OP_breg7:
2054 case DW_OP_breg8:
2055 case DW_OP_breg9:
2056 case DW_OP_breg10:
2057 case DW_OP_breg11:
2058 case DW_OP_breg12:
2059 case DW_OP_breg13:
2060 case DW_OP_breg14:
2061 case DW_OP_breg15:
2062 case DW_OP_breg16:
2063 case DW_OP_breg17:
2064 case DW_OP_breg18:
2065 case DW_OP_breg19:
2066 case DW_OP_breg20:
2067 case DW_OP_breg21:
2068 case DW_OP_breg22:
2069 case DW_OP_breg23:
2070 case DW_OP_breg24:
2071 case DW_OP_breg25:
2072 case DW_OP_breg26:
2073 case DW_OP_breg27:
2074 case DW_OP_breg28:
2075 case DW_OP_breg29:
2076 case DW_OP_breg30:
2077 case DW_OP_breg31:
2078 case DW_OP_bregx:
2079 case DW_OP_fbreg:
2080 case DW_OP_call_frame_cfa:
2081 case DW_OP_entry_value:
2082 case DW_OP_GNU_entry_value:
2083 case DW_OP_GNU_parameter_ref:
2084 case DW_OP_regval_type:
2085 case DW_OP_GNU_regval_type:
2086 symbol_needs = SYMBOL_NEEDS_FRAME;
2087 break;
4c2df51b 2088
183657ed
ZZ
2089 case DW_OP_implicit_value:
2090 {
2091 uint64_t uoffset;
2092 op_ptr = safe_read_uleb128 (op_ptr, expr_end, &uoffset);
2093 op_ptr += uoffset;
2094 break;
2095 }
4c2df51b 2096
183657ed
ZZ
2097 case DW_OP_implicit_pointer:
2098 case DW_OP_GNU_implicit_pointer:
2099 op_ptr += ref_addr_size;
2100 op_ptr = safe_skip_leb128 (op_ptr, expr_end);
2101 break;
f630a401 2102
183657ed
ZZ
2103 case DW_OP_deref_size:
2104 case DW_OP_pick:
2105 op_ptr++;
2106 break;
87808bd6 2107
183657ed
ZZ
2108 case DW_OP_skip:
2109 {
2110 int64_t offset = extract_signed_integer (op_ptr, 2, byte_order);
2111 op_ptr += 2;
2112 op_ptr += offset;
2113 break;
2114 }
2115
2116 case DW_OP_bra:
2117 {
2118 /* This is the only operation that pushes two operations in
2119 the to-visit list, so handle it all here. */
2120 LONGEST offset = extract_signed_integer (op_ptr, 2, byte_order);
2121 op_ptr += 2;
2122
2123 insert_in_ops_to_visit (op_ptr + offset);
2124 insert_in_ops_to_visit (op_ptr);
2125 continue;
2126 }
f54be24b 2127
183657ed
ZZ
2128 case DW_OP_call2:
2129 case DW_OP_call4:
2130 {
2131 unsigned int len = op == DW_OP_call2 ? 2 : 4;
2132 cu_offset cu_off
2133 = (cu_offset) extract_unsigned_integer (op_ptr, len, byte_order);
2134 op_ptr += len;
2135
2136 auto get_frame_pc = [&symbol_needs] ()
2137 {
2138 symbol_needs = SYMBOL_NEEDS_FRAME;
2139 return 0;
2140 };
2141
2142 struct dwarf2_locexpr_baton baton
2143 = dwarf2_fetch_die_loc_cu_off (cu_off, per_cu,
2144 per_objfile,
2145 get_frame_pc);
2146
2147 /* If SYMBOL_NEEDS_FRAME is returned from the previous call,
2148 we dont have to check the baton content. */
2149 if (symbol_needs != SYMBOL_NEEDS_FRAME)
2150 {
2151 gdbarch *arch = baton.per_objfile->objfile->arch ();
2152 gdb::array_view<const gdb_byte> sub_expr (baton.data,
2153 baton.size);
2154 symbol_needs
2155 = dwarf2_get_symbol_read_needs (sub_expr,
2156 baton.per_cu,
2157 baton.per_objfile,
2158 gdbarch_byte_order (arch),
2159 baton.per_cu->addr_size (),
2160 baton.per_cu->ref_addr_size (),
2161 depth);
2162 }
2163 break;
2164 }
2165
2166 case DW_OP_GNU_variable_value:
2167 {
2168 sect_offset sect_off
2169 = (sect_offset) extract_unsigned_integer (op_ptr,
2170 ref_addr_size,
2171 byte_order);
2172 op_ptr += ref_addr_size;
2173
2174 struct type *die_type
2175 = dwarf2_fetch_die_type_sect_off (sect_off, per_cu,
2176 per_objfile);
2177
2178 if (die_type == NULL)
2179 error (_("Bad DW_OP_GNU_variable_value DIE."));
2180
2181 /* Note: Things still work when the following test is
2182 removed. This test and error is here to conform to the
2183 proposed specification. */
2184 if (die_type->code () != TYPE_CODE_INT
2185 && die_type->code () != TYPE_CODE_PTR)
2186 error (_("Type of DW_OP_GNU_variable_value DIE must be "
2187 "an integer or pointer."));
2188
2189 auto get_frame_pc = [&symbol_needs] ()
2190 {
2191 symbol_needs = SYMBOL_NEEDS_FRAME;
2192 return 0;
2193 };
2194
2195 struct dwarf2_locexpr_baton baton
2196 = dwarf2_fetch_die_loc_sect_off (sect_off, per_cu,
2197 per_objfile,
2198 get_frame_pc, true);
2199
2200 /* If SYMBOL_NEEDS_FRAME is returned from the previous call,
2201 we dont have to check the baton content. */
2202 if (symbol_needs != SYMBOL_NEEDS_FRAME)
2203 {
2204 gdbarch *arch = baton.per_objfile->objfile->arch ();
2205 gdb::array_view<const gdb_byte> sub_expr (baton.data,
2206 baton.size);
2207 symbol_needs
2208 = dwarf2_get_symbol_read_needs (sub_expr,
2209 baton.per_cu,
2210 baton.per_objfile,
2211 gdbarch_byte_order (arch),
2212 baton.per_cu->addr_size (),
2213 baton.per_cu->ref_addr_size (),
2214 depth);
2215 }
2216 break;
2217 }
2218
2219 case DW_OP_const_type:
2220 case DW_OP_GNU_const_type:
2221 {
2222 uint64_t uoffset;
2223 op_ptr = safe_read_uleb128 (op_ptr, expr_end, &uoffset);
2224 gdb_byte offset = *op_ptr++;
2225 op_ptr += offset;
2226 break;
2227 }
2228
2229 default:
2230 error (_("Unhandled DWARF expression opcode 0x%x"), op);
2231 }
2232
2233 /* If it is known that a frame information is
2234 needed we can stop parsing the expression. */
2235 if (symbol_needs == SYMBOL_NEEDS_FRAME)
2236 break;
2237
2238 insert_in_ops_to_visit (op_ptr);
2239 }
2240
2241 return symbol_needs;
4c2df51b
DJ
2242}
2243
3cf03773
TT
2244/* A helper function that throws an unimplemented error mentioning a
2245 given DWARF operator. */
2246
621846f4 2247static void ATTRIBUTE_NORETURN
3cf03773 2248unimplemented (unsigned int op)
0d53c4c4 2249{
f39c6ffd 2250 const char *name = get_DW_OP_name (op);
b1bfef65
TT
2251
2252 if (name)
2253 error (_("DWARF operator %s cannot be translated to an agent expression"),
2254 name);
2255 else
1ba1b353
TT
2256 error (_("Unknown DWARF operator 0x%02x cannot be translated "
2257 "to an agent expression"),
b1bfef65 2258 op);
3cf03773 2259}
08922a10 2260
6c111a4e 2261/* See dwarf2/loc.h.
0fde2c53
DE
2262
2263 This is basically a wrapper on gdbarch_dwarf2_reg_to_regnum so that we
2264 can issue a complaint, which is better than having every target's
2265 implementation of dwarf2_reg_to_regnum do it. */
08922a10 2266
d064d1be 2267int
0fde2c53 2268dwarf_reg_to_regnum (struct gdbarch *arch, int dwarf_reg)
3cf03773
TT
2269{
2270 int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg);
0fde2c53 2271
3cf03773 2272 if (reg == -1)
0fde2c53 2273 {
b98664d3 2274 complaint (_("bad DWARF register number %d"), dwarf_reg);
0fde2c53
DE
2275 }
2276 return reg;
2277}
2278
2279/* Subroutine of dwarf_reg_to_regnum_or_error to simplify it.
2280 Throw an error because DWARF_REG is bad. */
2281
2282static void
2283throw_bad_regnum_error (ULONGEST dwarf_reg)
2284{
2285 /* Still want to print -1 as "-1".
2286 We *could* have int and ULONGEST versions of dwarf2_reg_to_regnum_or_error
2287 but that's overkill for now. */
2288 if ((int) dwarf_reg == dwarf_reg)
2289 error (_("Unable to access DWARF register number %d"), (int) dwarf_reg);
2290 error (_("Unable to access DWARF register number %s"),
2291 pulongest (dwarf_reg));
2292}
2293
6c111a4e 2294/* See dwarf2/loc.h. */
0fde2c53
DE
2295
2296int
2297dwarf_reg_to_regnum_or_error (struct gdbarch *arch, ULONGEST dwarf_reg)
2298{
2299 int reg;
2300
2301 if (dwarf_reg > INT_MAX)
2302 throw_bad_regnum_error (dwarf_reg);
2303 /* Yes, we will end up issuing a complaint and an error if DWARF_REG is
2304 bad, but that's ok. */
2305 reg = dwarf_reg_to_regnum (arch, (int) dwarf_reg);
2306 if (reg == -1)
2307 throw_bad_regnum_error (dwarf_reg);
3cf03773
TT
2308 return reg;
2309}
08922a10 2310
3cf03773
TT
2311/* A helper function that emits an access to memory. ARCH is the
2312 target architecture. EXPR is the expression which we are building.
2313 NBITS is the number of bits we want to read. This emits the
2314 opcodes needed to read the memory and then extract the desired
2315 bits. */
08922a10 2316
3cf03773
TT
2317static void
2318access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits)
08922a10 2319{
3cf03773
TT
2320 ULONGEST nbytes = (nbits + 7) / 8;
2321
9df7235c 2322 gdb_assert (nbytes > 0 && nbytes <= sizeof (LONGEST));
3cf03773 2323
92bc6a20 2324 if (expr->tracing)
3cf03773
TT
2325 ax_trace_quick (expr, nbytes);
2326
2327 if (nbits <= 8)
2328 ax_simple (expr, aop_ref8);
2329 else if (nbits <= 16)
2330 ax_simple (expr, aop_ref16);
2331 else if (nbits <= 32)
2332 ax_simple (expr, aop_ref32);
2333 else
2334 ax_simple (expr, aop_ref64);
2335
2336 /* If we read exactly the number of bytes we wanted, we're done. */
2337 if (8 * nbytes == nbits)
2338 return;
2339
d5a22e77 2340 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
0d53c4c4 2341 {
3cf03773
TT
2342 /* On a bits-big-endian machine, we want the high-order
2343 NBITS. */
2344 ax_const_l (expr, 8 * nbytes - nbits);
2345 ax_simple (expr, aop_rsh_unsigned);
0d53c4c4 2346 }
3cf03773 2347 else
0d53c4c4 2348 {
3cf03773
TT
2349 /* On a bits-little-endian box, we want the low-order NBITS. */
2350 ax_zero_ext (expr, nbits);
0d53c4c4 2351 }
3cf03773 2352}
0936ad1d 2353
3cf03773
TT
2354/* Compile a DWARF location expression to an agent expression.
2355
2356 EXPR is the agent expression we are building.
2357 LOC is the agent value we modify.
2358 ARCH is the architecture.
2359 ADDR_SIZE is the size of addresses, in bytes.
2360 OP_PTR is the start of the location expression.
2361 OP_END is one past the last byte of the location expression.
2362
2363 This will throw an exception for various kinds of errors -- for
2364 example, if the expression cannot be compiled, or if the expression
2365 is invalid. */
0936ad1d 2366
5707a07a 2367static void
9f6f94ff 2368dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
40f4af28
SM
2369 unsigned int addr_size, const gdb_byte *op_ptr,
2370 const gdb_byte *op_end,
4b167ea1
SM
2371 dwarf2_per_cu_data *per_cu,
2372 dwarf2_per_objfile *per_objfile)
3cf03773 2373{
40f4af28 2374 gdbarch *arch = expr->gdbarch;
58414334 2375 std::vector<int> dw_labels, patches;
3cf03773
TT
2376 const gdb_byte * const base = op_ptr;
2377 const gdb_byte *previous_piece = op_ptr;
2378 enum bfd_endian byte_order = gdbarch_byte_order (arch);
2379 ULONGEST bits_collected = 0;
2380 unsigned int addr_size_bits = 8 * addr_size;
d5a22e77 2381 bool bits_big_endian = byte_order == BFD_ENDIAN_BIG;
0936ad1d 2382
58414334 2383 std::vector<int> offsets (op_end - op_ptr, -1);
0936ad1d 2384
3cf03773
TT
2385 /* By default we are making an address. */
2386 loc->kind = axs_lvalue_memory;
0d45f56e 2387
3cf03773
TT
2388 while (op_ptr < op_end)
2389 {
aead7601 2390 enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr;
9fccedf7
DE
2391 uint64_t uoffset, reg;
2392 int64_t offset;
3cf03773
TT
2393 int i;
2394
2395 offsets[op_ptr - base] = expr->len;
2396 ++op_ptr;
2397
2398 /* Our basic approach to code generation is to map DWARF
2399 operations directly to AX operations. However, there are
2400 some differences.
2401
2402 First, DWARF works on address-sized units, but AX always uses
2403 LONGEST. For most operations we simply ignore this
2404 difference; instead we generate sign extensions as needed
2405 before division and comparison operations. It would be nice
2406 to omit the sign extensions, but there is no way to determine
2407 the size of the target's LONGEST. (This code uses the size
2408 of the host LONGEST in some cases -- that is a bug but it is
2409 difficult to fix.)
2410
2411 Second, some DWARF operations cannot be translated to AX.
2412 For these we simply fail. See
2413 http://sourceware.org/bugzilla/show_bug.cgi?id=11662. */
2414 switch (op)
0936ad1d 2415 {
3cf03773
TT
2416 case DW_OP_lit0:
2417 case DW_OP_lit1:
2418 case DW_OP_lit2:
2419 case DW_OP_lit3:
2420 case DW_OP_lit4:
2421 case DW_OP_lit5:
2422 case DW_OP_lit6:
2423 case DW_OP_lit7:
2424 case DW_OP_lit8:
2425 case DW_OP_lit9:
2426 case DW_OP_lit10:
2427 case DW_OP_lit11:
2428 case DW_OP_lit12:
2429 case DW_OP_lit13:
2430 case DW_OP_lit14:
2431 case DW_OP_lit15:
2432 case DW_OP_lit16:
2433 case DW_OP_lit17:
2434 case DW_OP_lit18:
2435 case DW_OP_lit19:
2436 case DW_OP_lit20:
2437 case DW_OP_lit21:
2438 case DW_OP_lit22:
2439 case DW_OP_lit23:
2440 case DW_OP_lit24:
2441 case DW_OP_lit25:
2442 case DW_OP_lit26:
2443 case DW_OP_lit27:
2444 case DW_OP_lit28:
2445 case DW_OP_lit29:
2446 case DW_OP_lit30:
2447 case DW_OP_lit31:
2448 ax_const_l (expr, op - DW_OP_lit0);
2449 break;
0d53c4c4 2450
3cf03773 2451 case DW_OP_addr:
ac56253d 2452 uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order);
3cf03773 2453 op_ptr += addr_size;
ac56253d
TT
2454 /* Some versions of GCC emit DW_OP_addr before
2455 DW_OP_GNU_push_tls_address. In this case the value is an
2456 index, not an address. We don't support things like
2457 branching between the address and the TLS op. */
2458 if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
4b167ea1 2459 uoffset += per_objfile->objfile->text_section_offset ();
ac56253d 2460 ax_const_l (expr, uoffset);
3cf03773 2461 break;
4c2df51b 2462
3cf03773
TT
2463 case DW_OP_const1u:
2464 ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order));
2465 op_ptr += 1;
2466 break;
fc3ecb3e 2467
3cf03773
TT
2468 case DW_OP_const1s:
2469 ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order));
2470 op_ptr += 1;
2471 break;
fc3ecb3e 2472
3cf03773
TT
2473 case DW_OP_const2u:
2474 ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order));
2475 op_ptr += 2;
2476 break;
fc3ecb3e 2477
3cf03773
TT
2478 case DW_OP_const2s:
2479 ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order));
2480 op_ptr += 2;
2481 break;
fc3ecb3e 2482
3cf03773
TT
2483 case DW_OP_const4u:
2484 ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order));
2485 op_ptr += 4;
2486 break;
fc3ecb3e 2487
3cf03773
TT
2488 case DW_OP_const4s:
2489 ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order));
2490 op_ptr += 4;
2491 break;
fc3ecb3e 2492
3cf03773
TT
2493 case DW_OP_const8u:
2494 ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order));
2495 op_ptr += 8;
2496 break;
fc3ecb3e 2497
3cf03773
TT
2498 case DW_OP_const8s:
2499 ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order));
2500 op_ptr += 8;
2501 break;
fc3ecb3e 2502
3cf03773 2503 case DW_OP_constu:
f664829e 2504 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
3cf03773
TT
2505 ax_const_l (expr, uoffset);
2506 break;
fc3ecb3e 2507
3cf03773 2508 case DW_OP_consts:
f664829e 2509 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
3cf03773
TT
2510 ax_const_l (expr, offset);
2511 break;
9c238357 2512
3cf03773
TT
2513 case DW_OP_reg0:
2514 case DW_OP_reg1:
2515 case DW_OP_reg2:
2516 case DW_OP_reg3:
2517 case DW_OP_reg4:
2518 case DW_OP_reg5:
2519 case DW_OP_reg6:
2520 case DW_OP_reg7:
2521 case DW_OP_reg8:
2522 case DW_OP_reg9:
2523 case DW_OP_reg10:
2524 case DW_OP_reg11:
2525 case DW_OP_reg12:
2526 case DW_OP_reg13:
2527 case DW_OP_reg14:
2528 case DW_OP_reg15:
2529 case DW_OP_reg16:
2530 case DW_OP_reg17:
2531 case DW_OP_reg18:
2532 case DW_OP_reg19:
2533 case DW_OP_reg20:
2534 case DW_OP_reg21:
2535 case DW_OP_reg22:
2536 case DW_OP_reg23:
2537 case DW_OP_reg24:
2538 case DW_OP_reg25:
2539 case DW_OP_reg26:
2540 case DW_OP_reg27:
2541 case DW_OP_reg28:
2542 case DW_OP_reg29:
2543 case DW_OP_reg30:
2544 case DW_OP_reg31:
2545 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
0fde2c53 2546 loc->u.reg = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_reg0);
3cf03773
TT
2547 loc->kind = axs_lvalue_register;
2548 break;
9c238357 2549
3cf03773 2550 case DW_OP_regx:
f664829e 2551 op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
3cf03773 2552 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
0fde2c53 2553 loc->u.reg = dwarf_reg_to_regnum_or_error (arch, reg);
3cf03773
TT
2554 loc->kind = axs_lvalue_register;
2555 break;
08922a10 2556
3cf03773
TT
2557 case DW_OP_implicit_value:
2558 {
9fccedf7 2559 uint64_t len;
3cf03773 2560
f664829e 2561 op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
3cf03773
TT
2562 if (op_ptr + len > op_end)
2563 error (_("DW_OP_implicit_value: too few bytes available."));
2564 if (len > sizeof (ULONGEST))
2565 error (_("Cannot translate DW_OP_implicit_value of %d bytes"),
2566 (int) len);
2567
2568 ax_const_l (expr, extract_unsigned_integer (op_ptr, len,
2569 byte_order));
2570 op_ptr += len;
2571 dwarf_expr_require_composition (op_ptr, op_end,
2572 "DW_OP_implicit_value");
2573
2574 loc->kind = axs_rvalue;
2575 }
2576 break;
08922a10 2577
3cf03773
TT
2578 case DW_OP_stack_value:
2579 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
2580 loc->kind = axs_rvalue;
2581 break;
08922a10 2582
3cf03773
TT
2583 case DW_OP_breg0:
2584 case DW_OP_breg1:
2585 case DW_OP_breg2:
2586 case DW_OP_breg3:
2587 case DW_OP_breg4:
2588 case DW_OP_breg5:
2589 case DW_OP_breg6:
2590 case DW_OP_breg7:
2591 case DW_OP_breg8:
2592 case DW_OP_breg9:
2593 case DW_OP_breg10:
2594 case DW_OP_breg11:
2595 case DW_OP_breg12:
2596 case DW_OP_breg13:
2597 case DW_OP_breg14:
2598 case DW_OP_breg15:
2599 case DW_OP_breg16:
2600 case DW_OP_breg17:
2601 case DW_OP_breg18:
2602 case DW_OP_breg19:
2603 case DW_OP_breg20:
2604 case DW_OP_breg21:
2605 case DW_OP_breg22:
2606 case DW_OP_breg23:
2607 case DW_OP_breg24:
2608 case DW_OP_breg25:
2609 case DW_OP_breg26:
2610 case DW_OP_breg27:
2611 case DW_OP_breg28:
2612 case DW_OP_breg29:
2613 case DW_OP_breg30:
2614 case DW_OP_breg31:
f664829e 2615 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
0fde2c53 2616 i = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_breg0);
3cf03773
TT
2617 ax_reg (expr, i);
2618 if (offset != 0)
2619 {
2620 ax_const_l (expr, offset);
2621 ax_simple (expr, aop_add);
2622 }
2623 break;
fc3ecb3e 2624
3cf03773
TT
2625 case DW_OP_bregx:
2626 {
f664829e
DE
2627 op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
2628 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
0fde2c53 2629 i = dwarf_reg_to_regnum_or_error (arch, reg);
3cf03773
TT
2630 ax_reg (expr, i);
2631 if (offset != 0)
2632 {
2633 ax_const_l (expr, offset);
2634 ax_simple (expr, aop_add);
2635 }
2636 }
2637 break;
fc3ecb3e 2638
3cf03773
TT
2639 case DW_OP_fbreg:
2640 {
2641 const gdb_byte *datastart;
2642 size_t datalen;
3977b71f 2643 const struct block *b;
3cf03773 2644 struct symbol *framefunc;
08922a10 2645
3cf03773
TT
2646 b = block_for_pc (expr->scope);
2647
2648 if (!b)
2649 error (_("No block found for address"));
2650
2651 framefunc = block_linkage_function (b);
2652
2653 if (!framefunc)
2654 error (_("No function found for block"));
2655
af945b75
TT
2656 func_get_frame_base_dwarf_block (framefunc, expr->scope,
2657 &datastart, &datalen);
3cf03773 2658
f664829e 2659 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
40f4af28 2660 dwarf2_compile_expr_to_ax (expr, loc, addr_size, datastart,
4b167ea1
SM
2661 datastart + datalen, per_cu,
2662 per_objfile);
d84cf7eb
TT
2663 if (loc->kind == axs_lvalue_register)
2664 require_rvalue (expr, loc);
3cf03773
TT
2665
2666 if (offset != 0)
2667 {
2668 ax_const_l (expr, offset);
2669 ax_simple (expr, aop_add);
2670 }
2671
2672 loc->kind = axs_lvalue_memory;
2673 }
08922a10 2674 break;
08922a10 2675
3cf03773
TT
2676 case DW_OP_dup:
2677 ax_simple (expr, aop_dup);
2678 break;
08922a10 2679
3cf03773
TT
2680 case DW_OP_drop:
2681 ax_simple (expr, aop_pop);
2682 break;
08922a10 2683
3cf03773
TT
2684 case DW_OP_pick:
2685 offset = *op_ptr++;
c7f96d2b 2686 ax_pick (expr, offset);
3cf03773 2687 break;
fc3ecb3e 2688
3cf03773
TT
2689 case DW_OP_swap:
2690 ax_simple (expr, aop_swap);
2691 break;
08922a10 2692
3cf03773 2693 case DW_OP_over:
c7f96d2b 2694 ax_pick (expr, 1);
3cf03773 2695 break;
08922a10 2696
3cf03773 2697 case DW_OP_rot:
c7f96d2b 2698 ax_simple (expr, aop_rot);
3cf03773 2699 break;
08922a10 2700
3cf03773
TT
2701 case DW_OP_deref:
2702 case DW_OP_deref_size:
2703 {
2704 int size;
08922a10 2705
3cf03773
TT
2706 if (op == DW_OP_deref_size)
2707 size = *op_ptr++;
2708 else
2709 size = addr_size;
2710
9df7235c 2711 if (size != 1 && size != 2 && size != 4 && size != 8)
f3cec7e6
HZ
2712 error (_("Unsupported size %d in %s"),
2713 size, get_DW_OP_name (op));
9df7235c 2714 access_memory (arch, expr, size * TARGET_CHAR_BIT);
3cf03773
TT
2715 }
2716 break;
2717
2718 case DW_OP_abs:
2719 /* Sign extend the operand. */
2720 ax_ext (expr, addr_size_bits);
2721 ax_simple (expr, aop_dup);
2722 ax_const_l (expr, 0);
2723 ax_simple (expr, aop_less_signed);
2724 ax_simple (expr, aop_log_not);
2725 i = ax_goto (expr, aop_if_goto);
2726 /* We have to emit 0 - X. */
2727 ax_const_l (expr, 0);
2728 ax_simple (expr, aop_swap);
2729 ax_simple (expr, aop_sub);
2730 ax_label (expr, i, expr->len);
2731 break;
2732
2733 case DW_OP_neg:
2734 /* No need to sign extend here. */
2735 ax_const_l (expr, 0);
2736 ax_simple (expr, aop_swap);
2737 ax_simple (expr, aop_sub);
2738 break;
2739
2740 case DW_OP_not:
2741 /* Sign extend the operand. */
2742 ax_ext (expr, addr_size_bits);
2743 ax_simple (expr, aop_bit_not);
2744 break;
2745
2746 case DW_OP_plus_uconst:
f664829e 2747 op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
3cf03773
TT
2748 /* It would be really weird to emit `DW_OP_plus_uconst 0',
2749 but we micro-optimize anyhow. */
2750 if (reg != 0)
2751 {
2752 ax_const_l (expr, reg);
2753 ax_simple (expr, aop_add);
2754 }
2755 break;
2756
2757 case DW_OP_and:
2758 ax_simple (expr, aop_bit_and);
2759 break;
2760
2761 case DW_OP_div:
2762 /* Sign extend the operands. */
2763 ax_ext (expr, addr_size_bits);
2764 ax_simple (expr, aop_swap);
2765 ax_ext (expr, addr_size_bits);
2766 ax_simple (expr, aop_swap);
2767 ax_simple (expr, aop_div_signed);
08922a10
SS
2768 break;
2769
3cf03773
TT
2770 case DW_OP_minus:
2771 ax_simple (expr, aop_sub);
2772 break;
2773
2774 case DW_OP_mod:
2775 ax_simple (expr, aop_rem_unsigned);
2776 break;
2777
2778 case DW_OP_mul:
2779 ax_simple (expr, aop_mul);
2780 break;
2781
2782 case DW_OP_or:
2783 ax_simple (expr, aop_bit_or);
2784 break;
2785
2786 case DW_OP_plus:
2787 ax_simple (expr, aop_add);
2788 break;
2789
2790 case DW_OP_shl:
2791 ax_simple (expr, aop_lsh);
2792 break;
2793
2794 case DW_OP_shr:
2795 ax_simple (expr, aop_rsh_unsigned);
2796 break;
2797
2798 case DW_OP_shra:
2799 ax_simple (expr, aop_rsh_signed);
2800 break;
2801
2802 case DW_OP_xor:
2803 ax_simple (expr, aop_bit_xor);
2804 break;
2805
2806 case DW_OP_le:
2807 /* Sign extend the operands. */
2808 ax_ext (expr, addr_size_bits);
2809 ax_simple (expr, aop_swap);
2810 ax_ext (expr, addr_size_bits);
2811 /* Note no swap here: A <= B is !(B < A). */
2812 ax_simple (expr, aop_less_signed);
2813 ax_simple (expr, aop_log_not);
2814 break;
2815
2816 case DW_OP_ge:
2817 /* Sign extend the operands. */
2818 ax_ext (expr, addr_size_bits);
2819 ax_simple (expr, aop_swap);
2820 ax_ext (expr, addr_size_bits);
2821 ax_simple (expr, aop_swap);
2822 /* A >= B is !(A < B). */
2823 ax_simple (expr, aop_less_signed);
2824 ax_simple (expr, aop_log_not);
2825 break;
2826
2827 case DW_OP_eq:
2828 /* Sign extend the operands. */
2829 ax_ext (expr, addr_size_bits);
2830 ax_simple (expr, aop_swap);
2831 ax_ext (expr, addr_size_bits);
2832 /* No need for a second swap here. */
2833 ax_simple (expr, aop_equal);
2834 break;
2835
2836 case DW_OP_lt:
2837 /* Sign extend the operands. */
2838 ax_ext (expr, addr_size_bits);
2839 ax_simple (expr, aop_swap);
2840 ax_ext (expr, addr_size_bits);
2841 ax_simple (expr, aop_swap);
2842 ax_simple (expr, aop_less_signed);
2843 break;
2844
2845 case DW_OP_gt:
2846 /* Sign extend the operands. */
2847 ax_ext (expr, addr_size_bits);
2848 ax_simple (expr, aop_swap);
2849 ax_ext (expr, addr_size_bits);
2850 /* Note no swap here: A > B is B < A. */
2851 ax_simple (expr, aop_less_signed);
2852 break;
2853
2854 case DW_OP_ne:
2855 /* Sign extend the operands. */
2856 ax_ext (expr, addr_size_bits);
2857 ax_simple (expr, aop_swap);
2858 ax_ext (expr, addr_size_bits);
2859 /* No need for a swap here. */
2860 ax_simple (expr, aop_equal);
2861 ax_simple (expr, aop_log_not);
2862 break;
2863
2864 case DW_OP_call_frame_cfa:
a8fd5589
TT
2865 {
2866 int regnum;
2867 CORE_ADDR text_offset;
2868 LONGEST off;
2869 const gdb_byte *cfa_start, *cfa_end;
2870
2871 if (dwarf2_fetch_cfa_info (arch, expr->scope, per_cu,
2872 &regnum, &off,
2873 &text_offset, &cfa_start, &cfa_end))
2874 {
2875 /* Register. */
2876 ax_reg (expr, regnum);
2877 if (off != 0)
2878 {
2879 ax_const_l (expr, off);
2880 ax_simple (expr, aop_add);
2881 }
2882 }
2883 else
2884 {
2885 /* Another expression. */
2886 ax_const_l (expr, text_offset);
40f4af28 2887 dwarf2_compile_expr_to_ax (expr, loc, addr_size, cfa_start,
4b167ea1 2888 cfa_end, per_cu, per_objfile);
a8fd5589
TT
2889 }
2890
2891 loc->kind = axs_lvalue_memory;
2892 }
3cf03773
TT
2893 break;
2894
2895 case DW_OP_GNU_push_tls_address:
4aa4e28b 2896 case DW_OP_form_tls_address:
3cf03773
TT
2897 unimplemented (op);
2898 break;
2899
08412b07
JB
2900 case DW_OP_push_object_address:
2901 unimplemented (op);
2902 break;
2903
3cf03773
TT
2904 case DW_OP_skip:
2905 offset = extract_signed_integer (op_ptr, 2, byte_order);
2906 op_ptr += 2;
2907 i = ax_goto (expr, aop_goto);
58414334
TT
2908 dw_labels.push_back (op_ptr + offset - base);
2909 patches.push_back (i);
3cf03773
TT
2910 break;
2911
2912 case DW_OP_bra:
2913 offset = extract_signed_integer (op_ptr, 2, byte_order);
2914 op_ptr += 2;
2915 /* Zero extend the operand. */
2916 ax_zero_ext (expr, addr_size_bits);
2917 i = ax_goto (expr, aop_if_goto);
58414334
TT
2918 dw_labels.push_back (op_ptr + offset - base);
2919 patches.push_back (i);
3cf03773
TT
2920 break;
2921
2922 case DW_OP_nop:
2923 break;
2924
dda83cd7 2925 case DW_OP_piece:
3cf03773 2926 case DW_OP_bit_piece:
08922a10 2927 {
b926417a 2928 uint64_t size;
3cf03773
TT
2929
2930 if (op_ptr - 1 == previous_piece)
2931 error (_("Cannot translate empty pieces to agent expressions"));
2932 previous_piece = op_ptr - 1;
2933
dda83cd7 2934 op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
3cf03773
TT
2935 if (op == DW_OP_piece)
2936 {
2937 size *= 8;
b926417a 2938 uoffset = 0;
3cf03773
TT
2939 }
2940 else
b926417a 2941 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
08922a10 2942
3cf03773
TT
2943 if (bits_collected + size > 8 * sizeof (LONGEST))
2944 error (_("Expression pieces exceed word size"));
2945
2946 /* Access the bits. */
2947 switch (loc->kind)
2948 {
2949 case axs_lvalue_register:
2950 ax_reg (expr, loc->u.reg);
2951 break;
2952
2953 case axs_lvalue_memory:
2954 /* Offset the pointer, if needed. */
b926417a 2955 if (uoffset > 8)
3cf03773 2956 {
b926417a 2957 ax_const_l (expr, uoffset / 8);
3cf03773 2958 ax_simple (expr, aop_add);
b926417a 2959 uoffset %= 8;
3cf03773
TT
2960 }
2961 access_memory (arch, expr, size);
2962 break;
2963 }
2964
2965 /* For a bits-big-endian target, shift up what we already
2966 have. For a bits-little-endian target, shift up the
2967 new data. Note that there is a potential bug here if
2968 the DWARF expression leaves multiple values on the
2969 stack. */
2970 if (bits_collected > 0)
2971 {
2972 if (bits_big_endian)
2973 {
2974 ax_simple (expr, aop_swap);
2975 ax_const_l (expr, size);
2976 ax_simple (expr, aop_lsh);
2977 /* We don't need a second swap here, because
2978 aop_bit_or is symmetric. */
2979 }
2980 else
2981 {
2982 ax_const_l (expr, size);
2983 ax_simple (expr, aop_lsh);
2984 }
2985 ax_simple (expr, aop_bit_or);
2986 }
2987
2988 bits_collected += size;
2989 loc->kind = axs_rvalue;
08922a10
SS
2990 }
2991 break;
08922a10 2992
3cf03773
TT
2993 case DW_OP_GNU_uninit:
2994 unimplemented (op);
2995
2996 case DW_OP_call2:
2997 case DW_OP_call4:
2998 {
2999 struct dwarf2_locexpr_baton block;
3000 int size = (op == DW_OP_call2 ? 2 : 4);
3001
3002 uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
3003 op_ptr += size;
3004
041d9819
SM
3005 auto get_frame_pc_from_expr = [expr] ()
3006 {
3007 return expr->scope;
3008 };
b926417a 3009 cu_offset cuoffset = (cu_offset) uoffset;
14095eb3 3010 block = dwarf2_fetch_die_loc_cu_off (cuoffset, per_cu, per_objfile,
041d9819 3011 get_frame_pc_from_expr);
3cf03773
TT
3012
3013 /* DW_OP_call_ref is currently not supported. */
3014 gdb_assert (block.per_cu == per_cu);
3015
40f4af28 3016 dwarf2_compile_expr_to_ax (expr, loc, addr_size, block.data,
4b167ea1
SM
3017 block.data + block.size, per_cu,
3018 per_objfile);
3cf03773
TT
3019 }
3020 break;
3021
3022 case DW_OP_call_ref:
3023 unimplemented (op);
3024
a6b786da
KB
3025 case DW_OP_GNU_variable_value:
3026 unimplemented (op);
3027
3cf03773 3028 default:
b1bfef65 3029 unimplemented (op);
08922a10 3030 }
08922a10 3031 }
3cf03773
TT
3032
3033 /* Patch all the branches we emitted. */
b926417a 3034 for (int i = 0; i < patches.size (); ++i)
3cf03773 3035 {
58414334 3036 int targ = offsets[dw_labels[i]];
3cf03773
TT
3037 if (targ == -1)
3038 internal_error (__FILE__, __LINE__, _("invalid label"));
58414334 3039 ax_label (expr, patches[i], targ);
3cf03773 3040 }
08922a10
SS
3041}
3042
4c2df51b
DJ
3043\f
3044/* Return the value of SYMBOL in FRAME using the DWARF-2 expression
3045 evaluator to calculate the location. */
3046static struct value *
3047locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
3048{
9a3c8263
SM
3049 struct dwarf2_locexpr_baton *dlbaton
3050 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
4c2df51b 3051 struct value *val;
9a619af0 3052
5f9c5a63 3053 val = dwarf2_evaluate_loc_desc (symbol->type (), frame, dlbaton->data,
9f47c707
SM
3054 dlbaton->size, dlbaton->per_cu,
3055 dlbaton->per_objfile);
4c2df51b
DJ
3056
3057 return val;
3058}
3059
e18b2753
JK
3060/* Return the value of SYMBOL in FRAME at (callee) FRAME's function
3061 entry. SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
3062 will be thrown. */
3063
3064static struct value *
3065locexpr_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
3066{
9a3c8263
SM
3067 struct dwarf2_locexpr_baton *dlbaton
3068 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
e18b2753 3069
5f9c5a63 3070 return value_of_dwarf_block_entry (symbol->type (), frame, dlbaton->data,
e18b2753
JK
3071 dlbaton->size);
3072}
3073
0b31a4bc
TT
3074/* Implementation of get_symbol_read_needs from
3075 symbol_computed_ops. */
3076
3077static enum symbol_needs_kind
3078locexpr_get_symbol_read_needs (struct symbol *symbol)
4c2df51b 3079{
9a3c8263
SM
3080 struct dwarf2_locexpr_baton *dlbaton
3081 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
9a619af0 3082
183657ed
ZZ
3083 gdbarch *arch = dlbaton->per_objfile->objfile->arch ();
3084 gdb::array_view<const gdb_byte> expr (dlbaton->data, dlbaton->size);
3085
3086 return dwarf2_get_symbol_read_needs (expr,
3087 dlbaton->per_cu,
3088 dlbaton->per_objfile,
3089 gdbarch_byte_order (arch),
3090 dlbaton->per_cu->addr_size (),
3091 dlbaton->per_cu->ref_addr_size ());
4c2df51b
DJ
3092}
3093
9eae7c52
TT
3094/* Return true if DATA points to the end of a piece. END is one past
3095 the last byte in the expression. */
3096
3097static int
3098piece_end_p (const gdb_byte *data, const gdb_byte *end)
3099{
3100 return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece;
3101}
3102
5e44ecb3
TT
3103/* Helper for locexpr_describe_location_piece that finds the name of a
3104 DWARF register. */
3105
3106static const char *
3107locexpr_regname (struct gdbarch *gdbarch, int dwarf_regnum)
3108{
3109 int regnum;
3110
0fde2c53
DE
3111 /* This doesn't use dwarf_reg_to_regnum_or_error on purpose.
3112 We'd rather print *something* here than throw an error. */
3113 regnum = dwarf_reg_to_regnum (gdbarch, dwarf_regnum);
3114 /* gdbarch_register_name may just return "", return something more
3115 descriptive for bad register numbers. */
3116 if (regnum == -1)
3117 {
3118 /* The text is output as "$bad_register_number".
3119 That is why we use the underscores. */
3120 return _("bad_register_number");
3121 }
5e44ecb3
TT
3122 return gdbarch_register_name (gdbarch, regnum);
3123}
3124
9eae7c52
TT
3125/* Nicely describe a single piece of a location, returning an updated
3126 position in the bytecode sequence. This function cannot recognize
3127 all locations; if a location is not recognized, it simply returns
f664829e
DE
3128 DATA. If there is an error during reading, e.g. we run off the end
3129 of the buffer, an error is thrown. */
08922a10 3130
0d45f56e 3131static const gdb_byte *
08922a10 3132locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
82ca3f51
SM
3133 CORE_ADDR addr, dwarf2_per_cu_data *per_cu,
3134 dwarf2_per_objfile *per_objfile,
9eae7c52 3135 const gdb_byte *data, const gdb_byte *end,
0d45f56e 3136 unsigned int addr_size)
4c2df51b 3137{
82ca3f51 3138 objfile *objfile = per_objfile->objfile;
08feed99 3139 struct gdbarch *gdbarch = objfile->arch ();
49f6c839 3140 size_t leb128_size;
08922a10
SS
3141
3142 if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
3143 {
6cb06a8c
TT
3144 gdb_printf (stream, _("a variable in $%s"),
3145 locexpr_regname (gdbarch, data[0] - DW_OP_reg0));
08922a10
SS
3146 data += 1;
3147 }
3148 else if (data[0] == DW_OP_regx)
3149 {
9fccedf7 3150 uint64_t reg;
4c2df51b 3151
f664829e 3152 data = safe_read_uleb128 (data + 1, end, &reg);
6cb06a8c
TT
3153 gdb_printf (stream, _("a variable in $%s"),
3154 locexpr_regname (gdbarch, reg));
08922a10
SS
3155 }
3156 else if (data[0] == DW_OP_fbreg)
4c2df51b 3157 {
3977b71f 3158 const struct block *b;
08922a10
SS
3159 struct symbol *framefunc;
3160 int frame_reg = 0;
9fccedf7 3161 int64_t frame_offset;
7155d578 3162 const gdb_byte *base_data, *new_data, *save_data = data;
08922a10 3163 size_t base_size;
9fccedf7 3164 int64_t base_offset = 0;
08922a10 3165
f664829e 3166 new_data = safe_read_sleb128 (data + 1, end, &frame_offset);
9eae7c52
TT
3167 if (!piece_end_p (new_data, end))
3168 return data;
3169 data = new_data;
3170
08922a10
SS
3171 b = block_for_pc (addr);
3172
3173 if (!b)
3174 error (_("No block found for address for symbol \"%s\"."),
987012b8 3175 symbol->print_name ());
08922a10
SS
3176
3177 framefunc = block_linkage_function (b);
3178
3179 if (!framefunc)
3180 error (_("No function found for block for symbol \"%s\"."),
987012b8 3181 symbol->print_name ());
08922a10 3182
af945b75 3183 func_get_frame_base_dwarf_block (framefunc, addr, &base_data, &base_size);
08922a10
SS
3184
3185 if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
3186 {
0d45f56e 3187 const gdb_byte *buf_end;
08922a10
SS
3188
3189 frame_reg = base_data[0] - DW_OP_breg0;
f664829e
DE
3190 buf_end = safe_read_sleb128 (base_data + 1, base_data + base_size,
3191 &base_offset);
08922a10 3192 if (buf_end != base_data + base_size)
3e43a32a
MS
3193 error (_("Unexpected opcode after "
3194 "DW_OP_breg%u for symbol \"%s\"."),
987012b8 3195 frame_reg, symbol->print_name ());
08922a10
SS
3196 }
3197 else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
3198 {
3199 /* The frame base is just the register, with no offset. */
3200 frame_reg = base_data[0] - DW_OP_reg0;
3201 base_offset = 0;
3202 }
3203 else
3204 {
3205 /* We don't know what to do with the frame base expression,
3206 so we can't trace this variable; give up. */
7155d578 3207 return save_data;
08922a10
SS
3208 }
3209
6cb06a8c
TT
3210 gdb_printf (stream,
3211 _("a variable at frame base reg $%s offset %s+%s"),
3212 locexpr_regname (gdbarch, frame_reg),
3213 plongest (base_offset), plongest (frame_offset));
08922a10 3214 }
9eae7c52
TT
3215 else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
3216 && piece_end_p (data, end))
08922a10 3217 {
9fccedf7 3218 int64_t offset;
08922a10 3219
f664829e 3220 data = safe_read_sleb128 (data + 1, end, &offset);
08922a10 3221
6cb06a8c
TT
3222 gdb_printf (stream,
3223 _("a variable at offset %s from base reg $%s"),
3224 plongest (offset),
3225 locexpr_regname (gdbarch, data[0] - DW_OP_breg0));
4c2df51b
DJ
3226 }
3227
c3228f12
EZ
3228 /* The location expression for a TLS variable looks like this (on a
3229 64-bit LE machine):
3230
3231 DW_AT_location : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
dda83cd7 3232 (DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
09d8bd00 3233
c3228f12
EZ
3234 0x3 is the encoding for DW_OP_addr, which has an operand as long
3235 as the size of an address on the target machine (here is 8
09d8bd00
TT
3236 bytes). Note that more recent version of GCC emit DW_OP_const4u
3237 or DW_OP_const8u, depending on address size, rather than
0963b4bd
MS
3238 DW_OP_addr. 0xe0 is the encoding for DW_OP_GNU_push_tls_address.
3239 The operand represents the offset at which the variable is within
3240 the thread local storage. */
c3228f12 3241
9eae7c52 3242 else if (data + 1 + addr_size < end
09d8bd00
TT
3243 && (data[0] == DW_OP_addr
3244 || (addr_size == 4 && data[0] == DW_OP_const4u)
3245 || (addr_size == 8 && data[0] == DW_OP_const8u))
4aa4e28b
TT
3246 && (data[1 + addr_size] == DW_OP_GNU_push_tls_address
3247 || data[1 + addr_size] == DW_OP_form_tls_address)
9eae7c52 3248 && piece_end_p (data + 2 + addr_size, end))
08922a10 3249 {
d4a087c7
UW
3250 ULONGEST offset;
3251 offset = extract_unsigned_integer (data + 1, addr_size,
3252 gdbarch_byte_order (gdbarch));
9a619af0 3253
6cb06a8c
TT
3254 gdb_printf (stream,
3255 _("a thread-local variable at offset 0x%s "
3256 "in the thread-local storage for `%s'"),
3257 phex_nz (offset, addr_size), objfile_name (objfile));
08922a10
SS
3258
3259 data += 1 + addr_size + 1;
3260 }
49f6c839
DE
3261
3262 /* With -gsplit-dwarf a TLS variable can also look like this:
3263 DW_AT_location : 3 byte block: fc 4 e0
dda83cd7 3264 (DW_OP_GNU_const_index: 4;
49f6c839
DE
3265 DW_OP_GNU_push_tls_address) */
3266 else if (data + 3 <= end
3267 && data + 1 + (leb128_size = skip_leb128 (data + 1, end)) < end
3268 && data[0] == DW_OP_GNU_const_index
3269 && leb128_size > 0
4aa4e28b
TT
3270 && (data[1 + leb128_size] == DW_OP_GNU_push_tls_address
3271 || data[1 + leb128_size] == DW_OP_form_tls_address)
49f6c839
DE
3272 && piece_end_p (data + 2 + leb128_size, end))
3273 {
a55c1f32 3274 uint64_t offset;
49f6c839
DE
3275
3276 data = safe_read_uleb128 (data + 1, end, &offset);
82ca3f51 3277 offset = dwarf2_read_addr_index (per_cu, per_objfile, offset);
6cb06a8c
TT
3278 gdb_printf (stream,
3279 _("a thread-local variable at offset 0x%s "
3280 "in the thread-local storage for `%s'"),
3281 phex_nz (offset, addr_size), objfile_name (objfile));
49f6c839
DE
3282 ++data;
3283 }
3284
9eae7c52
TT
3285 else if (data[0] >= DW_OP_lit0
3286 && data[0] <= DW_OP_lit31
3287 && data + 1 < end
3288 && data[1] == DW_OP_stack_value)
3289 {
6cb06a8c 3290 gdb_printf (stream, _("the constant %d"), data[0] - DW_OP_lit0);
9eae7c52
TT
3291 data += 2;
3292 }
3293
3294 return data;
3295}
3296
3297/* Disassemble an expression, stopping at the end of a piece or at the
3298 end of the expression. Returns a pointer to the next unread byte
3299 in the input expression. If ALL is nonzero, then this function
f664829e
DE
3300 will keep going until it reaches the end of the expression.
3301 If there is an error during reading, e.g. we run off the end
3302 of the buffer, an error is thrown. */
9eae7c52
TT
3303
3304static const gdb_byte *
3305disassemble_dwarf_expression (struct ui_file *stream,
3306 struct gdbarch *arch, unsigned int addr_size,
2bda9cc5 3307 int offset_size, const gdb_byte *start,
9eae7c52 3308 const gdb_byte *data, const gdb_byte *end,
2bda9cc5 3309 int indent, int all,
82ca3f51
SM
3310 dwarf2_per_cu_data *per_cu,
3311 dwarf2_per_objfile *per_objfile)
9eae7c52 3312{
9eae7c52
TT
3313 while (data < end
3314 && (all
3315 || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
3316 {
aead7601 3317 enum dwarf_location_atom op = (enum dwarf_location_atom) *data++;
9fccedf7
DE
3318 uint64_t ul;
3319 int64_t l;
9eae7c52
TT
3320 const char *name;
3321
f39c6ffd 3322 name = get_DW_OP_name (op);
9eae7c52
TT
3323
3324 if (!name)
3325 error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
06826322 3326 op, (long) (data - 1 - start));
6cb06a8c
TT
3327 gdb_printf (stream, " %*ld: %s", indent + 4,
3328 (long) (data - 1 - start), name);
9eae7c52
TT
3329
3330 switch (op)
3331 {
3332 case DW_OP_addr:
d4a087c7
UW
3333 ul = extract_unsigned_integer (data, addr_size,
3334 gdbarch_byte_order (arch));
9eae7c52 3335 data += addr_size;
6cb06a8c 3336 gdb_printf (stream, " 0x%s", phex_nz (ul, addr_size));
9eae7c52
TT
3337 break;
3338
3339 case DW_OP_const1u:
3340 ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch));
3341 data += 1;
6cb06a8c 3342 gdb_printf (stream, " %s", pulongest (ul));
9eae7c52 3343 break;
fc3ecb3e 3344
9eae7c52
TT
3345 case DW_OP_const1s:
3346 l = extract_signed_integer (data, 1, gdbarch_byte_order (arch));
3347 data += 1;
6cb06a8c 3348 gdb_printf (stream, " %s", plongest (l));
9eae7c52 3349 break;
fc3ecb3e 3350
9eae7c52
TT
3351 case DW_OP_const2u:
3352 ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
3353 data += 2;
6cb06a8c 3354 gdb_printf (stream, " %s", pulongest (ul));
9eae7c52 3355 break;
fc3ecb3e 3356
9eae7c52
TT
3357 case DW_OP_const2s:
3358 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3359 data += 2;
6cb06a8c 3360 gdb_printf (stream, " %s", plongest (l));
9eae7c52 3361 break;
fc3ecb3e 3362
9eae7c52
TT
3363 case DW_OP_const4u:
3364 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
3365 data += 4;
6cb06a8c 3366 gdb_printf (stream, " %s", pulongest (ul));
9eae7c52 3367 break;
fc3ecb3e 3368
9eae7c52
TT
3369 case DW_OP_const4s:
3370 l = extract_signed_integer (data, 4, gdbarch_byte_order (arch));
3371 data += 4;
6cb06a8c 3372 gdb_printf (stream, " %s", plongest (l));
9eae7c52 3373 break;
fc3ecb3e 3374
9eae7c52
TT
3375 case DW_OP_const8u:
3376 ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch));
3377 data += 8;
6cb06a8c 3378 gdb_printf (stream, " %s", pulongest (ul));
9eae7c52 3379 break;
fc3ecb3e 3380
9eae7c52
TT
3381 case DW_OP_const8s:
3382 l = extract_signed_integer (data, 8, gdbarch_byte_order (arch));
3383 data += 8;
6cb06a8c 3384 gdb_printf (stream, " %s", plongest (l));
9eae7c52 3385 break;
fc3ecb3e 3386
9eae7c52 3387 case DW_OP_constu:
f664829e 3388 data = safe_read_uleb128 (data, end, &ul);
6cb06a8c 3389 gdb_printf (stream, " %s", pulongest (ul));
9eae7c52 3390 break;
fc3ecb3e 3391
9eae7c52 3392 case DW_OP_consts:
f664829e 3393 data = safe_read_sleb128 (data, end, &l);
6cb06a8c 3394 gdb_printf (stream, " %s", plongest (l));
9eae7c52
TT
3395 break;
3396
3397 case DW_OP_reg0:
3398 case DW_OP_reg1:
3399 case DW_OP_reg2:
3400 case DW_OP_reg3:
3401 case DW_OP_reg4:
3402 case DW_OP_reg5:
3403 case DW_OP_reg6:
3404 case DW_OP_reg7:
3405 case DW_OP_reg8:
3406 case DW_OP_reg9:
3407 case DW_OP_reg10:
3408 case DW_OP_reg11:
3409 case DW_OP_reg12:
3410 case DW_OP_reg13:
3411 case DW_OP_reg14:
3412 case DW_OP_reg15:
3413 case DW_OP_reg16:
3414 case DW_OP_reg17:
3415 case DW_OP_reg18:
3416 case DW_OP_reg19:
3417 case DW_OP_reg20:
3418 case DW_OP_reg21:
3419 case DW_OP_reg22:
3420 case DW_OP_reg23:
3421 case DW_OP_reg24:
3422 case DW_OP_reg25:
3423 case DW_OP_reg26:
3424 case DW_OP_reg27:
3425 case DW_OP_reg28:
3426 case DW_OP_reg29:
3427 case DW_OP_reg30:
3428 case DW_OP_reg31:
6cb06a8c
TT
3429 gdb_printf (stream, " [$%s]",
3430 locexpr_regname (arch, op - DW_OP_reg0));
9eae7c52
TT
3431 break;
3432
3433 case DW_OP_regx:
f664829e 3434 data = safe_read_uleb128 (data, end, &ul);
6cb06a8c
TT
3435 gdb_printf (stream, " %s [$%s]", pulongest (ul),
3436 locexpr_regname (arch, (int) ul));
9eae7c52
TT
3437 break;
3438
3439 case DW_OP_implicit_value:
f664829e 3440 data = safe_read_uleb128 (data, end, &ul);
9eae7c52 3441 data += ul;
6cb06a8c 3442 gdb_printf (stream, " %s", pulongest (ul));
9eae7c52
TT
3443 break;
3444
3445 case DW_OP_breg0:
3446 case DW_OP_breg1:
3447 case DW_OP_breg2:
3448 case DW_OP_breg3:
3449 case DW_OP_breg4:
3450 case DW_OP_breg5:
3451 case DW_OP_breg6:
3452 case DW_OP_breg7:
3453 case DW_OP_breg8:
3454 case DW_OP_breg9:
3455 case DW_OP_breg10:
3456 case DW_OP_breg11:
3457 case DW_OP_breg12:
3458 case DW_OP_breg13:
3459 case DW_OP_breg14:
3460 case DW_OP_breg15:
3461 case DW_OP_breg16:
3462 case DW_OP_breg17:
3463 case DW_OP_breg18:
3464 case DW_OP_breg19:
3465 case DW_OP_breg20:
3466 case DW_OP_breg21:
3467 case DW_OP_breg22:
3468 case DW_OP_breg23:
3469 case DW_OP_breg24:
3470 case DW_OP_breg25:
3471 case DW_OP_breg26:
3472 case DW_OP_breg27:
3473 case DW_OP_breg28:
3474 case DW_OP_breg29:
3475 case DW_OP_breg30:
3476 case DW_OP_breg31:
f664829e 3477 data = safe_read_sleb128 (data, end, &l);
6cb06a8c
TT
3478 gdb_printf (stream, " %s [$%s]", plongest (l),
3479 locexpr_regname (arch, op - DW_OP_breg0));
9eae7c52
TT
3480 break;
3481
3482 case DW_OP_bregx:
f664829e
DE
3483 data = safe_read_uleb128 (data, end, &ul);
3484 data = safe_read_sleb128 (data, end, &l);
6cb06a8c
TT
3485 gdb_printf (stream, " register %s [$%s] offset %s",
3486 pulongest (ul),
3487 locexpr_regname (arch, (int) ul),
3488 plongest (l));
9eae7c52
TT
3489 break;
3490
3491 case DW_OP_fbreg:
f664829e 3492 data = safe_read_sleb128 (data, end, &l);
6cb06a8c 3493 gdb_printf (stream, " %s", plongest (l));
9eae7c52
TT
3494 break;
3495
3496 case DW_OP_xderef_size:
3497 case DW_OP_deref_size:
3498 case DW_OP_pick:
6cb06a8c 3499 gdb_printf (stream, " %d", *data);
9eae7c52
TT
3500 ++data;
3501 break;
3502
3503 case DW_OP_plus_uconst:
f664829e 3504 data = safe_read_uleb128 (data, end, &ul);
6cb06a8c 3505 gdb_printf (stream, " %s", pulongest (ul));
9eae7c52
TT
3506 break;
3507
3508 case DW_OP_skip:
3509 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3510 data += 2;
6cb06a8c
TT
3511 gdb_printf (stream, " to %ld",
3512 (long) (data + l - start));
9eae7c52
TT
3513 break;
3514
3515 case DW_OP_bra:
3516 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3517 data += 2;
6cb06a8c
TT
3518 gdb_printf (stream, " %ld",
3519 (long) (data + l - start));
9eae7c52
TT
3520 break;
3521
3522 case DW_OP_call2:
3523 ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
3524 data += 2;
6cb06a8c 3525 gdb_printf (stream, " offset %s", phex_nz (ul, 2));
9eae7c52
TT
3526 break;
3527
3528 case DW_OP_call4:
3529 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
3530 data += 4;
6cb06a8c 3531 gdb_printf (stream, " offset %s", phex_nz (ul, 4));
9eae7c52
TT
3532 break;
3533
3534 case DW_OP_call_ref:
3535 ul = extract_unsigned_integer (data, offset_size,
3536 gdbarch_byte_order (arch));
3537 data += offset_size;
6cb06a8c 3538 gdb_printf (stream, " offset %s", phex_nz (ul, offset_size));
9eae7c52
TT
3539 break;
3540
dda83cd7 3541 case DW_OP_piece:
f664829e 3542 data = safe_read_uleb128 (data, end, &ul);
6cb06a8c 3543 gdb_printf (stream, " %s (bytes)", pulongest (ul));
9eae7c52
TT
3544 break;
3545
3546 case DW_OP_bit_piece:
3547 {
9fccedf7 3548 uint64_t offset;
9eae7c52 3549
f664829e
DE
3550 data = safe_read_uleb128 (data, end, &ul);
3551 data = safe_read_uleb128 (data, end, &offset);
6cb06a8c
TT
3552 gdb_printf (stream, " size %s offset %s (bits)",
3553 pulongest (ul), pulongest (offset));
9eae7c52
TT
3554 }
3555 break;
8cf6f0b1 3556
216f72a1 3557 case DW_OP_implicit_pointer:
8cf6f0b1
TT
3558 case DW_OP_GNU_implicit_pointer:
3559 {
3560 ul = extract_unsigned_integer (data, offset_size,
3561 gdbarch_byte_order (arch));
3562 data += offset_size;
3563
f664829e 3564 data = safe_read_sleb128 (data, end, &l);
8cf6f0b1 3565
6cb06a8c
TT
3566 gdb_printf (stream, " DIE %s offset %s",
3567 phex_nz (ul, offset_size),
3568 plongest (l));
8cf6f0b1
TT
3569 }
3570 break;
5e44ecb3 3571
216f72a1 3572 case DW_OP_deref_type:
5e44ecb3
TT
3573 case DW_OP_GNU_deref_type:
3574 {
b926417a 3575 int deref_addr_size = *data++;
5e44ecb3
TT
3576 struct type *type;
3577
f664829e 3578 data = safe_read_uleb128 (data, end, &ul);
9c541725 3579 cu_offset offset = (cu_offset) ul;
aa66c379 3580 type = dwarf2_get_die_type (offset, per_cu, per_objfile);
6cb06a8c 3581 gdb_printf (stream, "<");
5e44ecb3 3582 type_print (type, "", stream, -1);
6cb06a8c
TT
3583 gdb_printf (stream, " [0x%s]> %d",
3584 phex_nz (to_underlying (offset), 0),
3585 deref_addr_size);
5e44ecb3
TT
3586 }
3587 break;
3588
216f72a1 3589 case DW_OP_const_type:
5e44ecb3
TT
3590 case DW_OP_GNU_const_type:
3591 {
5e44ecb3
TT
3592 struct type *type;
3593
f664829e 3594 data = safe_read_uleb128 (data, end, &ul);
9c541725 3595 cu_offset type_die = (cu_offset) ul;
aa66c379 3596 type = dwarf2_get_die_type (type_die, per_cu, per_objfile);
6cb06a8c 3597 gdb_printf (stream, "<");
5e44ecb3 3598 type_print (type, "", stream, -1);
6cb06a8c
TT
3599 gdb_printf (stream, " [0x%s]>",
3600 phex_nz (to_underlying (type_die), 0));
d9e49b61
TT
3601
3602 int n = *data++;
6cb06a8c 3603 gdb_printf (stream, " %d byte block:", n);
d9e49b61 3604 for (int i = 0; i < n; ++i)
6cb06a8c 3605 gdb_printf (stream, " %02x", data[i]);
d9e49b61 3606 data += n;
5e44ecb3
TT
3607 }
3608 break;
3609
216f72a1 3610 case DW_OP_regval_type:
5e44ecb3
TT
3611 case DW_OP_GNU_regval_type:
3612 {
9fccedf7 3613 uint64_t reg;
5e44ecb3
TT
3614 struct type *type;
3615
f664829e
DE
3616 data = safe_read_uleb128 (data, end, &reg);
3617 data = safe_read_uleb128 (data, end, &ul);
9c541725 3618 cu_offset type_die = (cu_offset) ul;
5e44ecb3 3619
aa66c379 3620 type = dwarf2_get_die_type (type_die, per_cu, per_objfile);
6cb06a8c 3621 gdb_printf (stream, "<");
5e44ecb3 3622 type_print (type, "", stream, -1);
6cb06a8c
TT
3623 gdb_printf (stream, " [0x%s]> [$%s]",
3624 phex_nz (to_underlying (type_die), 0),
3625 locexpr_regname (arch, reg));
5e44ecb3
TT
3626 }
3627 break;
3628
216f72a1 3629 case DW_OP_convert:
5e44ecb3 3630 case DW_OP_GNU_convert:
216f72a1 3631 case DW_OP_reinterpret:
5e44ecb3
TT
3632 case DW_OP_GNU_reinterpret:
3633 {
f664829e 3634 data = safe_read_uleb128 (data, end, &ul);
9c541725 3635 cu_offset type_die = (cu_offset) ul;
5e44ecb3 3636
9c541725 3637 if (to_underlying (type_die) == 0)
6cb06a8c 3638 gdb_printf (stream, "<0>");
5e44ecb3
TT
3639 else
3640 {
3641 struct type *type;
3642
aa66c379 3643 type = dwarf2_get_die_type (type_die, per_cu, per_objfile);
6cb06a8c 3644 gdb_printf (stream, "<");
5e44ecb3 3645 type_print (type, "", stream, -1);
6cb06a8c
TT
3646 gdb_printf (stream, " [0x%s]>",
3647 phex_nz (to_underlying (type_die), 0));
5e44ecb3
TT
3648 }
3649 }
3650 break;
2bda9cc5 3651
216f72a1 3652 case DW_OP_entry_value:
2bda9cc5 3653 case DW_OP_GNU_entry_value:
f664829e 3654 data = safe_read_uleb128 (data, end, &ul);
a11ac3b3 3655 gdb_putc ('\n', stream);
2bda9cc5
JK
3656 disassemble_dwarf_expression (stream, arch, addr_size, offset_size,
3657 start, data, data + ul, indent + 2,
82ca3f51 3658 all, per_cu, per_objfile);
2bda9cc5
JK
3659 data += ul;
3660 continue;
49f6c839 3661
a24f71ab
JK
3662 case DW_OP_GNU_parameter_ref:
3663 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
3664 data += 4;
6cb06a8c 3665 gdb_printf (stream, " offset %s", phex_nz (ul, 4));
a24f71ab
JK
3666 break;
3667
336d760d 3668 case DW_OP_addrx:
49f6c839
DE
3669 case DW_OP_GNU_addr_index:
3670 data = safe_read_uleb128 (data, end, &ul);
82ca3f51 3671 ul = dwarf2_read_addr_index (per_cu, per_objfile, ul);
6cb06a8c 3672 gdb_printf (stream, " 0x%s", phex_nz (ul, addr_size));
49f6c839 3673 break;
fc3ecb3e 3674
49f6c839
DE
3675 case DW_OP_GNU_const_index:
3676 data = safe_read_uleb128 (data, end, &ul);
82ca3f51 3677 ul = dwarf2_read_addr_index (per_cu, per_objfile, ul);
6cb06a8c 3678 gdb_printf (stream, " %s", pulongest (ul));
49f6c839 3679 break;
a6b786da
KB
3680
3681 case DW_OP_GNU_variable_value:
3682 ul = extract_unsigned_integer (data, offset_size,
3683 gdbarch_byte_order (arch));
3684 data += offset_size;
6cb06a8c 3685 gdb_printf (stream, " offset %s", phex_nz (ul, offset_size));
a6b786da 3686 break;
9eae7c52
TT
3687 }
3688
6cb06a8c 3689 gdb_printf (stream, "\n");
9eae7c52 3690 }
c3228f12 3691
08922a10 3692 return data;
4c2df51b
DJ
3693}
3694
009b64fc
TT
3695static bool dwarf_always_disassemble;
3696
3697static void
3698show_dwarf_always_disassemble (struct ui_file *file, int from_tty,
3699 struct cmd_list_element *c, const char *value)
3700{
6cb06a8c
TT
3701 gdb_printf (file,
3702 _("Whether to always disassemble "
3703 "DWARF expressions is %s.\n"),
3704 value);
009b64fc
TT
3705}
3706
08922a10
SS
3707/* Describe a single location, which may in turn consist of multiple
3708 pieces. */
a55cc764 3709
08922a10
SS
3710static void
3711locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
0d45f56e 3712 struct ui_file *stream,
56eb65bd 3713 const gdb_byte *data, size_t size,
82ca3f51
SM
3714 unsigned int addr_size,
3715 int offset_size, dwarf2_per_cu_data *per_cu,
3716 dwarf2_per_objfile *per_objfile)
08922a10 3717{
0d45f56e 3718 const gdb_byte *end = data + size;
9eae7c52 3719 int first_piece = 1, bad = 0;
82ca3f51 3720 objfile *objfile = per_objfile->objfile;
08922a10 3721
08922a10
SS
3722 while (data < end)
3723 {
9eae7c52
TT
3724 const gdb_byte *here = data;
3725 int disassemble = 1;
3726
3727 if (first_piece)
3728 first_piece = 0;
3729 else
6cb06a8c 3730 gdb_printf (stream, _(", and "));
08922a10 3731
b4f54984 3732 if (!dwarf_always_disassemble)
9eae7c52 3733 {
3e43a32a 3734 data = locexpr_describe_location_piece (symbol, stream,
82ca3f51 3735 addr, per_cu, per_objfile,
9eae7c52
TT
3736 data, end, addr_size);
3737 /* If we printed anything, or if we have an empty piece,
3738 then don't disassemble. */
3739 if (data != here
3740 || data[0] == DW_OP_piece
3741 || data[0] == DW_OP_bit_piece)
3742 disassemble = 0;
08922a10 3743 }
9eae7c52 3744 if (disassemble)
2bda9cc5 3745 {
6cb06a8c 3746 gdb_printf (stream, _("a complex DWARF expression:\n"));
2bda9cc5 3747 data = disassemble_dwarf_expression (stream,
08feed99 3748 objfile->arch (),
2bda9cc5
JK
3749 addr_size, offset_size, data,
3750 data, end, 0,
b4f54984 3751 dwarf_always_disassemble,
82ca3f51 3752 per_cu, per_objfile);
2bda9cc5 3753 }
9eae7c52
TT
3754
3755 if (data < end)
08922a10 3756 {
9eae7c52 3757 int empty = data == here;
08922a10 3758
9eae7c52 3759 if (disassemble)
6cb06a8c 3760 gdb_printf (stream, " ");
9eae7c52
TT
3761 if (data[0] == DW_OP_piece)
3762 {
9fccedf7 3763 uint64_t bytes;
08922a10 3764
f664829e 3765 data = safe_read_uleb128 (data + 1, end, &bytes);
08922a10 3766
9eae7c52 3767 if (empty)
6cb06a8c
TT
3768 gdb_printf (stream, _("an empty %s-byte piece"),
3769 pulongest (bytes));
9eae7c52 3770 else
6cb06a8c
TT
3771 gdb_printf (stream, _(" [%s-byte piece]"),
3772 pulongest (bytes));
9eae7c52
TT
3773 }
3774 else if (data[0] == DW_OP_bit_piece)
3775 {
9fccedf7 3776 uint64_t bits, offset;
9eae7c52 3777
f664829e
DE
3778 data = safe_read_uleb128 (data + 1, end, &bits);
3779 data = safe_read_uleb128 (data, end, &offset);
9eae7c52
TT
3780
3781 if (empty)
6cb06a8c
TT
3782 gdb_printf (stream,
3783 _("an empty %s-bit piece"),
3784 pulongest (bits));
9eae7c52 3785 else
6cb06a8c
TT
3786 gdb_printf (stream,
3787 _(" [%s-bit piece, offset %s bits]"),
3788 pulongest (bits), pulongest (offset));
9eae7c52
TT
3789 }
3790 else
3791 {
3792 bad = 1;
3793 break;
3794 }
08922a10
SS
3795 }
3796 }
3797
3798 if (bad || data > end)
3799 error (_("Corrupted DWARF2 expression for \"%s\"."),
987012b8 3800 symbol->print_name ());
08922a10
SS
3801}
3802
3803/* Print a natural-language description of SYMBOL to STREAM. This
3804 version is for a symbol with a single location. */
a55cc764 3805
08922a10
SS
3806static void
3807locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
3808 struct ui_file *stream)
3809{
9a3c8263
SM
3810 struct dwarf2_locexpr_baton *dlbaton
3811 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
09ba997f
TT
3812 unsigned int addr_size = dlbaton->per_cu->addr_size ();
3813 int offset_size = dlbaton->per_cu->offset_size ();
08922a10 3814
3e43a32a
MS
3815 locexpr_describe_location_1 (symbol, addr, stream,
3816 dlbaton->data, dlbaton->size,
82ca3f51
SM
3817 addr_size, offset_size,
3818 dlbaton->per_cu, dlbaton->per_objfile);
08922a10
SS
3819}
3820
3821/* Describe the location of SYMBOL as an agent value in VALUE, generating
3822 any necessary bytecode in AX. */
a55cc764 3823
0d53c4c4 3824static void
40f4af28
SM
3825locexpr_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
3826 struct axs_value *value)
a55cc764 3827{
9a3c8263
SM
3828 struct dwarf2_locexpr_baton *dlbaton
3829 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
09ba997f 3830 unsigned int addr_size = dlbaton->per_cu->addr_size ();
a55cc764 3831
1d6edc3c 3832 if (dlbaton->size == 0)
cabe9ab6
PA
3833 value->optimized_out = 1;
3834 else
40f4af28 3835 dwarf2_compile_expr_to_ax (ax, value, addr_size, dlbaton->data,
4b167ea1
SM
3836 dlbaton->data + dlbaton->size, dlbaton->per_cu,
3837 dlbaton->per_objfile);
a55cc764
DJ
3838}
3839
bb2ec1b3
TT
3840/* symbol_computed_ops 'generate_c_location' method. */
3841
3842static void
d82b3862 3843locexpr_generate_c_location (struct symbol *sym, string_file *stream,
bb2ec1b3 3844 struct gdbarch *gdbarch,
3637a558 3845 std::vector<bool> &registers_used,
bb2ec1b3
TT
3846 CORE_ADDR pc, const char *result_name)
3847{
9a3c8263
SM
3848 struct dwarf2_locexpr_baton *dlbaton
3849 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (sym);
09ba997f 3850 unsigned int addr_size = dlbaton->per_cu->addr_size ();
bb2ec1b3
TT
3851
3852 if (dlbaton->size == 0)
987012b8 3853 error (_("symbol \"%s\" is optimized out"), sym->natural_name ());
bb2ec1b3
TT
3854
3855 compile_dwarf_expr_to_c (stream, result_name,
3856 sym, pc, gdbarch, registers_used, addr_size,
3857 dlbaton->data, dlbaton->data + dlbaton->size,
4b167ea1 3858 dlbaton->per_cu, dlbaton->per_objfile);
bb2ec1b3
TT
3859}
3860
4c2df51b
DJ
3861/* The set of location functions used with the DWARF-2 expression
3862 evaluator. */
768a979c 3863const struct symbol_computed_ops dwarf2_locexpr_funcs = {
4c2df51b 3864 locexpr_read_variable,
e18b2753 3865 locexpr_read_variable_at_entry,
0b31a4bc 3866 locexpr_get_symbol_read_needs,
4c2df51b 3867 locexpr_describe_location,
f1e6e072 3868 0, /* location_has_loclist */
bb2ec1b3
TT
3869 locexpr_tracepoint_var_ref,
3870 locexpr_generate_c_location
4c2df51b 3871};
0d53c4c4
DJ
3872
3873
3874/* Wrapper functions for location lists. These generally find
3875 the appropriate location expression and call something above. */
3876
3877/* Return the value of SYMBOL in FRAME using the DWARF-2 expression
3878 evaluator to calculate the location. */
3879static struct value *
3880loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
3881{
9a3c8263
SM
3882 struct dwarf2_loclist_baton *dlbaton
3883 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
0d53c4c4 3884 struct value *val;
947bb88f 3885 const gdb_byte *data;
b6b08ebf 3886 size_t size;
8cf6f0b1 3887 CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0;
0d53c4c4 3888
8cf6f0b1 3889 data = dwarf2_find_location_expression (dlbaton, &size, pc);
5f9c5a63 3890 val = dwarf2_evaluate_loc_desc (symbol->type (), frame, data, size,
9f47c707 3891 dlbaton->per_cu, dlbaton->per_objfile);
0d53c4c4
DJ
3892
3893 return val;
3894}
3895
e18b2753
JK
3896/* Read variable SYMBOL like loclist_read_variable at (callee) FRAME's function
3897 entry. SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
3898 will be thrown.
3899
3900 Function always returns non-NULL value, it may be marked optimized out if
3901 inferior frame information is not available. It throws NO_ENTRY_VALUE_ERROR
3902 if it cannot resolve the parameter for any reason. */
3903
3904static struct value *
3905loclist_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
3906{
9a3c8263
SM
3907 struct dwarf2_loclist_baton *dlbaton
3908 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
e18b2753
JK
3909 const gdb_byte *data;
3910 size_t size;
3911 CORE_ADDR pc;
3912
3913 if (frame == NULL || !get_frame_func_if_available (frame, &pc))
5f9c5a63 3914 return allocate_optimized_out_value (symbol->type ());
e18b2753
JK
3915
3916 data = dwarf2_find_location_expression (dlbaton, &size, pc);
3917 if (data == NULL)
5f9c5a63 3918 return allocate_optimized_out_value (symbol->type ());
e18b2753 3919
5f9c5a63 3920 return value_of_dwarf_block_entry (symbol->type (), frame, data, size);
e18b2753
JK
3921}
3922
0b31a4bc
TT
3923/* Implementation of get_symbol_read_needs from
3924 symbol_computed_ops. */
3925
3926static enum symbol_needs_kind
3927loclist_symbol_needs (struct symbol *symbol)
0d53c4c4
DJ
3928{
3929 /* If there's a location list, then assume we need to have a frame
3930 to choose the appropriate location expression. With tracking of
3931 global variables this is not necessarily true, but such tracking
3932 is disabled in GCC at the moment until we figure out how to
3933 represent it. */
3934
0b31a4bc 3935 return SYMBOL_NEEDS_FRAME;
0d53c4c4
DJ
3936}
3937
08922a10
SS
3938/* Print a natural-language description of SYMBOL to STREAM. This
3939 version applies when there is a list of different locations, each
3940 with a specified address range. */
3941
3942static void
3943loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
3944 struct ui_file *stream)
0d53c4c4 3945{
9a3c8263
SM
3946 struct dwarf2_loclist_baton *dlbaton
3947 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
947bb88f 3948 const gdb_byte *loc_ptr, *buf_end;
a50264ba
TT
3949 dwarf2_per_objfile *per_objfile = dlbaton->per_objfile;
3950 struct objfile *objfile = per_objfile->objfile;
08feed99 3951 struct gdbarch *gdbarch = objfile->arch ();
08922a10 3952 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
09ba997f
TT
3953 unsigned int addr_size = dlbaton->per_cu->addr_size ();
3954 int offset_size = dlbaton->per_cu->offset_size ();
98badbfd 3955 int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd.get ());
0c7af292
TT
3956 /* Adjustment for relocatable objects. */
3957 CORE_ADDR text_offset = objfile->text_section_offset ();
3958 CORE_ADDR base_address = dlbaton->base_address;
f664829e 3959 int done = 0;
08922a10
SS
3960
3961 loc_ptr = dlbaton->data;
3962 buf_end = dlbaton->data + dlbaton->size;
3963
6cb06a8c 3964 gdb_printf (stream, _("multi-location:\n"));
08922a10
SS
3965
3966 /* Iterate through locations until we run out. */
f664829e 3967 while (!done)
08922a10 3968 {
f664829e
DE
3969 CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
3970 int length;
3971 enum debug_loc_kind kind;
3972 const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
3973
85a9510c 3974 if (dlbaton->per_cu->version () < 5 && dlbaton->from_dwo)
f664829e 3975 kind = decode_debug_loc_dwo_addresses (dlbaton->per_cu,
82ca3f51 3976 dlbaton->per_objfile,
f664829e 3977 loc_ptr, buf_end, &new_ptr,
3771a44c 3978 &low, &high, byte_order);
85a9510c 3979 else if (dlbaton->per_cu->version () < 5)
f664829e
DE
3980 kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
3981 &low, &high,
3982 byte_order, addr_size,
3983 signed_addr_p);
85a9510c 3984 else
3985 kind = decode_debug_loclists_addresses (dlbaton->per_cu,
82ca3f51 3986 dlbaton->per_objfile,
85a9510c 3987 loc_ptr, buf_end, &new_ptr,
3988 &low, &high, byte_order,
3989 addr_size, signed_addr_p);
f664829e
DE
3990 loc_ptr = new_ptr;
3991 switch (kind)
08922a10 3992 {
f664829e
DE
3993 case DEBUG_LOC_END_OF_LIST:
3994 done = 1;
3995 continue;
fc3ecb3e 3996
f664829e 3997 case DEBUG_LOC_BASE_ADDRESS:
0c7af292 3998 base_address = high;
6cb06a8c
TT
3999 gdb_printf (stream, _(" Base address %s"),
4000 paddress (gdbarch, base_address));
08922a10 4001 continue;
fc3ecb3e 4002
3771a44c
DE
4003 case DEBUG_LOC_START_END:
4004 case DEBUG_LOC_START_LENGTH:
85a9510c 4005 case DEBUG_LOC_OFFSET_PAIR:
f664829e 4006 break;
fc3ecb3e 4007
f664829e
DE
4008 case DEBUG_LOC_BUFFER_OVERFLOW:
4009 case DEBUG_LOC_INVALID_ENTRY:
4010 error (_("Corrupted DWARF expression for symbol \"%s\"."),
987012b8 4011 symbol->print_name ());
fc3ecb3e 4012
f664829e
DE
4013 default:
4014 gdb_assert_not_reached ("bad debug_loc_kind");
08922a10
SS
4015 }
4016
08922a10 4017 /* Otherwise, a location expression entry. */
0c7af292
TT
4018 low += text_offset;
4019 high += text_offset;
4020 if (!dlbaton->from_dwo && kind == DEBUG_LOC_OFFSET_PAIR)
7b9f73fa
TT
4021 {
4022 low += base_address;
4023 high += base_address;
4024 }
08922a10 4025
3e29f34a
MR
4026 low = gdbarch_adjust_dwarf2_addr (gdbarch, low);
4027 high = gdbarch_adjust_dwarf2_addr (gdbarch, high);
4028
85a9510c 4029 if (dlbaton->per_cu->version () < 5)
4030 {
4031 length = extract_unsigned_integer (loc_ptr, 2, byte_order);
4032 loc_ptr += 2;
4033 }
4034 else
4035 {
4036 unsigned int bytes_read;
4037 length = read_unsigned_leb128 (NULL, loc_ptr, &bytes_read);
4038 loc_ptr += bytes_read;
4039 }
08922a10 4040
08922a10
SS
4041 /* (It would improve readability to print only the minimum
4042 necessary digits of the second number of the range.) */
6cb06a8c
TT
4043 gdb_printf (stream, _(" Range %s-%s: "),
4044 paddress (gdbarch, low), paddress (gdbarch, high));
08922a10
SS
4045
4046 /* Now describe this particular location. */
4047 locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
82ca3f51
SM
4048 addr_size, offset_size,
4049 dlbaton->per_cu, dlbaton->per_objfile);
9eae7c52 4050
6cb06a8c 4051 gdb_printf (stream, "\n");
08922a10
SS
4052
4053 loc_ptr += length;
4054 }
0d53c4c4
DJ
4055}
4056
4057/* Describe the location of SYMBOL as an agent value in VALUE, generating
4058 any necessary bytecode in AX. */
4059static void
40f4af28
SM
4060loclist_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
4061 struct axs_value *value)
0d53c4c4 4062{
9a3c8263
SM
4063 struct dwarf2_loclist_baton *dlbaton
4064 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
947bb88f 4065 const gdb_byte *data;
b6b08ebf 4066 size_t size;
09ba997f 4067 unsigned int addr_size = dlbaton->per_cu->addr_size ();
0d53c4c4 4068
8cf6f0b1 4069 data = dwarf2_find_location_expression (dlbaton, &size, ax->scope);
1d6edc3c 4070 if (size == 0)
cabe9ab6
PA
4071 value->optimized_out = 1;
4072 else
40f4af28 4073 dwarf2_compile_expr_to_ax (ax, value, addr_size, data, data + size,
4b167ea1 4074 dlbaton->per_cu, dlbaton->per_objfile);
0d53c4c4
DJ
4075}
4076
bb2ec1b3
TT
4077/* symbol_computed_ops 'generate_c_location' method. */
4078
4079static void
d82b3862 4080loclist_generate_c_location (struct symbol *sym, string_file *stream,
bb2ec1b3 4081 struct gdbarch *gdbarch,
3637a558 4082 std::vector<bool> &registers_used,
bb2ec1b3
TT
4083 CORE_ADDR pc, const char *result_name)
4084{
9a3c8263
SM
4085 struct dwarf2_loclist_baton *dlbaton
4086 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (sym);
09ba997f 4087 unsigned int addr_size = dlbaton->per_cu->addr_size ();
bb2ec1b3
TT
4088 const gdb_byte *data;
4089 size_t size;
4090
4091 data = dwarf2_find_location_expression (dlbaton, &size, pc);
4092 if (size == 0)
987012b8 4093 error (_("symbol \"%s\" is optimized out"), sym->natural_name ());
bb2ec1b3
TT
4094
4095 compile_dwarf_expr_to_c (stream, result_name,
4096 sym, pc, gdbarch, registers_used, addr_size,
4097 data, data + size,
4b167ea1
SM
4098 dlbaton->per_cu,
4099 dlbaton->per_objfile);
bb2ec1b3
TT
4100}
4101
0d53c4c4
DJ
4102/* The set of location functions used with the DWARF-2 expression
4103 evaluator and location lists. */
768a979c 4104const struct symbol_computed_ops dwarf2_loclist_funcs = {
0d53c4c4 4105 loclist_read_variable,
e18b2753 4106 loclist_read_variable_at_entry,
0b31a4bc 4107 loclist_symbol_needs,
0d53c4c4 4108 loclist_describe_location,
f1e6e072 4109 1, /* location_has_loclist */
bb2ec1b3
TT
4110 loclist_tracepoint_var_ref,
4111 loclist_generate_c_location
0d53c4c4 4112};
8e3b41a9 4113
6c265988 4114void _initialize_dwarf2loc ();
8e3b41a9 4115void
6c265988 4116_initialize_dwarf2loc ()
8e3b41a9 4117{
ccce17b0
YQ
4118 add_setshow_zuinteger_cmd ("entry-values", class_maintenance,
4119 &entry_values_debug,
4120 _("Set entry values and tail call frames "
4121 "debugging."),
4122 _("Show entry values and tail call frames "
4123 "debugging."),
4124 _("When non-zero, the process of determining "
4125 "parameter values from function entry point "
4126 "and tail call frames will be printed."),
4127 NULL,
4128 show_entry_values_debug,
4129 &setdebuglist, &showdebuglist);
009b64fc
TT
4130
4131 add_setshow_boolean_cmd ("always-disassemble", class_obscure,
4132 &dwarf_always_disassemble, _("\
4133Set whether `info address' always disassembles DWARF expressions."), _("\
4134Show whether `info address' always disassembles DWARF expressions."), _("\
4135When enabled, DWARF expressions are always printed in an assembly-like\n\
4136syntax. When disabled, expressions will be printed in a more\n\
4137conversational style, when possible."),
4138 NULL,
4139 show_dwarf_always_disassemble,
4140 &set_dwarf_cmdlist,
4141 &show_dwarf_cmdlist);
8e3b41a9 4142}