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