Make dwarf2_evaluate_property parameter const
[deliverable/binutils-gdb.git] / gdb / dwarf2 / loc.c
1 /* DWARF 2 location expression support for GDB.
2
3 Copyright (C) 2003-2020 Free Software Foundation, Inc.
4
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
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
13
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.
18
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21
22 #include "defs.h"
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"
29 #include "ax.h"
30 #include "ax-gdb.h"
31 #include "regcache.h"
32 #include "objfiles.h"
33 #include "block.h"
34 #include "gdbcmd.h"
35 #include "complaints.h"
36 #include "dwarf2.h"
37 #include "dwarf2/expr.h"
38 #include "dwarf2/loc.h"
39 #include "dwarf2/read.h"
40 #include "dwarf2/frame.h"
41 #include "dwarf2/leb.h"
42 #include "compile/compile.h"
43 #include "gdbsupport/selftest.h"
44 #include <algorithm>
45 #include <vector>
46 #include <unordered_set>
47 #include "gdbsupport/underlying.h"
48 #include "gdbsupport/byte-vector.h"
49
50 static struct value *dwarf2_evaluate_loc_desc_full (struct type *type,
51 struct frame_info *frame,
52 const gdb_byte *data,
53 size_t size,
54 struct dwarf2_per_cu_data *per_cu,
55 struct type *subobj_type,
56 LONGEST subobj_byte_offset);
57
58 static 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
64 static 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,
68 struct type *type, bool resolve_abstract_p = false);
69
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
75 enum 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. */
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,
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
102 /* Helper function which throws an error if a synthetic pointer is
103 invalid. */
104
105 static void
106 invalid_synthetic_pointer (void)
107 {
108 error (_("access outside bounds of object "
109 "referenced via synthetic pointer"));
110 }
111
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
117 static enum debug_loc_kind
118 decode_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
152 return DEBUG_LOC_START_END;
153 }
154
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
160 static enum debug_loc_kind
161 decode_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 {
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;
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;
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:
240 default:
241 return DEBUG_LOC_INVALID_ENTRY;
242 }
243 }
244
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
250 static enum debug_loc_kind
251 decode_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,
255 CORE_ADDR *low, CORE_ADDR *high,
256 enum bfd_endian byte_order)
257 {
258 uint64_t low_index, high_index;
259
260 if (loc_ptr == buf_end)
261 return DEBUG_LOC_BUFFER_OVERFLOW;
262
263 switch (*loc_ptr++)
264 {
265 case DW_LLE_GNU_end_of_list_entry:
266 *new_ptr = loc_ptr;
267 return DEBUG_LOC_END_OF_LIST;
268 case DW_LLE_GNU_base_address_selection_entry:
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;
276 case DW_LLE_GNU_start_end_entry:
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;
286 return DEBUG_LOC_START_END;
287 case DW_LLE_GNU_start_length_entry:
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;
298 default:
299 return DEBUG_LOC_INVALID_ENTRY;
300 }
301 }
302
303 /* A function for dealing with location lists. Given a
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
311 const gdb_byte *
312 dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton,
313 size_t *locexpr_length, CORE_ADDR pc)
314 {
315 struct objfile *objfile = baton->per_cu->objfile ();
316 struct gdbarch *gdbarch = get_objfile_arch (objfile);
317 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
318 unsigned int addr_size = baton->per_cu->addr_size ();
319 int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
320 /* Adjust base_address for relocatable objects. */
321 CORE_ADDR base_offset = baton->per_cu->text_offset ();
322 CORE_ADDR base_address = baton->base_address + base_offset;
323 const gdb_byte *loc_ptr, *buf_end;
324
325 loc_ptr = baton->data;
326 buf_end = baton->data + baton->size;
327
328 while (1)
329 {
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,
338 &low, &high, byte_order);
339 else if (baton->per_cu->version () < 5)
340 kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
341 &low, &high,
342 byte_order, addr_size,
343 signed_addr_p);
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
350 loc_ptr = new_ptr;
351 switch (kind)
352 {
353 case DEBUG_LOC_END_OF_LIST:
354 *locexpr_length = 0;
355 return NULL;
356 case DEBUG_LOC_BASE_ADDRESS:
357 base_address = high + base_offset;
358 continue;
359 case DEBUG_LOC_START_END:
360 case DEBUG_LOC_START_LENGTH:
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");
368 }
369
370 /* Otherwise, a location expression entry.
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
380 {
381 low += base_address;
382 high += base_address;
383 }
384
385 if (baton->per_cu->version () < 5)
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 }
397
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
403 const struct block *pc_block = block_for_pc (pc);
404 struct symbol *pc_func = NULL;
405
406 if (pc_block)
407 pc_func = block_linkage_function (pc_block);
408
409 if (pc_func && pc == BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (pc_func)))
410 {
411 *locexpr_length = length;
412 return loc_ptr;
413 }
414 }
415
416 if (pc >= low && pc < high)
417 {
418 *locexpr_length = length;
419 return loc_ptr;
420 }
421
422 loc_ptr += length;
423 }
424 }
425
426 /* Implement find_frame_base_location method for LOC_BLOCK functions using
427 DWARF expression for its DW_AT_frame_base. */
428
429 static void
430 locexpr_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc,
431 const gdb_byte **start, size_t *length)
432 {
433 struct dwarf2_locexpr_baton *symbaton
434 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (framefunc);
435
436 *length = symbaton->size;
437 *start = symbaton->data;
438 }
439
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. */
442
443 static CORE_ADDR
444 locexpr_get_frame_base (struct symbol *framefunc, struct frame_info *frame)
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;
460 dlbaton = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (framefunc);
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
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
478 const struct symbol_block_ops dwarf2_block_frame_base_locexpr_funcs =
479 {
480 locexpr_find_frame_base_location,
481 locexpr_get_frame_base
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
487 static void
488 loclist_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc,
489 const gdb_byte **start, size_t *length)
490 {
491 struct dwarf2_loclist_baton *symbaton
492 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (framefunc);
493
494 *start = dwarf2_find_location_expression (symbaton, length, pc);
495 }
496
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
500 static CORE_ADDR
501 loclist_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;
517 dlbaton = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (framefunc);
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
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
535 const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs =
536 {
537 loclist_find_frame_base_location,
538 loclist_get_frame_base
539 };
540
541 /* See dwarf2loc.h. */
542
543 void
544 func_get_frame_base_dwarf_block (struct symbol *framefunc, CORE_ADDR pc,
545 const gdb_byte **start, size_t *length)
546 {
547 if (SYMBOL_BLOCK_OPS (framefunc) != NULL)
548 {
549 const struct symbol_block_ops *ops_block = SYMBOL_BLOCK_OPS (framefunc);
550
551 ops_block->find_frame_base_location (framefunc, pc, start, length);
552 }
553 else
554 *length = 0;
555
556 if (*length == 0)
557 error (_("Could not find the frame base for \"%s\"."),
558 framefunc->natural_name ());
559 }
560
561 static CORE_ADDR
562 get_frame_pc_for_per_cu_dwarf_call (void *baton)
563 {
564 dwarf_expr_context *ctx = (dwarf_expr_context *) baton;
565
566 return ctx->get_frame_pc ();
567 }
568
569 static void
570 per_cu_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset,
571 struct dwarf2_per_cu_data *per_cu)
572 {
573 struct dwarf2_locexpr_baton block;
574
575 block = dwarf2_fetch_die_loc_cu_off (die_offset, per_cu,
576 get_frame_pc_for_per_cu_dwarf_call,
577 ctx);
578
579 /* DW_OP_call_ref is currently not supported. */
580 gdb_assert (block.per_cu == per_cu);
581
582 ctx->eval (block.data, block.size);
583 }
584
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
589 static struct value *
590 sect_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."));
606 return indirect_synthetic_pointer (sect_off, 0, per_cu, frame, type, true);
607 }
608
609 class dwarf_evaluate_loc_desc : public dwarf_expr_context
610 {
611 public:
612
613 struct frame_info *frame;
614 struct dwarf2_per_cu_data *per_cu;
615 CORE_ADDR obj_address;
616
617 /* Helper function for dwarf2_evaluate_loc_desc. Computes the CFA for
618 the frame in BATON. */
619
620 CORE_ADDR get_frame_cfa () override
621 {
622 return dwarf2_frame_cfa (frame);
623 }
624
625 /* Helper function for dwarf2_evaluate_loc_desc. Computes the PC for
626 the frame in BATON. */
627
628 CORE_ADDR get_frame_pc () override
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. */
635 CORE_ADDR get_tls_address (CORE_ADDR offset) override
636 {
637 struct objfile *objfile = per_cu->objfile ();
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
645 void dwarf_call (cu_offset die_offset) override
646 {
647 per_cu_dwarf_call (this, die_offset, per_cu);
648 }
649
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
658 struct type *get_base_type (cu_offset die_offset, int size) override
659 {
660 struct type *result = dwarf2_get_die_type (die_offset, per_cu);
661 if (result == NULL)
662 error (_("Could not find type for DW_OP_const_type"));
663 if (size != 0 && TYPE_LENGTH (result) != size)
664 error (_("DW_OP_const_type has different sizes for type and data"));
665 return result;
666 }
667
668 /* Callback function for dwarf2_evaluate_loc_desc.
669 Fetch the address indexed by DW_OP_addrx or DW_OP_GNU_addr_index. */
670
671 CORE_ADDR get_addr_index (unsigned int index) override
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
679 CORE_ADDR get_object_address () override
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,
696 int deref_size) override
697 {
698 struct frame_info *caller_frame;
699 struct dwarf2_per_cu_data *caller_per_cu;
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,
714 _("Cannot resolve DW_AT_call_data_value"));
715
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);
722
723 scoped_restore save_arch = make_scoped_restore (&this->gdbarch);
724 this->gdbarch = get_objfile_arch (per_cu->objfile ());
725 scoped_restore save_addr_size = make_scoped_restore (&this->addr_size);
726 this->addr_size = per_cu->addr_size ();
727 scoped_restore save_offset = make_scoped_restore (&this->offset);
728 this->offset = per_cu->text_offset ();
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. */
736 void get_frame_base (const gdb_byte **start, size_t * length) override
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
764 void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override
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. */
771 CORE_ADDR read_addr_from_reg (int dwarf_regnum) override
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
781 struct value *get_reg_value (struct type *type, int dwarf_regnum) override
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 };
789
790 /* See dwarf2loc.h. */
791
792 unsigned int entry_values_debug = 0;
793
794 /* Helper to set entry_values_debug. */
795
796 static void
797 show_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
805 /* Find DW_TAG_call_site's DW_AT_call_target address.
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
809 static CORE_ADDR
810 call_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 {
826 struct bound_minimal_symbol msym;
827
828 msym = lookup_minimal_symbol_by_pc (call_site->pc - 1);
829 throw_error (NO_ENTRY_VALUE_ERROR,
830 _("DW_AT_call_target is not specified at %s in %s"),
831 paddress (call_site_gdbarch, call_site->pc),
832 (msym.minsym == NULL ? "???"
833 : msym.minsym->print_name ()));
834
835 }
836 if (caller_frame == NULL)
837 {
838 struct bound_minimal_symbol msym;
839
840 msym = lookup_minimal_symbol_by_pc (call_site->pc - 1);
841 throw_error (NO_ENTRY_VALUE_ERROR,
842 _("DW_AT_call_target DWARF block resolving "
843 "requires known frame which is currently not "
844 "available at %s in %s"),
845 paddress (call_site_gdbarch, call_site->pc),
846 (msym.minsym == NULL ? "???"
847 : msym.minsym->print_name ()));
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);
855 /* DW_AT_call_target is a DWARF expression, not a DWARF location. */
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;
865 struct bound_minimal_symbol msym;
866
867 physname = FIELD_STATIC_PHYSNAME (call_site->target);
868
869 /* Handle both the mangled and demangled PHYSNAME. */
870 msym = lookup_minimal_symbol (physname, NULL, NULL);
871 if (msym.minsym == NULL)
872 {
873 msym = lookup_minimal_symbol_by_pc (call_site->pc - 1);
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),
878 (msym.minsym == NULL ? "???"
879 : msym.minsym->print_name ()));
880
881 }
882 return BMSYMBOL_VALUE_ADDRESS (msym);
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
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
897 static struct symbol *
898 func_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
903 if (sym == NULL || BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)) != addr)
904 throw_error (NO_ENTRY_VALUE_ERROR,
905 _("DW_TAG_call_site resolving failed to find function "
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
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
925 static void
926 func_verify_no_selftailcall (struct gdbarch *gdbarch, CORE_ADDR verify_addr)
927 {
928 CORE_ADDR addr;
929
930 /* The verification is completely unordered. Track here function addresses
931 which still need to be iterated. */
932 std::vector<CORE_ADDR> todo;
933
934 /* Track here CORE_ADDRs which were already visited. */
935 std::unordered_set<CORE_ADDR> addr_hash;
936
937 todo.push_back (verify_addr);
938 while (!todo.empty ())
939 {
940 struct symbol *func_sym;
941 struct call_site *call_site;
942
943 addr = todo.back ();
944 todo.pop_back ();
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;
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 {
959 struct bound_minimal_symbol msym;
960
961 msym = lookup_minimal_symbol_by_pc (verify_addr);
962 throw_error (NO_ENTRY_VALUE_ERROR,
963 _("DW_OP_entry_value resolving has found "
964 "function \"%s\" at %s can call itself via tail "
965 "calls"),
966 (msym.minsym == NULL ? "???"
967 : msym.minsym->print_name ()),
968 paddress (gdbarch, verify_addr));
969 }
970
971 if (addr_hash.insert (target_addr).second)
972 todo.push_back (target_addr);
973 }
974 }
975 }
976
977 /* Print user readable form of CALL_SITE->PC to gdb_stdlog. Used only for
978 ENTRY_VALUES_DEBUG. */
979
980 static void
981 tailcall_dump (struct gdbarch *gdbarch, const struct call_site *call_site)
982 {
983 CORE_ADDR addr = call_site->pc;
984 struct bound_minimal_symbol msym = lookup_minimal_symbol_by_pc (addr - 1);
985
986 fprintf_unfiltered (gdb_stdlog, " %s(%s)", paddress (gdbarch, addr),
987 (msym.minsym == NULL ? "???"
988 : msym.minsym->print_name ()));
989
990 }
991
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
999 static void
1000 chain_candidate (struct gdbarch *gdbarch,
1001 gdb::unique_xmalloc_ptr<struct call_site_chain> *resultp,
1002 std::vector<struct call_site *> *chain)
1003 {
1004 long length = chain->size ();
1005 int callers, callees, idx;
1006
1007 if (*resultp == NULL)
1008 {
1009 /* Create the initial chain containing all the passed PCs. */
1010
1011 struct call_site_chain *result
1012 = ((struct call_site_chain *)
1013 xmalloc (sizeof (*result)
1014 + sizeof (*result->call_site) * (length - 1)));
1015 result->length = length;
1016 result->callers = result->callees = length;
1017 if (!chain->empty ())
1018 memcpy (result->call_site, chain->data (),
1019 sizeof (*result->call_site) * length);
1020 resultp->reset (result);
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++)
1037 tailcall_dump (gdbarch, chain->at (idx));
1038 fputc_unfiltered ('\n', gdb_stdlog);
1039 }
1040
1041 /* Intersect callers. */
1042
1043 callers = std::min ((long) (*resultp)->callers, length);
1044 for (idx = 0; idx < callers; idx++)
1045 if ((*resultp)->call_site[idx] != chain->at (idx))
1046 {
1047 (*resultp)->callers = idx;
1048 break;
1049 }
1050
1051 /* Intersect callees. */
1052
1053 callees = std::min ((long) (*resultp)->callees, length);
1054 for (idx = 0; idx < callees; idx++)
1055 if ((*resultp)->call_site[(*resultp)->length - 1 - idx]
1056 != chain->at (length - 1 - idx))
1057 {
1058 (*resultp)->callees = idx;
1059 break;
1060 }
1061
1062 if (entry_values_debug)
1063 {
1064 fprintf_unfiltered (gdb_stdlog, "tailcall: reduced:");
1065 for (idx = 0; idx < (*resultp)->callers; idx++)
1066 tailcall_dump (gdbarch, (*resultp)->call_site[idx]);
1067 fputs_unfiltered (" |", gdb_stdlog);
1068 for (idx = 0; idx < (*resultp)->callees; idx++)
1069 tailcall_dump (gdbarch,
1070 (*resultp)->call_site[(*resultp)->length
1071 - (*resultp)->callees + idx]);
1072 fputc_unfiltered ('\n', gdb_stdlog);
1073 }
1074
1075 if ((*resultp)->callers == 0 && (*resultp)->callees == 0)
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. */
1081 resultp->reset (NULL);
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
1087 it. CALLERS + CALLEES equal to LENGTH in the case of self tail-call. */
1088 gdb_assert ((*resultp)->callers + (*resultp)->callees <= (*resultp)->length);
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
1094 would have needless GDB stack overhead. Any unreliability results
1095 in thrown NO_ENTRY_VALUE_ERROR. */
1096
1097 static gdb::unique_xmalloc_ptr<call_site_chain>
1098 call_site_find_chain_1 (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
1099 CORE_ADDR callee_pc)
1100 {
1101 CORE_ADDR save_callee_pc = callee_pc;
1102 gdb::unique_xmalloc_ptr<struct call_site_chain> retval;
1103 struct call_site *call_site;
1104
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. */
1109 std::vector<struct call_site *> chain;
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"),
1115 paddress (gdbarch, save_callee_pc));
1116
1117 /* Mark CALL_SITEs so we do not visit the same ones twice. */
1118 std::unordered_set<CORE_ADDR> addr_hash;
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 {
1137 chain_candidate (gdbarch, &retval, &chain);
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 {
1159 if (addr_hash.insert (target_call_site->pc).second)
1160 {
1161 /* Successfully entered TARGET_CALL_SITE. */
1162
1163 chain.push_back (target_call_site);
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;
1173 while (!chain.empty ())
1174 {
1175 call_site = chain.back ();
1176 chain.pop_back ();
1177
1178 size_t removed = addr_hash.erase (call_site->pc);
1179 gdb_assert (removed == 1);
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
1188 if (chain.empty ())
1189 call_site = NULL;
1190 else
1191 call_site = chain.back ();
1192 }
1193
1194 if (retval == NULL)
1195 {
1196 struct bound_minimal_symbol msym_caller, msym_callee;
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"),
1204 (msym_caller.minsym == NULL
1205 ? "???" : msym_caller.minsym->print_name ()),
1206 paddress (gdbarch, caller_pc),
1207 (msym_callee.minsym == NULL
1208 ? "???" : msym_callee.minsym->print_name ()),
1209 paddress (gdbarch, callee_pc));
1210 }
1211
1212 return retval;
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
1217 constructed return NULL. */
1218
1219 gdb::unique_xmalloc_ptr<call_site_chain>
1220 call_site_find_chain (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
1221 CORE_ADDR callee_pc)
1222 {
1223 gdb::unique_xmalloc_ptr<call_site_chain> retval;
1224
1225 try
1226 {
1227 retval = call_site_find_chain_1 (gdbarch, caller_pc, callee_pc);
1228 }
1229 catch (const gdb_exception_error &e)
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
1239 throw;
1240 }
1241
1242 return retval;
1243 }
1244
1245 /* Return 1 if KIND and KIND_U match PARAMETER. Return 0 otherwise. */
1246
1247 static int
1248 call_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;
1259 case CALL_SITE_PARAMETER_PARAM_OFFSET:
1260 return kind_u.param_cu_off == parameter->u.param_cu_off;
1261 }
1262 return 0;
1263 }
1264
1265 /* Fetch call_site_parameter from caller matching KIND and KIND_U.
1266 FRAME is for callee.
1267
1268 Function always returns non-NULL, it throws NO_ENTRY_VALUE_ERROR
1269 otherwise. */
1270
1271 static struct call_site_parameter *
1272 dwarf_expr_reg_to_entry_parameter (struct frame_info *frame,
1273 enum call_site_parameter_kind kind,
1274 union call_site_parameter_u kind_u,
1275 struct dwarf2_per_cu_data **per_cu_return)
1276 {
1277 CORE_ADDR func_addr, caller_pc;
1278 struct gdbarch *gdbarch;
1279 struct frame_info *caller_frame;
1280 struct call_site *call_site;
1281 int iparams;
1282 /* Initialize it just to avoid a GCC false warning. */
1283 struct call_site_parameter *parameter = NULL;
1284 CORE_ADDR target_addr;
1285
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);
1295 if (gdbarch != frame_unwind_arch (frame))
1296 {
1297 struct bound_minimal_symbol msym
1298 = lookup_minimal_symbol_by_pc (func_addr);
1299 struct gdbarch *caller_gdbarch = frame_unwind_arch (frame);
1300
1301 throw_error (NO_ENTRY_VALUE_ERROR,
1302 _("DW_OP_entry_value resolving callee gdbarch %s "
1303 "(of %s (%s)) does not match caller gdbarch %s"),
1304 gdbarch_bfd_arch_info (gdbarch)->printable_name,
1305 paddress (gdbarch, func_addr),
1306 (msym.minsym == NULL ? "???"
1307 : msym.minsym->print_name ()),
1308 gdbarch_bfd_arch_info (caller_gdbarch)->printable_name);
1309 }
1310
1311 if (caller_frame == NULL)
1312 {
1313 struct bound_minimal_symbol msym
1314 = lookup_minimal_symbol_by_pc (func_addr);
1315
1316 throw_error (NO_ENTRY_VALUE_ERROR, _("DW_OP_entry_value resolving "
1317 "requires caller of %s (%s)"),
1318 paddress (gdbarch, func_addr),
1319 (msym.minsym == NULL ? "???"
1320 : msym.minsym->print_name ()));
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
1330 target_msym = lookup_minimal_symbol_by_pc (target_addr).minsym;
1331 func_msym = lookup_minimal_symbol_by_pc (func_addr).minsym;
1332 throw_error (NO_ENTRY_VALUE_ERROR,
1333 _("DW_OP_entry_value resolving expects callee %s at %s "
1334 "but the called frame is for %s at %s"),
1335 (target_msym == NULL ? "???"
1336 : target_msym->print_name ()),
1337 paddress (gdbarch, target_addr),
1338 func_msym == NULL ? "???" : func_msym->print_name (),
1339 paddress (gdbarch, func_addr));
1340 }
1341
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
1346 for (iparams = 0; iparams < call_site->parameter_count; iparams++)
1347 {
1348 parameter = &call_site->parameter[iparams];
1349 if (call_site_parameter_matches (parameter, kind, kind_u))
1350 break;
1351 }
1352 if (iparams == call_site->parameter_count)
1353 {
1354 struct minimal_symbol *msym
1355 = lookup_minimal_symbol_by_pc (caller_pc).minsym;
1356
1357 /* DW_TAG_call_site_parameter will be missing just if GCC could not
1358 determine its value. */
1359 throw_error (NO_ENTRY_VALUE_ERROR, _("Cannot find matching parameter "
1360 "at DW_TAG_call_site %s at %s"),
1361 paddress (gdbarch, caller_pc),
1362 msym == NULL ? "???" : msym->print_name ());
1363 }
1364
1365 *per_cu_return = call_site->per_cu;
1366 return parameter;
1367 }
1368
1369 /* Return value for PARAMETER matching DEREF_SIZE. If DEREF_SIZE is -1, return
1370 the normal DW_AT_call_value block. Otherwise return the
1371 DW_AT_call_data_value (dereferenced) block.
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
1379 static struct value *
1380 dwarf_entry_parameter_to_value (struct call_site_parameter *parameter,
1381 CORE_ADDR deref_size, struct type *type,
1382 struct frame_info *caller_frame,
1383 struct dwarf2_per_cu_data *per_cu)
1384 {
1385 const gdb_byte *data_src;
1386 gdb_byte *data;
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,
1395 _("Cannot resolve DW_AT_call_data_value"));
1396
1397 /* DW_AT_call_value is a DWARF expression, not a DWARF
1398 location. Postprocessing of DWARF_VALUE_MEMORY would lose the type from
1399 DWARF block. */
1400 data = (gdb_byte *) alloca (size + 1);
1401 memcpy (data, data_src, size);
1402 data[size] = DW_OP_stack_value;
1403
1404 return dwarf2_evaluate_loc_desc (type, caller_frame, data, size + 1, per_cu);
1405 }
1406
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
1411 static struct value *
1412 entry_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
1417 if (!TYPE_IS_REFERENCE (checked_type))
1418 return NULL;
1419
1420 target_val = (struct value *) value_computed_closure (value);
1421 value_incref (target_val);
1422 return target_val;
1423 }
1424
1425 /* Implement copy_closure. */
1426
1427 static void *
1428 entry_data_value_copy_closure (const struct value *v)
1429 {
1430 struct value *target_val = (struct value *) value_computed_closure (v);
1431
1432 value_incref (target_val);
1433 return target_val;
1434 }
1435
1436 /* Implement free_closure. */
1437
1438 static void
1439 entry_data_value_free_closure (struct value *v)
1440 {
1441 struct value *target_val = (struct value *) value_computed_closure (v);
1442
1443 value_decref (target_val);
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
1448 DW_AT_call_data_value in the caller. */
1449
1450 static const struct lval_funcs entry_data_value_funcs =
1451 {
1452 NULL, /* read */
1453 NULL, /* write */
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
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
1463 DW_TAG_call_site_parameter.
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
1468 static struct value *
1469 value_of_dwarf_reg_entry (struct type *type, struct frame_info *frame,
1470 enum call_site_parameter_kind kind,
1471 union call_site_parameter_u kind_u)
1472 {
1473 struct type *checked_type = check_typedef (type);
1474 struct type *target_type = TYPE_TARGET_TYPE (checked_type);
1475 struct frame_info *caller_frame = get_prev_frame (frame);
1476 struct value *outer_val, *target_val, *val;
1477 struct call_site_parameter *parameter;
1478 struct dwarf2_per_cu_data *caller_per_cu;
1479
1480 parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u,
1481 &caller_per_cu);
1482
1483 outer_val = dwarf_entry_parameter_to_value (parameter, -1 /* deref_size */,
1484 type, caller_frame,
1485 caller_per_cu);
1486
1487 /* Check if DW_AT_call_data_value cannot be used. If it should be
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
1492 if (!TYPE_IS_REFERENCE (checked_type)
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
1501 val = allocate_computed_value (type, &entry_data_value_funcs,
1502 release_value (target_val).release ());
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;
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
1514 DW_TAG_call_site_parameter.
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
1519 static struct value *
1520 value_of_dwarf_block_entry (struct type *type, struct frame_info *frame,
1521 const gdb_byte *block, size_t block_len)
1522 {
1523 union call_site_parameter_u kind_u;
1524
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);
1529
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);
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,
1538 _("DWARF-2 expression error: DW_OP_entry_value is supported "
1539 "only for single DW_OP_reg* or for DW_OP_fbreg(*)"));
1540 }
1541
1542 struct piece_closure
1543 {
1544 /* Reference count. */
1545 int refc = 0;
1546
1547 /* The CU from which this closure's expression came. */
1548 struct dwarf2_per_cu_data *per_cu = NULL;
1549
1550 /* The pieces describing this variable. */
1551 std::vector<dwarf_expr_piece> pieces;
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;
1556 };
1557
1558 /* Allocate a closure for a value formed from separately-described
1559 PIECES. */
1560
1561 static struct piece_closure *
1562 allocate_piece_closure (struct dwarf2_per_cu_data *per_cu,
1563 std::vector<dwarf_expr_piece> &&pieces,
1564 struct frame_info *frame)
1565 {
1566 struct piece_closure *c = new piece_closure;
1567
1568 c->refc = 1;
1569 c->per_cu = per_cu;
1570 c->pieces = std::move (pieces);
1571 if (frame == NULL)
1572 c->frame_id = null_frame_id;
1573 else
1574 c->frame_id = get_frame_id (frame);
1575
1576 for (dwarf_expr_piece &piece : c->pieces)
1577 if (piece.location == DWARF_VALUE_STACK)
1578 value_incref (piece.v.value);
1579
1580 return c;
1581 }
1582
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
1586 static size_t
1587 bits_to_bytes (ULONGEST start, ULONGEST n_bits)
1588 {
1589 return (start % 8 + n_bits + 7) / 8;
1590 }
1591
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
1597 static void
1598 rw_pieced_value (struct value *v, struct value *from)
1599 {
1600 int i;
1601 LONGEST offset = 0, max_offset;
1602 ULONGEST bits_to_skip;
1603 gdb_byte *v_contents;
1604 const gdb_byte *from_contents;
1605 struct piece_closure *c
1606 = (struct piece_closure *) value_computed_closure (v);
1607 gdb::byte_vector buffer;
1608 bool bits_big_endian = type_byte_order (value_type (v)) == BFD_ENDIAN_BIG;
1609
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 }
1624
1625 bits_to_skip = 8 * value_offset (v);
1626 if (value_bitsize (v))
1627 {
1628 bits_to_skip += (8 * value_offset (value_parent (v))
1629 + value_bitpos (v));
1630 if (from != NULL
1631 && (type_byte_order (value_type (from))
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);
1640 }
1641 else
1642 max_offset = 8 * TYPE_LENGTH (value_type (v));
1643
1644 /* Advance to the first non-skipped piece. */
1645 for (i = 0; i < c->pieces.size () && bits_to_skip >= c->pieces[i].size; i++)
1646 bits_to_skip -= c->pieces[i].size;
1647
1648 for (; i < c->pieces.size () && offset < max_offset; i++)
1649 {
1650 struct dwarf_expr_piece *p = &c->pieces[i];
1651 size_t this_size_bits, this_size;
1652
1653 this_size_bits = p->size - bits_to_skip;
1654 if (this_size_bits > max_offset - offset)
1655 this_size_bits = max_offset - offset;
1656
1657 switch (p->location)
1658 {
1659 case DWARF_VALUE_REGISTER:
1660 {
1661 struct frame_info *frame = frame_find_by_id (c->frame_id);
1662 struct gdbarch *arch = get_frame_arch (frame);
1663 int gdb_regnum = dwarf_reg_to_regnum_or_error (arch, p->v.regno);
1664 ULONGEST reg_bits = 8 * register_size (arch, gdb_regnum);
1665 int optim, unavail;
1666
1667 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
1668 && p->offset + p->size < reg_bits)
1669 {
1670 /* Big-endian, and we want less than full size. */
1671 bits_to_skip += reg_bits - (p->offset + p->size);
1672 }
1673 else
1674 bits_to_skip += p->offset;
1675
1676 this_size = bits_to_bytes (bits_to_skip, this_size_bits);
1677 buffer.resize (this_size);
1678
1679 if (from == NULL)
1680 {
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 ());
1729 }
1730 }
1731 break;
1732
1733 case DWARF_VALUE_MEMORY:
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);
1758 buffer.resize (this_size);
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 }
1800 break;
1801
1802 case DWARF_VALUE_STACK:
1803 {
1804 if (from != NULL)
1805 {
1806 mark_value_bits_optimized_out (v, offset, this_size_bits);
1807 break;
1808 }
1809
1810 struct objfile *objfile = c->per_cu->objfile ();
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. */
1816 if (p->offset + p->size > stack_value_size_bits)
1817 break;
1818
1819 /* Piece is anchored at least significant bit end. */
1820 if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG)
1821 bits_to_skip += stack_value_size_bits - p->offset - p->size;
1822 else
1823 bits_to_skip += p->offset;
1824
1825 copy_bitwise (v_contents, offset,
1826 value_contents_all (p->v.value),
1827 bits_to_skip,
1828 this_size_bits, bits_big_endian);
1829 }
1830 break;
1831
1832 case DWARF_VALUE_LITERAL:
1833 {
1834 if (from != NULL)
1835 {
1836 mark_value_bits_optimized_out (v, offset, this_size_bits);
1837 break;
1838 }
1839
1840 ULONGEST literal_size_bits = 8 * p->v.literal.length;
1841 size_t n = this_size_bits;
1842
1843 /* Cut off at the end of the implicit value. */
1844 bits_to_skip += p->offset;
1845 if (bits_to_skip >= literal_size_bits)
1846 break;
1847 if (n > literal_size_bits - bits_to_skip)
1848 n = literal_size_bits - bits_to_skip;
1849
1850 copy_bitwise (v_contents, offset,
1851 p->v.literal.data, bits_to_skip,
1852 n, bits_big_endian);
1853 }
1854 break;
1855
1856 case DWARF_VALUE_IMPLICIT_POINTER:
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. */
1865 break;
1866
1867 case DWARF_VALUE_OPTIMIZED_OUT:
1868 mark_value_bits_optimized_out (v, offset, this_size_bits);
1869 break;
1870
1871 default:
1872 internal_error (__FILE__, __LINE__, _("invalid location type"));
1873 }
1874
1875 offset += this_size_bits;
1876 bits_to_skip = 0;
1877 }
1878 }
1879
1880
1881 static void
1882 read_pieced_value (struct value *v)
1883 {
1884 rw_pieced_value (v, NULL);
1885 }
1886
1887 static void
1888 write_pieced_value (struct value *to, struct value *from)
1889 {
1890 rw_pieced_value (to, from);
1891 }
1892
1893 /* An implementation of an lval_funcs method to see whether a value is
1894 a synthetic pointer. */
1895
1896 static int
1897 check_pieced_synthetic_pointer (const struct value *value, LONGEST bit_offset,
1898 int bit_length)
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
1908 for (i = 0; i < c->pieces.size () && bit_length > 0; i++)
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
1927 if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
1928 return 0;
1929 }
1930
1931 return 1;
1932 }
1933
1934 /* A wrapper function for get_frame_address_in_block. */
1935
1936 static CORE_ADDR
1937 get_frame_address_in_block_wrapper (void *baton)
1938 {
1939 return get_frame_address_in_block ((struct frame_info *) baton);
1940 }
1941
1942 /* Fetch a DW_AT_const_value through a synthetic pointer. */
1943
1944 static struct value *
1945 fetch_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;
1950 const gdb_byte *bytes;
1951 LONGEST len;
1952
1953 auto_obstack temp_obstack;
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
1970 return result;
1971 }
1972
1973 /* Fetch the value pointed to by a synthetic pointer. */
1974
1975 static struct value *
1976 indirect_synthetic_pointer (sect_offset die, LONGEST byte_offset,
1977 struct dwarf2_per_cu_data *per_cu,
1978 struct frame_info *frame, struct type *type,
1979 bool resolve_abstract_p)
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,
1984 get_frame_address_in_block_wrapper, frame,
1985 resolve_abstract_p);
1986
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
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)
1996 return dwarf2_evaluate_loc_desc_full (orig_type, frame, baton.data,
1997 baton.size, baton.per_cu,
1998 TYPE_TARGET_TYPE (type),
1999 byte_offset);
2000 else
2001 return fetch_const_value_from_synthetic_pointer (die, byte_offset, per_cu,
2002 type);
2003 }
2004
2005 /* An implementation of an lval_funcs method to indirect through a
2006 pointer. This handles the synthetic pointer case when needed. */
2007
2008 static struct value *
2009 indirect_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;
2015 int i, bit_length;
2016 LONGEST bit_offset;
2017 struct dwarf_expr_piece *piece = NULL;
2018 LONGEST byte_offset;
2019 enum bfd_endian byte_order;
2020
2021 type = check_typedef (value_type (value));
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
2030 for (i = 0; i < c->pieces.size () && bit_length > 0; i++)
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)
2053 error (_("Invalid use of DW_OP_implicit_pointer"));
2054
2055 piece = p;
2056 break;
2057 }
2058
2059 gdb_assert (piece != NULL);
2060 frame = get_selected_frame (_("No frame selected."));
2061
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
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);
2075 byte_offset += piece->v.ptr.offset;
2076
2077 return indirect_synthetic_pointer (piece->v.ptr.die_sect_off,
2078 byte_offset, c->per_cu,
2079 frame, type);
2080 }
2081
2082 /* Implementation of the coerce_ref method of lval_funcs for synthetic C++
2083 references. */
2084
2085 static struct value *
2086 coerce_pieced_ref (const struct value *value)
2087 {
2088 struct type *type = check_typedef (value_type (value));
2089
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);
2101 gdb_assert (closure->pieces.size () == 1);
2102
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);
2107 }
2108 else
2109 {
2110 /* Else: not a synthetic reference; do nothing. */
2111 return NULL;
2112 }
2113 }
2114
2115 static void *
2116 copy_pieced_value_closure (const struct value *v)
2117 {
2118 struct piece_closure *c
2119 = (struct piece_closure *) value_computed_closure (v);
2120
2121 ++c->refc;
2122 return c;
2123 }
2124
2125 static void
2126 free_pieced_value_closure (struct value *v)
2127 {
2128 struct piece_closure *c
2129 = (struct piece_closure *) value_computed_closure (v);
2130
2131 --c->refc;
2132 if (c->refc == 0)
2133 {
2134 for (dwarf_expr_piece &p : c->pieces)
2135 if (p.location == DWARF_VALUE_STACK)
2136 value_decref (p.v.value);
2137
2138 delete c;
2139 }
2140 }
2141
2142 /* Functions for accessing a variable described by DW_OP_piece. */
2143 static const struct lval_funcs pieced_value_funcs = {
2144 read_pieced_value,
2145 write_pieced_value,
2146 indirect_pieced_value,
2147 coerce_pieced_ref,
2148 check_pieced_synthetic_pointer,
2149 copy_pieced_value_closure,
2150 free_pieced_value_closure
2151 };
2152
2153 /* Evaluate a location description, starting at DATA and with length
2154 SIZE, to find the current location of variable of TYPE in the
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. */
2158
2159 static struct value *
2160 dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
2161 const gdb_byte *data, size_t size,
2162 struct dwarf2_per_cu_data *per_cu,
2163 struct type *subobj_type,
2164 LONGEST subobj_byte_offset)
2165 {
2166 struct value *retval;
2167 struct objfile *objfile = per_cu->objfile ();
2168
2169 if (subobj_type == NULL)
2170 {
2171 subobj_type = type;
2172 subobj_byte_offset = 0;
2173 }
2174 else if (subobj_byte_offset < 0)
2175 invalid_synthetic_pointer ();
2176
2177 if (size == 0)
2178 return allocate_optimized_out_value (subobj_type);
2179
2180 dwarf_evaluate_loc_desc ctx;
2181 ctx.frame = frame;
2182 ctx.per_cu = per_cu;
2183 ctx.obj_address = 0;
2184
2185 scoped_value_mark free_values;
2186
2187 ctx.gdbarch = get_objfile_arch (objfile);
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 ();
2191
2192 try
2193 {
2194 ctx.eval (data, size);
2195 }
2196 catch (const gdb_exception_error &ex)
2197 {
2198 if (ex.error == NOT_AVAILABLE_ERROR)
2199 {
2200 free_values.free_to_mark ();
2201 retval = allocate_value (subobj_type);
2202 mark_value_bytes_unavailable (retval, 0,
2203 TYPE_LENGTH (subobj_type));
2204 return retval;
2205 }
2206 else if (ex.error == NO_ENTRY_VALUE_ERROR)
2207 {
2208 if (entry_values_debug)
2209 exception_print (gdb_stdout, ex);
2210 free_values.free_to_mark ();
2211 return allocate_optimized_out_value (subobj_type);
2212 }
2213 else
2214 throw;
2215 }
2216
2217 if (ctx.pieces.size () > 0)
2218 {
2219 struct piece_closure *c;
2220 ULONGEST bit_size = 0;
2221
2222 for (dwarf_expr_piece &piece : ctx.pieces)
2223 bit_size += piece.size;
2224 /* Complain if the expression is larger than the size of the
2225 outer type. */
2226 if (bit_size > 8 * TYPE_LENGTH (type))
2227 invalid_synthetic_pointer ();
2228
2229 c = allocate_piece_closure (per_cu, std::move (ctx.pieces), frame);
2230 /* We must clean up the value chain after creating the piece
2231 closure but before allocating the result. */
2232 free_values.free_to_mark ();
2233 retval = allocate_computed_value (subobj_type,
2234 &pieced_value_funcs, c);
2235 set_value_offset (retval, subobj_byte_offset);
2236 }
2237 else
2238 {
2239 switch (ctx.location)
2240 {
2241 case DWARF_VALUE_REGISTER:
2242 {
2243 struct gdbarch *arch = get_frame_arch (frame);
2244 int dwarf_regnum
2245 = longest_to_int (value_as_long (ctx.fetch (0)));
2246 int gdb_regnum = dwarf_reg_to_regnum_or_error (arch, dwarf_regnum);
2247
2248 if (subobj_byte_offset != 0)
2249 error (_("cannot use offset on synthetic pointer to register"));
2250 free_values.free_to_mark ();
2251 retval = value_from_register (subobj_type, gdb_regnum, frame);
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>. */
2262 tmp = allocate_value (subobj_type);
2263 value_contents_copy (tmp, 0, retval, 0,
2264 TYPE_LENGTH (subobj_type));
2265 retval = tmp;
2266 }
2267 }
2268 break;
2269
2270 case DWARF_VALUE_MEMORY:
2271 {
2272 struct type *ptr_type;
2273 CORE_ADDR address = ctx.fetch_address (0);
2274 bool in_stack_memory = ctx.fetch_in_stack_memory (0);
2275
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
2284 switch (TYPE_CODE (subobj_type))
2285 {
2286 case TYPE_CODE_FUNC:
2287 case TYPE_CODE_METHOD:
2288 ptr_type = builtin_type (ctx.gdbarch)->builtin_func_ptr;
2289 break;
2290 default:
2291 ptr_type = builtin_type (ctx.gdbarch)->builtin_data_ptr;
2292 break;
2293 }
2294 address = value_as_address (value_from_pointer (ptr_type, address));
2295
2296 free_values.free_to_mark ();
2297 retval = value_at_lazy (subobj_type,
2298 address + subobj_byte_offset);
2299 if (in_stack_memory)
2300 set_value_stack (retval, 1);
2301 }
2302 break;
2303
2304 case DWARF_VALUE_STACK:
2305 {
2306 struct value *value = ctx.fetch (0);
2307 size_t n = TYPE_LENGTH (value_type (value));
2308 size_t len = TYPE_LENGTH (subobj_type);
2309 size_t max = TYPE_LENGTH (type);
2310 struct gdbarch *objfile_gdbarch = get_objfile_arch (objfile);
2311
2312 if (subobj_byte_offset + len > max)
2313 invalid_synthetic_pointer ();
2314
2315 /* Preserve VALUE because we are going to free values back
2316 to the mark, but we still need the value contents
2317 below. */
2318 value_ref_ptr value_holder = value_ref_ptr::new_reference (value);
2319 free_values.free_to_mark ();
2320
2321 retval = allocate_value (subobj_type);
2322
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);
2329 }
2330 break;
2331
2332 case DWARF_VALUE_LITERAL:
2333 {
2334 bfd_byte *contents;
2335 size_t n = TYPE_LENGTH (subobj_type);
2336
2337 if (subobj_byte_offset + n > ctx.len)
2338 invalid_synthetic_pointer ();
2339
2340 free_values.free_to_mark ();
2341 retval = allocate_value (subobj_type);
2342 contents = value_contents_raw (retval);
2343 memcpy (contents, ctx.data + subobj_byte_offset, n);
2344 }
2345 break;
2346
2347 case DWARF_VALUE_OPTIMIZED_OUT:
2348 free_values.free_to_mark ();
2349 retval = allocate_optimized_out_value (subobj_type);
2350 break;
2351
2352 /* DWARF_VALUE_IMPLICIT_POINTER was converted to a pieced
2353 operation by execute_stack_op. */
2354 case DWARF_VALUE_IMPLICIT_POINTER:
2355 /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context --
2356 it can only be encountered when making a piece. */
2357 default:
2358 internal_error (__FILE__, __LINE__, _("invalid location type"));
2359 }
2360 }
2361
2362 set_value_initialized (retval, ctx.initialized);
2363
2364 return retval;
2365 }
2366
2367 /* The exported interface to dwarf2_evaluate_loc_desc_full; it always
2368 passes 0 as the byte_offset. */
2369
2370 struct value *
2371 dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame,
2372 const gdb_byte *data, size_t size,
2373 struct dwarf2_per_cu_data *per_cu)
2374 {
2375 return dwarf2_evaluate_loc_desc_full (type, frame, data, size, per_cu,
2376 NULL, 0);
2377 }
2378
2379 /* Evaluates a dwarf expression and stores the result in VAL, expecting
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.
2383 Returns 1 on success, 0 otherwise. */
2384
2385 static int
2386 dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton,
2387 struct frame_info *frame,
2388 CORE_ADDR addr,
2389 CORE_ADDR *valp)
2390 {
2391 struct objfile *objfile;
2392
2393 if (dlbaton == NULL || dlbaton->size == 0)
2394 return 0;
2395
2396 dwarf_evaluate_loc_desc ctx;
2397
2398 ctx.frame = frame;
2399 ctx.per_cu = dlbaton->per_cu;
2400 ctx.obj_address = addr;
2401
2402 objfile = dlbaton->per_cu->objfile ();
2403
2404 ctx.gdbarch = get_objfile_arch (objfile);
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 ();
2408
2409 try
2410 {
2411 ctx.eval (dlbaton->data, dlbaton->size);
2412 }
2413 catch (const gdb_exception_error &ex)
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
2426 throw;
2427 }
2428
2429 switch (ctx.location)
2430 {
2431 case DWARF_VALUE_REGISTER:
2432 case DWARF_VALUE_MEMORY:
2433 case DWARF_VALUE_STACK:
2434 *valp = ctx.fetch_address (0);
2435 if (ctx.location == DWARF_VALUE_REGISTER)
2436 *valp = ctx.read_addr_from_reg (*valp);
2437 return 1;
2438 case DWARF_VALUE_LITERAL:
2439 *valp = extract_signed_integer (ctx.data, ctx.len,
2440 gdbarch_byte_order (ctx.gdbarch));
2441 return 1;
2442 /* Unsupported dwarf values. */
2443 case DWARF_VALUE_OPTIMIZED_OUT:
2444 case DWARF_VALUE_IMPLICIT_POINTER:
2445 break;
2446 }
2447
2448 return 0;
2449 }
2450
2451 /* See dwarf2loc.h. */
2452
2453 bool
2454 dwarf2_evaluate_property (const struct dynamic_prop *prop,
2455 struct frame_info *frame,
2456 const struct property_addr_info *addr_stack,
2457 CORE_ADDR *value)
2458 {
2459 if (prop == NULL)
2460 return false;
2461
2462 if (frame == NULL && has_stack_frames ())
2463 frame = get_selected_frame (NULL);
2464
2465 switch (prop->kind)
2466 {
2467 case PROP_LOCEXPR:
2468 {
2469 const struct dwarf2_property_baton *baton
2470 = (const struct dwarf2_property_baton *) prop->data.baton;
2471 gdb_assert (baton->property_type != NULL);
2472
2473 if (dwarf2_locexpr_baton_eval (&baton->locexpr, frame,
2474 addr_stack ? addr_stack->addr : 0,
2475 value))
2476 {
2477 if (baton->locexpr.is_reference)
2478 {
2479 struct value *val = value_at (baton->property_type, *value);
2480 *value = value_as_address (val);
2481 }
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
2495 = (baton->locexpr.per_cu->addr_size ()
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 }
2505 return true;
2506 }
2507 }
2508 break;
2509
2510 case PROP_LOCLIST:
2511 {
2512 struct dwarf2_property_baton *baton
2513 = (struct dwarf2_property_baton *) prop->data.baton;
2514 CORE_ADDR pc;
2515 const gdb_byte *data;
2516 struct value *val;
2517 size_t size;
2518
2519 if (frame == NULL
2520 || !get_frame_address_in_block_if_available (frame, &pc))
2521 return false;
2522
2523 data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
2524 if (data != NULL)
2525 {
2526 val = dwarf2_evaluate_loc_desc (baton->property_type, frame, data,
2527 size, baton->loclist.per_cu);
2528 if (!value_optimized_out (val))
2529 {
2530 *value = value_as_address (val);
2531 return true;
2532 }
2533 }
2534 }
2535 break;
2536
2537 case PROP_CONST:
2538 *value = prop->data.const_val;
2539 return true;
2540
2541 case PROP_ADDR_OFFSET:
2542 {
2543 struct dwarf2_property_baton *baton
2544 = (struct dwarf2_property_baton *) prop->data.baton;
2545 const struct property_addr_info *pinfo;
2546 struct value *val;
2547
2548 for (pinfo = addr_stack; pinfo != NULL; pinfo = pinfo->next)
2549 {
2550 /* This approach lets us avoid checking the qualifiers. */
2551 if (TYPE_MAIN_TYPE (pinfo->type)
2552 == TYPE_MAIN_TYPE (baton->property_type))
2553 break;
2554 }
2555 if (pinfo == NULL)
2556 error (_("cannot find reference address for offset property"));
2557 if (pinfo->valaddr != NULL)
2558 val = value_from_contents
2559 (baton->offset_info.type,
2560 pinfo->valaddr + baton->offset_info.offset);
2561 else
2562 val = value_at (baton->offset_info.type,
2563 pinfo->addr + baton->offset_info.offset);
2564 *value = value_as_address (val);
2565 return true;
2566 }
2567 }
2568
2569 return false;
2570 }
2571
2572 /* See dwarf2loc.h. */
2573
2574 void
2575 dwarf2_compile_property_to_c (string_file *stream,
2576 const char *result_name,
2577 struct gdbarch *gdbarch,
2578 unsigned char *registers_used,
2579 const struct dynamic_prop *prop,
2580 CORE_ADDR pc,
2581 struct symbol *sym)
2582 {
2583 struct dwarf2_property_baton *baton
2584 = (struct dwarf2_property_baton *) prop->data.baton;
2585 const gdb_byte *data;
2586 size_t size;
2587 struct dwarf2_per_cu_data *per_cu;
2588
2589 if (prop->kind == PROP_LOCEXPR)
2590 {
2591 data = baton->locexpr.data;
2592 size = baton->locexpr.size;
2593 per_cu = baton->locexpr.per_cu;
2594 }
2595 else
2596 {
2597 gdb_assert (prop->kind == PROP_LOCLIST);
2598
2599 data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
2600 per_cu = baton->loclist.per_cu;
2601 }
2602
2603 compile_dwarf_bounds_to_c (stream, result_name, prop, sym, pc,
2604 gdbarch, registers_used,
2605 per_cu->addr_size (),
2606 data, data + size, per_cu);
2607 }
2608
2609 \f
2610 /* Helper functions and baton for dwarf2_loc_desc_get_symbol_read_needs. */
2611
2612 class symbol_needs_eval_context : public dwarf_expr_context
2613 {
2614 public:
2615
2616 enum symbol_needs_kind needs;
2617 struct dwarf2_per_cu_data *per_cu;
2618
2619 /* Reads from registers do require a frame. */
2620 CORE_ADDR read_addr_from_reg (int regnum) override
2621 {
2622 needs = SYMBOL_NEEDS_FRAME;
2623 return 1;
2624 }
2625
2626 /* "get_reg_value" callback: Reads from registers do require a
2627 frame. */
2628
2629 struct value *get_reg_value (struct type *type, int regnum) override
2630 {
2631 needs = SYMBOL_NEEDS_FRAME;
2632 return value_zero (type, not_lval);
2633 }
2634
2635 /* Reads from memory do not require a frame. */
2636 void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override
2637 {
2638 memset (buf, 0, len);
2639 }
2640
2641 /* Frame-relative accesses do require a frame. */
2642 void get_frame_base (const gdb_byte **start, size_t *length) override
2643 {
2644 static gdb_byte lit0 = DW_OP_lit0;
2645
2646 *start = &lit0;
2647 *length = 1;
2648
2649 needs = SYMBOL_NEEDS_FRAME;
2650 }
2651
2652 /* CFA accesses require a frame. */
2653 CORE_ADDR get_frame_cfa () override
2654 {
2655 needs = SYMBOL_NEEDS_FRAME;
2656 return 1;
2657 }
2658
2659 CORE_ADDR get_frame_pc () override
2660 {
2661 needs = SYMBOL_NEEDS_FRAME;
2662 return 1;
2663 }
2664
2665 /* Thread-local accesses require registers, but not a frame. */
2666 CORE_ADDR get_tls_address (CORE_ADDR offset) override
2667 {
2668 if (needs <= SYMBOL_NEEDS_REGISTERS)
2669 needs = SYMBOL_NEEDS_REGISTERS;
2670 return 1;
2671 }
2672
2673 /* Helper interface of per_cu_dwarf_call for
2674 dwarf2_loc_desc_get_symbol_read_needs. */
2675
2676 void dwarf_call (cu_offset die_offset) override
2677 {
2678 per_cu_dwarf_call (this, die_offset, per_cu);
2679 }
2680
2681 /* Helper interface of sect_variable_value for
2682 dwarf2_loc_desc_get_symbol_read_needs. */
2683
2684 struct value *dwarf_variable_value (sect_offset sect_off) override
2685 {
2686 return sect_variable_value (this, sect_off, per_cu);
2687 }
2688
2689 /* DW_OP_entry_value accesses require a caller, therefore a
2690 frame. */
2691
2692 void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind,
2693 union call_site_parameter_u kind_u,
2694 int deref_size) override
2695 {
2696 needs = SYMBOL_NEEDS_FRAME;
2697
2698 /* The expression may require some stub values on DWARF stack. */
2699 push_address (0, 0);
2700 }
2701
2702 /* DW_OP_addrx and DW_OP_GNU_addr_index doesn't require a frame. */
2703
2704 CORE_ADDR get_addr_index (unsigned int index) override
2705 {
2706 /* Nothing to do. */
2707 return 1;
2708 }
2709
2710 /* DW_OP_push_object_address has a frame already passed through. */
2711
2712 CORE_ADDR get_object_address () override
2713 {
2714 /* Nothing to do. */
2715 return 1;
2716 }
2717 };
2718
2719 /* Compute the correct symbol_needs_kind value for the location
2720 expression at DATA (length SIZE). */
2721
2722 static enum symbol_needs_kind
2723 dwarf2_loc_desc_get_symbol_read_needs (const gdb_byte *data, size_t size,
2724 struct dwarf2_per_cu_data *per_cu)
2725 {
2726 int in_reg;
2727 struct objfile *objfile = per_cu->objfile ();
2728
2729 scoped_value_mark free_values;
2730
2731 symbol_needs_eval_context ctx;
2732
2733 ctx.needs = SYMBOL_NEEDS_NONE;
2734 ctx.per_cu = per_cu;
2735 ctx.gdbarch = get_objfile_arch (objfile);
2736 ctx.addr_size = per_cu->addr_size ();
2737 ctx.ref_addr_size = per_cu->ref_addr_size ();
2738 ctx.offset = per_cu->text_offset ();
2739
2740 ctx.eval (data, size);
2741
2742 in_reg = ctx.location == DWARF_VALUE_REGISTER;
2743
2744 /* If the location has several pieces, and any of them are in
2745 registers, then we will need a frame to fetch them from. */
2746 for (dwarf_expr_piece &p : ctx.pieces)
2747 if (p.location == DWARF_VALUE_REGISTER)
2748 in_reg = 1;
2749
2750 if (in_reg)
2751 ctx.needs = SYMBOL_NEEDS_FRAME;
2752 return ctx.needs;
2753 }
2754
2755 /* A helper function that throws an unimplemented error mentioning a
2756 given DWARF operator. */
2757
2758 static void ATTRIBUTE_NORETURN
2759 unimplemented (unsigned int op)
2760 {
2761 const char *name = get_DW_OP_name (op);
2762
2763 if (name)
2764 error (_("DWARF operator %s cannot be translated to an agent expression"),
2765 name);
2766 else
2767 error (_("Unknown DWARF operator 0x%02x cannot be translated "
2768 "to an agent expression"),
2769 op);
2770 }
2771
2772 /* See dwarf2loc.h.
2773
2774 This is basically a wrapper on gdbarch_dwarf2_reg_to_regnum so that we
2775 can issue a complaint, which is better than having every target's
2776 implementation of dwarf2_reg_to_regnum do it. */
2777
2778 int
2779 dwarf_reg_to_regnum (struct gdbarch *arch, int dwarf_reg)
2780 {
2781 int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg);
2782
2783 if (reg == -1)
2784 {
2785 complaint (_("bad DWARF register number %d"), dwarf_reg);
2786 }
2787 return reg;
2788 }
2789
2790 /* Subroutine of dwarf_reg_to_regnum_or_error to simplify it.
2791 Throw an error because DWARF_REG is bad. */
2792
2793 static void
2794 throw_bad_regnum_error (ULONGEST dwarf_reg)
2795 {
2796 /* Still want to print -1 as "-1".
2797 We *could* have int and ULONGEST versions of dwarf2_reg_to_regnum_or_error
2798 but that's overkill for now. */
2799 if ((int) dwarf_reg == dwarf_reg)
2800 error (_("Unable to access DWARF register number %d"), (int) dwarf_reg);
2801 error (_("Unable to access DWARF register number %s"),
2802 pulongest (dwarf_reg));
2803 }
2804
2805 /* See dwarf2loc.h. */
2806
2807 int
2808 dwarf_reg_to_regnum_or_error (struct gdbarch *arch, ULONGEST dwarf_reg)
2809 {
2810 int reg;
2811
2812 if (dwarf_reg > INT_MAX)
2813 throw_bad_regnum_error (dwarf_reg);
2814 /* Yes, we will end up issuing a complaint and an error if DWARF_REG is
2815 bad, but that's ok. */
2816 reg = dwarf_reg_to_regnum (arch, (int) dwarf_reg);
2817 if (reg == -1)
2818 throw_bad_regnum_error (dwarf_reg);
2819 return reg;
2820 }
2821
2822 /* A helper function that emits an access to memory. ARCH is the
2823 target architecture. EXPR is the expression which we are building.
2824 NBITS is the number of bits we want to read. This emits the
2825 opcodes needed to read the memory and then extract the desired
2826 bits. */
2827
2828 static void
2829 access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits)
2830 {
2831 ULONGEST nbytes = (nbits + 7) / 8;
2832
2833 gdb_assert (nbytes > 0 && nbytes <= sizeof (LONGEST));
2834
2835 if (expr->tracing)
2836 ax_trace_quick (expr, nbytes);
2837
2838 if (nbits <= 8)
2839 ax_simple (expr, aop_ref8);
2840 else if (nbits <= 16)
2841 ax_simple (expr, aop_ref16);
2842 else if (nbits <= 32)
2843 ax_simple (expr, aop_ref32);
2844 else
2845 ax_simple (expr, aop_ref64);
2846
2847 /* If we read exactly the number of bytes we wanted, we're done. */
2848 if (8 * nbytes == nbits)
2849 return;
2850
2851 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
2852 {
2853 /* On a bits-big-endian machine, we want the high-order
2854 NBITS. */
2855 ax_const_l (expr, 8 * nbytes - nbits);
2856 ax_simple (expr, aop_rsh_unsigned);
2857 }
2858 else
2859 {
2860 /* On a bits-little-endian box, we want the low-order NBITS. */
2861 ax_zero_ext (expr, nbits);
2862 }
2863 }
2864
2865 /* A helper function to return the frame's PC. */
2866
2867 static CORE_ADDR
2868 get_ax_pc (void *baton)
2869 {
2870 struct agent_expr *expr = (struct agent_expr *) baton;
2871
2872 return expr->scope;
2873 }
2874
2875 /* Compile a DWARF location expression to an agent expression.
2876
2877 EXPR is the agent expression we are building.
2878 LOC is the agent value we modify.
2879 ARCH is the architecture.
2880 ADDR_SIZE is the size of addresses, in bytes.
2881 OP_PTR is the start of the location expression.
2882 OP_END is one past the last byte of the location expression.
2883
2884 This will throw an exception for various kinds of errors -- for
2885 example, if the expression cannot be compiled, or if the expression
2886 is invalid. */
2887
2888 static void
2889 dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
2890 unsigned int addr_size, const gdb_byte *op_ptr,
2891 const gdb_byte *op_end,
2892 struct dwarf2_per_cu_data *per_cu)
2893 {
2894 gdbarch *arch = expr->gdbarch;
2895 std::vector<int> dw_labels, patches;
2896 const gdb_byte * const base = op_ptr;
2897 const gdb_byte *previous_piece = op_ptr;
2898 enum bfd_endian byte_order = gdbarch_byte_order (arch);
2899 ULONGEST bits_collected = 0;
2900 unsigned int addr_size_bits = 8 * addr_size;
2901 bool bits_big_endian = byte_order == BFD_ENDIAN_BIG;
2902
2903 std::vector<int> offsets (op_end - op_ptr, -1);
2904
2905 /* By default we are making an address. */
2906 loc->kind = axs_lvalue_memory;
2907
2908 while (op_ptr < op_end)
2909 {
2910 enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr;
2911 uint64_t uoffset, reg;
2912 int64_t offset;
2913 int i;
2914
2915 offsets[op_ptr - base] = expr->len;
2916 ++op_ptr;
2917
2918 /* Our basic approach to code generation is to map DWARF
2919 operations directly to AX operations. However, there are
2920 some differences.
2921
2922 First, DWARF works on address-sized units, but AX always uses
2923 LONGEST. For most operations we simply ignore this
2924 difference; instead we generate sign extensions as needed
2925 before division and comparison operations. It would be nice
2926 to omit the sign extensions, but there is no way to determine
2927 the size of the target's LONGEST. (This code uses the size
2928 of the host LONGEST in some cases -- that is a bug but it is
2929 difficult to fix.)
2930
2931 Second, some DWARF operations cannot be translated to AX.
2932 For these we simply fail. See
2933 http://sourceware.org/bugzilla/show_bug.cgi?id=11662. */
2934 switch (op)
2935 {
2936 case DW_OP_lit0:
2937 case DW_OP_lit1:
2938 case DW_OP_lit2:
2939 case DW_OP_lit3:
2940 case DW_OP_lit4:
2941 case DW_OP_lit5:
2942 case DW_OP_lit6:
2943 case DW_OP_lit7:
2944 case DW_OP_lit8:
2945 case DW_OP_lit9:
2946 case DW_OP_lit10:
2947 case DW_OP_lit11:
2948 case DW_OP_lit12:
2949 case DW_OP_lit13:
2950 case DW_OP_lit14:
2951 case DW_OP_lit15:
2952 case DW_OP_lit16:
2953 case DW_OP_lit17:
2954 case DW_OP_lit18:
2955 case DW_OP_lit19:
2956 case DW_OP_lit20:
2957 case DW_OP_lit21:
2958 case DW_OP_lit22:
2959 case DW_OP_lit23:
2960 case DW_OP_lit24:
2961 case DW_OP_lit25:
2962 case DW_OP_lit26:
2963 case DW_OP_lit27:
2964 case DW_OP_lit28:
2965 case DW_OP_lit29:
2966 case DW_OP_lit30:
2967 case DW_OP_lit31:
2968 ax_const_l (expr, op - DW_OP_lit0);
2969 break;
2970
2971 case DW_OP_addr:
2972 uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order);
2973 op_ptr += addr_size;
2974 /* Some versions of GCC emit DW_OP_addr before
2975 DW_OP_GNU_push_tls_address. In this case the value is an
2976 index, not an address. We don't support things like
2977 branching between the address and the TLS op. */
2978 if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
2979 uoffset += per_cu->text_offset ();
2980 ax_const_l (expr, uoffset);
2981 break;
2982
2983 case DW_OP_const1u:
2984 ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order));
2985 op_ptr += 1;
2986 break;
2987 case DW_OP_const1s:
2988 ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order));
2989 op_ptr += 1;
2990 break;
2991 case DW_OP_const2u:
2992 ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order));
2993 op_ptr += 2;
2994 break;
2995 case DW_OP_const2s:
2996 ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order));
2997 op_ptr += 2;
2998 break;
2999 case DW_OP_const4u:
3000 ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order));
3001 op_ptr += 4;
3002 break;
3003 case DW_OP_const4s:
3004 ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order));
3005 op_ptr += 4;
3006 break;
3007 case DW_OP_const8u:
3008 ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order));
3009 op_ptr += 8;
3010 break;
3011 case DW_OP_const8s:
3012 ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order));
3013 op_ptr += 8;
3014 break;
3015 case DW_OP_constu:
3016 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
3017 ax_const_l (expr, uoffset);
3018 break;
3019 case DW_OP_consts:
3020 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
3021 ax_const_l (expr, offset);
3022 break;
3023
3024 case DW_OP_reg0:
3025 case DW_OP_reg1:
3026 case DW_OP_reg2:
3027 case DW_OP_reg3:
3028 case DW_OP_reg4:
3029 case DW_OP_reg5:
3030 case DW_OP_reg6:
3031 case DW_OP_reg7:
3032 case DW_OP_reg8:
3033 case DW_OP_reg9:
3034 case DW_OP_reg10:
3035 case DW_OP_reg11:
3036 case DW_OP_reg12:
3037 case DW_OP_reg13:
3038 case DW_OP_reg14:
3039 case DW_OP_reg15:
3040 case DW_OP_reg16:
3041 case DW_OP_reg17:
3042 case DW_OP_reg18:
3043 case DW_OP_reg19:
3044 case DW_OP_reg20:
3045 case DW_OP_reg21:
3046 case DW_OP_reg22:
3047 case DW_OP_reg23:
3048 case DW_OP_reg24:
3049 case DW_OP_reg25:
3050 case DW_OP_reg26:
3051 case DW_OP_reg27:
3052 case DW_OP_reg28:
3053 case DW_OP_reg29:
3054 case DW_OP_reg30:
3055 case DW_OP_reg31:
3056 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
3057 loc->u.reg = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_reg0);
3058 loc->kind = axs_lvalue_register;
3059 break;
3060
3061 case DW_OP_regx:
3062 op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
3063 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
3064 loc->u.reg = dwarf_reg_to_regnum_or_error (arch, reg);
3065 loc->kind = axs_lvalue_register;
3066 break;
3067
3068 case DW_OP_implicit_value:
3069 {
3070 uint64_t len;
3071
3072 op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
3073 if (op_ptr + len > op_end)
3074 error (_("DW_OP_implicit_value: too few bytes available."));
3075 if (len > sizeof (ULONGEST))
3076 error (_("Cannot translate DW_OP_implicit_value of %d bytes"),
3077 (int) len);
3078
3079 ax_const_l (expr, extract_unsigned_integer (op_ptr, len,
3080 byte_order));
3081 op_ptr += len;
3082 dwarf_expr_require_composition (op_ptr, op_end,
3083 "DW_OP_implicit_value");
3084
3085 loc->kind = axs_rvalue;
3086 }
3087 break;
3088
3089 case DW_OP_stack_value:
3090 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
3091 loc->kind = axs_rvalue;
3092 break;
3093
3094 case DW_OP_breg0:
3095 case DW_OP_breg1:
3096 case DW_OP_breg2:
3097 case DW_OP_breg3:
3098 case DW_OP_breg4:
3099 case DW_OP_breg5:
3100 case DW_OP_breg6:
3101 case DW_OP_breg7:
3102 case DW_OP_breg8:
3103 case DW_OP_breg9:
3104 case DW_OP_breg10:
3105 case DW_OP_breg11:
3106 case DW_OP_breg12:
3107 case DW_OP_breg13:
3108 case DW_OP_breg14:
3109 case DW_OP_breg15:
3110 case DW_OP_breg16:
3111 case DW_OP_breg17:
3112 case DW_OP_breg18:
3113 case DW_OP_breg19:
3114 case DW_OP_breg20:
3115 case DW_OP_breg21:
3116 case DW_OP_breg22:
3117 case DW_OP_breg23:
3118 case DW_OP_breg24:
3119 case DW_OP_breg25:
3120 case DW_OP_breg26:
3121 case DW_OP_breg27:
3122 case DW_OP_breg28:
3123 case DW_OP_breg29:
3124 case DW_OP_breg30:
3125 case DW_OP_breg31:
3126 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
3127 i = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_breg0);
3128 ax_reg (expr, i);
3129 if (offset != 0)
3130 {
3131 ax_const_l (expr, offset);
3132 ax_simple (expr, aop_add);
3133 }
3134 break;
3135 case DW_OP_bregx:
3136 {
3137 op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
3138 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
3139 i = dwarf_reg_to_regnum_or_error (arch, reg);
3140 ax_reg (expr, i);
3141 if (offset != 0)
3142 {
3143 ax_const_l (expr, offset);
3144 ax_simple (expr, aop_add);
3145 }
3146 }
3147 break;
3148 case DW_OP_fbreg:
3149 {
3150 const gdb_byte *datastart;
3151 size_t datalen;
3152 const struct block *b;
3153 struct symbol *framefunc;
3154
3155 b = block_for_pc (expr->scope);
3156
3157 if (!b)
3158 error (_("No block found for address"));
3159
3160 framefunc = block_linkage_function (b);
3161
3162 if (!framefunc)
3163 error (_("No function found for block"));
3164
3165 func_get_frame_base_dwarf_block (framefunc, expr->scope,
3166 &datastart, &datalen);
3167
3168 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
3169 dwarf2_compile_expr_to_ax (expr, loc, addr_size, datastart,
3170 datastart + datalen, per_cu);
3171 if (loc->kind == axs_lvalue_register)
3172 require_rvalue (expr, loc);
3173
3174 if (offset != 0)
3175 {
3176 ax_const_l (expr, offset);
3177 ax_simple (expr, aop_add);
3178 }
3179
3180 loc->kind = axs_lvalue_memory;
3181 }
3182 break;
3183
3184 case DW_OP_dup:
3185 ax_simple (expr, aop_dup);
3186 break;
3187
3188 case DW_OP_drop:
3189 ax_simple (expr, aop_pop);
3190 break;
3191
3192 case DW_OP_pick:
3193 offset = *op_ptr++;
3194 ax_pick (expr, offset);
3195 break;
3196
3197 case DW_OP_swap:
3198 ax_simple (expr, aop_swap);
3199 break;
3200
3201 case DW_OP_over:
3202 ax_pick (expr, 1);
3203 break;
3204
3205 case DW_OP_rot:
3206 ax_simple (expr, aop_rot);
3207 break;
3208
3209 case DW_OP_deref:
3210 case DW_OP_deref_size:
3211 {
3212 int size;
3213
3214 if (op == DW_OP_deref_size)
3215 size = *op_ptr++;
3216 else
3217 size = addr_size;
3218
3219 if (size != 1 && size != 2 && size != 4 && size != 8)
3220 error (_("Unsupported size %d in %s"),
3221 size, get_DW_OP_name (op));
3222 access_memory (arch, expr, size * TARGET_CHAR_BIT);
3223 }
3224 break;
3225
3226 case DW_OP_abs:
3227 /* Sign extend the operand. */
3228 ax_ext (expr, addr_size_bits);
3229 ax_simple (expr, aop_dup);
3230 ax_const_l (expr, 0);
3231 ax_simple (expr, aop_less_signed);
3232 ax_simple (expr, aop_log_not);
3233 i = ax_goto (expr, aop_if_goto);
3234 /* We have to emit 0 - X. */
3235 ax_const_l (expr, 0);
3236 ax_simple (expr, aop_swap);
3237 ax_simple (expr, aop_sub);
3238 ax_label (expr, i, expr->len);
3239 break;
3240
3241 case DW_OP_neg:
3242 /* No need to sign extend here. */
3243 ax_const_l (expr, 0);
3244 ax_simple (expr, aop_swap);
3245 ax_simple (expr, aop_sub);
3246 break;
3247
3248 case DW_OP_not:
3249 /* Sign extend the operand. */
3250 ax_ext (expr, addr_size_bits);
3251 ax_simple (expr, aop_bit_not);
3252 break;
3253
3254 case DW_OP_plus_uconst:
3255 op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
3256 /* It would be really weird to emit `DW_OP_plus_uconst 0',
3257 but we micro-optimize anyhow. */
3258 if (reg != 0)
3259 {
3260 ax_const_l (expr, reg);
3261 ax_simple (expr, aop_add);
3262 }
3263 break;
3264
3265 case DW_OP_and:
3266 ax_simple (expr, aop_bit_and);
3267 break;
3268
3269 case DW_OP_div:
3270 /* Sign extend the operands. */
3271 ax_ext (expr, addr_size_bits);
3272 ax_simple (expr, aop_swap);
3273 ax_ext (expr, addr_size_bits);
3274 ax_simple (expr, aop_swap);
3275 ax_simple (expr, aop_div_signed);
3276 break;
3277
3278 case DW_OP_minus:
3279 ax_simple (expr, aop_sub);
3280 break;
3281
3282 case DW_OP_mod:
3283 ax_simple (expr, aop_rem_unsigned);
3284 break;
3285
3286 case DW_OP_mul:
3287 ax_simple (expr, aop_mul);
3288 break;
3289
3290 case DW_OP_or:
3291 ax_simple (expr, aop_bit_or);
3292 break;
3293
3294 case DW_OP_plus:
3295 ax_simple (expr, aop_add);
3296 break;
3297
3298 case DW_OP_shl:
3299 ax_simple (expr, aop_lsh);
3300 break;
3301
3302 case DW_OP_shr:
3303 ax_simple (expr, aop_rsh_unsigned);
3304 break;
3305
3306 case DW_OP_shra:
3307 ax_simple (expr, aop_rsh_signed);
3308 break;
3309
3310 case DW_OP_xor:
3311 ax_simple (expr, aop_bit_xor);
3312 break;
3313
3314 case DW_OP_le:
3315 /* Sign extend the operands. */
3316 ax_ext (expr, addr_size_bits);
3317 ax_simple (expr, aop_swap);
3318 ax_ext (expr, addr_size_bits);
3319 /* Note no swap here: A <= B is !(B < A). */
3320 ax_simple (expr, aop_less_signed);
3321 ax_simple (expr, aop_log_not);
3322 break;
3323
3324 case DW_OP_ge:
3325 /* Sign extend the operands. */
3326 ax_ext (expr, addr_size_bits);
3327 ax_simple (expr, aop_swap);
3328 ax_ext (expr, addr_size_bits);
3329 ax_simple (expr, aop_swap);
3330 /* A >= B is !(A < B). */
3331 ax_simple (expr, aop_less_signed);
3332 ax_simple (expr, aop_log_not);
3333 break;
3334
3335 case DW_OP_eq:
3336 /* Sign extend the operands. */
3337 ax_ext (expr, addr_size_bits);
3338 ax_simple (expr, aop_swap);
3339 ax_ext (expr, addr_size_bits);
3340 /* No need for a second swap here. */
3341 ax_simple (expr, aop_equal);
3342 break;
3343
3344 case DW_OP_lt:
3345 /* Sign extend the operands. */
3346 ax_ext (expr, addr_size_bits);
3347 ax_simple (expr, aop_swap);
3348 ax_ext (expr, addr_size_bits);
3349 ax_simple (expr, aop_swap);
3350 ax_simple (expr, aop_less_signed);
3351 break;
3352
3353 case DW_OP_gt:
3354 /* Sign extend the operands. */
3355 ax_ext (expr, addr_size_bits);
3356 ax_simple (expr, aop_swap);
3357 ax_ext (expr, addr_size_bits);
3358 /* Note no swap here: A > B is B < A. */
3359 ax_simple (expr, aop_less_signed);
3360 break;
3361
3362 case DW_OP_ne:
3363 /* Sign extend the operands. */
3364 ax_ext (expr, addr_size_bits);
3365 ax_simple (expr, aop_swap);
3366 ax_ext (expr, addr_size_bits);
3367 /* No need for a swap here. */
3368 ax_simple (expr, aop_equal);
3369 ax_simple (expr, aop_log_not);
3370 break;
3371
3372 case DW_OP_call_frame_cfa:
3373 {
3374 int regnum;
3375 CORE_ADDR text_offset;
3376 LONGEST off;
3377 const gdb_byte *cfa_start, *cfa_end;
3378
3379 if (dwarf2_fetch_cfa_info (arch, expr->scope, per_cu,
3380 &regnum, &off,
3381 &text_offset, &cfa_start, &cfa_end))
3382 {
3383 /* Register. */
3384 ax_reg (expr, regnum);
3385 if (off != 0)
3386 {
3387 ax_const_l (expr, off);
3388 ax_simple (expr, aop_add);
3389 }
3390 }
3391 else
3392 {
3393 /* Another expression. */
3394 ax_const_l (expr, text_offset);
3395 dwarf2_compile_expr_to_ax (expr, loc, addr_size, cfa_start,
3396 cfa_end, per_cu);
3397 }
3398
3399 loc->kind = axs_lvalue_memory;
3400 }
3401 break;
3402
3403 case DW_OP_GNU_push_tls_address:
3404 case DW_OP_form_tls_address:
3405 unimplemented (op);
3406 break;
3407
3408 case DW_OP_push_object_address:
3409 unimplemented (op);
3410 break;
3411
3412 case DW_OP_skip:
3413 offset = extract_signed_integer (op_ptr, 2, byte_order);
3414 op_ptr += 2;
3415 i = ax_goto (expr, aop_goto);
3416 dw_labels.push_back (op_ptr + offset - base);
3417 patches.push_back (i);
3418 break;
3419
3420 case DW_OP_bra:
3421 offset = extract_signed_integer (op_ptr, 2, byte_order);
3422 op_ptr += 2;
3423 /* Zero extend the operand. */
3424 ax_zero_ext (expr, addr_size_bits);
3425 i = ax_goto (expr, aop_if_goto);
3426 dw_labels.push_back (op_ptr + offset - base);
3427 patches.push_back (i);
3428 break;
3429
3430 case DW_OP_nop:
3431 break;
3432
3433 case DW_OP_piece:
3434 case DW_OP_bit_piece:
3435 {
3436 uint64_t size;
3437
3438 if (op_ptr - 1 == previous_piece)
3439 error (_("Cannot translate empty pieces to agent expressions"));
3440 previous_piece = op_ptr - 1;
3441
3442 op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
3443 if (op == DW_OP_piece)
3444 {
3445 size *= 8;
3446 uoffset = 0;
3447 }
3448 else
3449 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
3450
3451 if (bits_collected + size > 8 * sizeof (LONGEST))
3452 error (_("Expression pieces exceed word size"));
3453
3454 /* Access the bits. */
3455 switch (loc->kind)
3456 {
3457 case axs_lvalue_register:
3458 ax_reg (expr, loc->u.reg);
3459 break;
3460
3461 case axs_lvalue_memory:
3462 /* Offset the pointer, if needed. */
3463 if (uoffset > 8)
3464 {
3465 ax_const_l (expr, uoffset / 8);
3466 ax_simple (expr, aop_add);
3467 uoffset %= 8;
3468 }
3469 access_memory (arch, expr, size);
3470 break;
3471 }
3472
3473 /* For a bits-big-endian target, shift up what we already
3474 have. For a bits-little-endian target, shift up the
3475 new data. Note that there is a potential bug here if
3476 the DWARF expression leaves multiple values on the
3477 stack. */
3478 if (bits_collected > 0)
3479 {
3480 if (bits_big_endian)
3481 {
3482 ax_simple (expr, aop_swap);
3483 ax_const_l (expr, size);
3484 ax_simple (expr, aop_lsh);
3485 /* We don't need a second swap here, because
3486 aop_bit_or is symmetric. */
3487 }
3488 else
3489 {
3490 ax_const_l (expr, size);
3491 ax_simple (expr, aop_lsh);
3492 }
3493 ax_simple (expr, aop_bit_or);
3494 }
3495
3496 bits_collected += size;
3497 loc->kind = axs_rvalue;
3498 }
3499 break;
3500
3501 case DW_OP_GNU_uninit:
3502 unimplemented (op);
3503
3504 case DW_OP_call2:
3505 case DW_OP_call4:
3506 {
3507 struct dwarf2_locexpr_baton block;
3508 int size = (op == DW_OP_call2 ? 2 : 4);
3509
3510 uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
3511 op_ptr += size;
3512
3513 cu_offset cuoffset = (cu_offset) uoffset;
3514 block = dwarf2_fetch_die_loc_cu_off (cuoffset, per_cu,
3515 get_ax_pc, expr);
3516
3517 /* DW_OP_call_ref is currently not supported. */
3518 gdb_assert (block.per_cu == per_cu);
3519
3520 dwarf2_compile_expr_to_ax (expr, loc, addr_size, block.data,
3521 block.data + block.size, per_cu);
3522 }
3523 break;
3524
3525 case DW_OP_call_ref:
3526 unimplemented (op);
3527
3528 case DW_OP_GNU_variable_value:
3529 unimplemented (op);
3530
3531 default:
3532 unimplemented (op);
3533 }
3534 }
3535
3536 /* Patch all the branches we emitted. */
3537 for (int i = 0; i < patches.size (); ++i)
3538 {
3539 int targ = offsets[dw_labels[i]];
3540 if (targ == -1)
3541 internal_error (__FILE__, __LINE__, _("invalid label"));
3542 ax_label (expr, patches[i], targ);
3543 }
3544 }
3545
3546 \f
3547 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
3548 evaluator to calculate the location. */
3549 static struct value *
3550 locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
3551 {
3552 struct dwarf2_locexpr_baton *dlbaton
3553 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
3554 struct value *val;
3555
3556 val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
3557 dlbaton->size, dlbaton->per_cu);
3558
3559 return val;
3560 }
3561
3562 /* Return the value of SYMBOL in FRAME at (callee) FRAME's function
3563 entry. SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
3564 will be thrown. */
3565
3566 static struct value *
3567 locexpr_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
3568 {
3569 struct dwarf2_locexpr_baton *dlbaton
3570 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
3571
3572 return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, dlbaton->data,
3573 dlbaton->size);
3574 }
3575
3576 /* Implementation of get_symbol_read_needs from
3577 symbol_computed_ops. */
3578
3579 static enum symbol_needs_kind
3580 locexpr_get_symbol_read_needs (struct symbol *symbol)
3581 {
3582 struct dwarf2_locexpr_baton *dlbaton
3583 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
3584
3585 return dwarf2_loc_desc_get_symbol_read_needs (dlbaton->data, dlbaton->size,
3586 dlbaton->per_cu);
3587 }
3588
3589 /* Return true if DATA points to the end of a piece. END is one past
3590 the last byte in the expression. */
3591
3592 static int
3593 piece_end_p (const gdb_byte *data, const gdb_byte *end)
3594 {
3595 return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece;
3596 }
3597
3598 /* Helper for locexpr_describe_location_piece that finds the name of a
3599 DWARF register. */
3600
3601 static const char *
3602 locexpr_regname (struct gdbarch *gdbarch, int dwarf_regnum)
3603 {
3604 int regnum;
3605
3606 /* This doesn't use dwarf_reg_to_regnum_or_error on purpose.
3607 We'd rather print *something* here than throw an error. */
3608 regnum = dwarf_reg_to_regnum (gdbarch, dwarf_regnum);
3609 /* gdbarch_register_name may just return "", return something more
3610 descriptive for bad register numbers. */
3611 if (regnum == -1)
3612 {
3613 /* The text is output as "$bad_register_number".
3614 That is why we use the underscores. */
3615 return _("bad_register_number");
3616 }
3617 return gdbarch_register_name (gdbarch, regnum);
3618 }
3619
3620 /* Nicely describe a single piece of a location, returning an updated
3621 position in the bytecode sequence. This function cannot recognize
3622 all locations; if a location is not recognized, it simply returns
3623 DATA. If there is an error during reading, e.g. we run off the end
3624 of the buffer, an error is thrown. */
3625
3626 static const gdb_byte *
3627 locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
3628 CORE_ADDR addr, struct objfile *objfile,
3629 struct dwarf2_per_cu_data *per_cu,
3630 const gdb_byte *data, const gdb_byte *end,
3631 unsigned int addr_size)
3632 {
3633 struct gdbarch *gdbarch = get_objfile_arch (objfile);
3634 size_t leb128_size;
3635
3636 if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
3637 {
3638 fprintf_filtered (stream, _("a variable in $%s"),
3639 locexpr_regname (gdbarch, data[0] - DW_OP_reg0));
3640 data += 1;
3641 }
3642 else if (data[0] == DW_OP_regx)
3643 {
3644 uint64_t reg;
3645
3646 data = safe_read_uleb128 (data + 1, end, &reg);
3647 fprintf_filtered (stream, _("a variable in $%s"),
3648 locexpr_regname (gdbarch, reg));
3649 }
3650 else if (data[0] == DW_OP_fbreg)
3651 {
3652 const struct block *b;
3653 struct symbol *framefunc;
3654 int frame_reg = 0;
3655 int64_t frame_offset;
3656 const gdb_byte *base_data, *new_data, *save_data = data;
3657 size_t base_size;
3658 int64_t base_offset = 0;
3659
3660 new_data = safe_read_sleb128 (data + 1, end, &frame_offset);
3661 if (!piece_end_p (new_data, end))
3662 return data;
3663 data = new_data;
3664
3665 b = block_for_pc (addr);
3666
3667 if (!b)
3668 error (_("No block found for address for symbol \"%s\"."),
3669 symbol->print_name ());
3670
3671 framefunc = block_linkage_function (b);
3672
3673 if (!framefunc)
3674 error (_("No function found for block for symbol \"%s\"."),
3675 symbol->print_name ());
3676
3677 func_get_frame_base_dwarf_block (framefunc, addr, &base_data, &base_size);
3678
3679 if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
3680 {
3681 const gdb_byte *buf_end;
3682
3683 frame_reg = base_data[0] - DW_OP_breg0;
3684 buf_end = safe_read_sleb128 (base_data + 1, base_data + base_size,
3685 &base_offset);
3686 if (buf_end != base_data + base_size)
3687 error (_("Unexpected opcode after "
3688 "DW_OP_breg%u for symbol \"%s\"."),
3689 frame_reg, symbol->print_name ());
3690 }
3691 else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
3692 {
3693 /* The frame base is just the register, with no offset. */
3694 frame_reg = base_data[0] - DW_OP_reg0;
3695 base_offset = 0;
3696 }
3697 else
3698 {
3699 /* We don't know what to do with the frame base expression,
3700 so we can't trace this variable; give up. */
3701 return save_data;
3702 }
3703
3704 fprintf_filtered (stream,
3705 _("a variable at frame base reg $%s offset %s+%s"),
3706 locexpr_regname (gdbarch, frame_reg),
3707 plongest (base_offset), plongest (frame_offset));
3708 }
3709 else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
3710 && piece_end_p (data, end))
3711 {
3712 int64_t offset;
3713
3714 data = safe_read_sleb128 (data + 1, end, &offset);
3715
3716 fprintf_filtered (stream,
3717 _("a variable at offset %s from base reg $%s"),
3718 plongest (offset),
3719 locexpr_regname (gdbarch, data[0] - DW_OP_breg0));
3720 }
3721
3722 /* The location expression for a TLS variable looks like this (on a
3723 64-bit LE machine):
3724
3725 DW_AT_location : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
3726 (DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
3727
3728 0x3 is the encoding for DW_OP_addr, which has an operand as long
3729 as the size of an address on the target machine (here is 8
3730 bytes). Note that more recent version of GCC emit DW_OP_const4u
3731 or DW_OP_const8u, depending on address size, rather than
3732 DW_OP_addr. 0xe0 is the encoding for DW_OP_GNU_push_tls_address.
3733 The operand represents the offset at which the variable is within
3734 the thread local storage. */
3735
3736 else if (data + 1 + addr_size < end
3737 && (data[0] == DW_OP_addr
3738 || (addr_size == 4 && data[0] == DW_OP_const4u)
3739 || (addr_size == 8 && data[0] == DW_OP_const8u))
3740 && (data[1 + addr_size] == DW_OP_GNU_push_tls_address
3741 || data[1 + addr_size] == DW_OP_form_tls_address)
3742 && piece_end_p (data + 2 + addr_size, end))
3743 {
3744 ULONGEST offset;
3745 offset = extract_unsigned_integer (data + 1, addr_size,
3746 gdbarch_byte_order (gdbarch));
3747
3748 fprintf_filtered (stream,
3749 _("a thread-local variable at offset 0x%s "
3750 "in the thread-local storage for `%s'"),
3751 phex_nz (offset, addr_size), objfile_name (objfile));
3752
3753 data += 1 + addr_size + 1;
3754 }
3755
3756 /* With -gsplit-dwarf a TLS variable can also look like this:
3757 DW_AT_location : 3 byte block: fc 4 e0
3758 (DW_OP_GNU_const_index: 4;
3759 DW_OP_GNU_push_tls_address) */
3760 else if (data + 3 <= end
3761 && data + 1 + (leb128_size = skip_leb128 (data + 1, end)) < end
3762 && data[0] == DW_OP_GNU_const_index
3763 && leb128_size > 0
3764 && (data[1 + leb128_size] == DW_OP_GNU_push_tls_address
3765 || data[1 + leb128_size] == DW_OP_form_tls_address)
3766 && piece_end_p (data + 2 + leb128_size, end))
3767 {
3768 uint64_t offset;
3769
3770 data = safe_read_uleb128 (data + 1, end, &offset);
3771 offset = dwarf2_read_addr_index (per_cu, offset);
3772 fprintf_filtered (stream,
3773 _("a thread-local variable at offset 0x%s "
3774 "in the thread-local storage for `%s'"),
3775 phex_nz (offset, addr_size), objfile_name (objfile));
3776 ++data;
3777 }
3778
3779 else if (data[0] >= DW_OP_lit0
3780 && data[0] <= DW_OP_lit31
3781 && data + 1 < end
3782 && data[1] == DW_OP_stack_value)
3783 {
3784 fprintf_filtered (stream, _("the constant %d"), data[0] - DW_OP_lit0);
3785 data += 2;
3786 }
3787
3788 return data;
3789 }
3790
3791 /* Disassemble an expression, stopping at the end of a piece or at the
3792 end of the expression. Returns a pointer to the next unread byte
3793 in the input expression. If ALL is nonzero, then this function
3794 will keep going until it reaches the end of the expression.
3795 If there is an error during reading, e.g. we run off the end
3796 of the buffer, an error is thrown. */
3797
3798 static const gdb_byte *
3799 disassemble_dwarf_expression (struct ui_file *stream,
3800 struct gdbarch *arch, unsigned int addr_size,
3801 int offset_size, const gdb_byte *start,
3802 const gdb_byte *data, const gdb_byte *end,
3803 int indent, int all,
3804 struct dwarf2_per_cu_data *per_cu)
3805 {
3806 while (data < end
3807 && (all
3808 || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
3809 {
3810 enum dwarf_location_atom op = (enum dwarf_location_atom) *data++;
3811 uint64_t ul;
3812 int64_t l;
3813 const char *name;
3814
3815 name = get_DW_OP_name (op);
3816
3817 if (!name)
3818 error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
3819 op, (long) (data - 1 - start));
3820 fprintf_filtered (stream, " %*ld: %s", indent + 4,
3821 (long) (data - 1 - start), name);
3822
3823 switch (op)
3824 {
3825 case DW_OP_addr:
3826 ul = extract_unsigned_integer (data, addr_size,
3827 gdbarch_byte_order (arch));
3828 data += addr_size;
3829 fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
3830 break;
3831
3832 case DW_OP_const1u:
3833 ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch));
3834 data += 1;
3835 fprintf_filtered (stream, " %s", pulongest (ul));
3836 break;
3837 case DW_OP_const1s:
3838 l = extract_signed_integer (data, 1, gdbarch_byte_order (arch));
3839 data += 1;
3840 fprintf_filtered (stream, " %s", plongest (l));
3841 break;
3842 case DW_OP_const2u:
3843 ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
3844 data += 2;
3845 fprintf_filtered (stream, " %s", pulongest (ul));
3846 break;
3847 case DW_OP_const2s:
3848 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3849 data += 2;
3850 fprintf_filtered (stream, " %s", plongest (l));
3851 break;
3852 case DW_OP_const4u:
3853 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
3854 data += 4;
3855 fprintf_filtered (stream, " %s", pulongest (ul));
3856 break;
3857 case DW_OP_const4s:
3858 l = extract_signed_integer (data, 4, gdbarch_byte_order (arch));
3859 data += 4;
3860 fprintf_filtered (stream, " %s", plongest (l));
3861 break;
3862 case DW_OP_const8u:
3863 ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch));
3864 data += 8;
3865 fprintf_filtered (stream, " %s", pulongest (ul));
3866 break;
3867 case DW_OP_const8s:
3868 l = extract_signed_integer (data, 8, gdbarch_byte_order (arch));
3869 data += 8;
3870 fprintf_filtered (stream, " %s", plongest (l));
3871 break;
3872 case DW_OP_constu:
3873 data = safe_read_uleb128 (data, end, &ul);
3874 fprintf_filtered (stream, " %s", pulongest (ul));
3875 break;
3876 case DW_OP_consts:
3877 data = safe_read_sleb128 (data, end, &l);
3878 fprintf_filtered (stream, " %s", plongest (l));
3879 break;
3880
3881 case DW_OP_reg0:
3882 case DW_OP_reg1:
3883 case DW_OP_reg2:
3884 case DW_OP_reg3:
3885 case DW_OP_reg4:
3886 case DW_OP_reg5:
3887 case DW_OP_reg6:
3888 case DW_OP_reg7:
3889 case DW_OP_reg8:
3890 case DW_OP_reg9:
3891 case DW_OP_reg10:
3892 case DW_OP_reg11:
3893 case DW_OP_reg12:
3894 case DW_OP_reg13:
3895 case DW_OP_reg14:
3896 case DW_OP_reg15:
3897 case DW_OP_reg16:
3898 case DW_OP_reg17:
3899 case DW_OP_reg18:
3900 case DW_OP_reg19:
3901 case DW_OP_reg20:
3902 case DW_OP_reg21:
3903 case DW_OP_reg22:
3904 case DW_OP_reg23:
3905 case DW_OP_reg24:
3906 case DW_OP_reg25:
3907 case DW_OP_reg26:
3908 case DW_OP_reg27:
3909 case DW_OP_reg28:
3910 case DW_OP_reg29:
3911 case DW_OP_reg30:
3912 case DW_OP_reg31:
3913 fprintf_filtered (stream, " [$%s]",
3914 locexpr_regname (arch, op - DW_OP_reg0));
3915 break;
3916
3917 case DW_OP_regx:
3918 data = safe_read_uleb128 (data, end, &ul);
3919 fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
3920 locexpr_regname (arch, (int) ul));
3921 break;
3922
3923 case DW_OP_implicit_value:
3924 data = safe_read_uleb128 (data, end, &ul);
3925 data += ul;
3926 fprintf_filtered (stream, " %s", pulongest (ul));
3927 break;
3928
3929 case DW_OP_breg0:
3930 case DW_OP_breg1:
3931 case DW_OP_breg2:
3932 case DW_OP_breg3:
3933 case DW_OP_breg4:
3934 case DW_OP_breg5:
3935 case DW_OP_breg6:
3936 case DW_OP_breg7:
3937 case DW_OP_breg8:
3938 case DW_OP_breg9:
3939 case DW_OP_breg10:
3940 case DW_OP_breg11:
3941 case DW_OP_breg12:
3942 case DW_OP_breg13:
3943 case DW_OP_breg14:
3944 case DW_OP_breg15:
3945 case DW_OP_breg16:
3946 case DW_OP_breg17:
3947 case DW_OP_breg18:
3948 case DW_OP_breg19:
3949 case DW_OP_breg20:
3950 case DW_OP_breg21:
3951 case DW_OP_breg22:
3952 case DW_OP_breg23:
3953 case DW_OP_breg24:
3954 case DW_OP_breg25:
3955 case DW_OP_breg26:
3956 case DW_OP_breg27:
3957 case DW_OP_breg28:
3958 case DW_OP_breg29:
3959 case DW_OP_breg30:
3960 case DW_OP_breg31:
3961 data = safe_read_sleb128 (data, end, &l);
3962 fprintf_filtered (stream, " %s [$%s]", plongest (l),
3963 locexpr_regname (arch, op - DW_OP_breg0));
3964 break;
3965
3966 case DW_OP_bregx:
3967 data = safe_read_uleb128 (data, end, &ul);
3968 data = safe_read_sleb128 (data, end, &l);
3969 fprintf_filtered (stream, " register %s [$%s] offset %s",
3970 pulongest (ul),
3971 locexpr_regname (arch, (int) ul),
3972 plongest (l));
3973 break;
3974
3975 case DW_OP_fbreg:
3976 data = safe_read_sleb128 (data, end, &l);
3977 fprintf_filtered (stream, " %s", plongest (l));
3978 break;
3979
3980 case DW_OP_xderef_size:
3981 case DW_OP_deref_size:
3982 case DW_OP_pick:
3983 fprintf_filtered (stream, " %d", *data);
3984 ++data;
3985 break;
3986
3987 case DW_OP_plus_uconst:
3988 data = safe_read_uleb128 (data, end, &ul);
3989 fprintf_filtered (stream, " %s", pulongest (ul));
3990 break;
3991
3992 case DW_OP_skip:
3993 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3994 data += 2;
3995 fprintf_filtered (stream, " to %ld",
3996 (long) (data + l - start));
3997 break;
3998
3999 case DW_OP_bra:
4000 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
4001 data += 2;
4002 fprintf_filtered (stream, " %ld",
4003 (long) (data + l - start));
4004 break;
4005
4006 case DW_OP_call2:
4007 ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
4008 data += 2;
4009 fprintf_filtered (stream, " offset %s", phex_nz (ul, 2));
4010 break;
4011
4012 case DW_OP_call4:
4013 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
4014 data += 4;
4015 fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
4016 break;
4017
4018 case DW_OP_call_ref:
4019 ul = extract_unsigned_integer (data, offset_size,
4020 gdbarch_byte_order (arch));
4021 data += offset_size;
4022 fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
4023 break;
4024
4025 case DW_OP_piece:
4026 data = safe_read_uleb128 (data, end, &ul);
4027 fprintf_filtered (stream, " %s (bytes)", pulongest (ul));
4028 break;
4029
4030 case DW_OP_bit_piece:
4031 {
4032 uint64_t offset;
4033
4034 data = safe_read_uleb128 (data, end, &ul);
4035 data = safe_read_uleb128 (data, end, &offset);
4036 fprintf_filtered (stream, " size %s offset %s (bits)",
4037 pulongest (ul), pulongest (offset));
4038 }
4039 break;
4040
4041 case DW_OP_implicit_pointer:
4042 case DW_OP_GNU_implicit_pointer:
4043 {
4044 ul = extract_unsigned_integer (data, offset_size,
4045 gdbarch_byte_order (arch));
4046 data += offset_size;
4047
4048 data = safe_read_sleb128 (data, end, &l);
4049
4050 fprintf_filtered (stream, " DIE %s offset %s",
4051 phex_nz (ul, offset_size),
4052 plongest (l));
4053 }
4054 break;
4055
4056 case DW_OP_deref_type:
4057 case DW_OP_GNU_deref_type:
4058 {
4059 int deref_addr_size = *data++;
4060 struct type *type;
4061
4062 data = safe_read_uleb128 (data, end, &ul);
4063 cu_offset offset = (cu_offset) ul;
4064 type = dwarf2_get_die_type (offset, per_cu);
4065 fprintf_filtered (stream, "<");
4066 type_print (type, "", stream, -1);
4067 fprintf_filtered (stream, " [0x%s]> %d",
4068 phex_nz (to_underlying (offset), 0),
4069 deref_addr_size);
4070 }
4071 break;
4072
4073 case DW_OP_const_type:
4074 case DW_OP_GNU_const_type:
4075 {
4076 struct type *type;
4077
4078 data = safe_read_uleb128 (data, end, &ul);
4079 cu_offset type_die = (cu_offset) ul;
4080 type = dwarf2_get_die_type (type_die, per_cu);
4081 fprintf_filtered (stream, "<");
4082 type_print (type, "", stream, -1);
4083 fprintf_filtered (stream, " [0x%s]>",
4084 phex_nz (to_underlying (type_die), 0));
4085 }
4086 break;
4087
4088 case DW_OP_regval_type:
4089 case DW_OP_GNU_regval_type:
4090 {
4091 uint64_t reg;
4092 struct type *type;
4093
4094 data = safe_read_uleb128 (data, end, &reg);
4095 data = safe_read_uleb128 (data, end, &ul);
4096 cu_offset type_die = (cu_offset) ul;
4097
4098 type = dwarf2_get_die_type (type_die, per_cu);
4099 fprintf_filtered (stream, "<");
4100 type_print (type, "", stream, -1);
4101 fprintf_filtered (stream, " [0x%s]> [$%s]",
4102 phex_nz (to_underlying (type_die), 0),
4103 locexpr_regname (arch, reg));
4104 }
4105 break;
4106
4107 case DW_OP_convert:
4108 case DW_OP_GNU_convert:
4109 case DW_OP_reinterpret:
4110 case DW_OP_GNU_reinterpret:
4111 {
4112 data = safe_read_uleb128 (data, end, &ul);
4113 cu_offset type_die = (cu_offset) ul;
4114
4115 if (to_underlying (type_die) == 0)
4116 fprintf_filtered (stream, "<0>");
4117 else
4118 {
4119 struct type *type;
4120
4121 type = dwarf2_get_die_type (type_die, per_cu);
4122 fprintf_filtered (stream, "<");
4123 type_print (type, "", stream, -1);
4124 fprintf_filtered (stream, " [0x%s]>",
4125 phex_nz (to_underlying (type_die), 0));
4126 }
4127 }
4128 break;
4129
4130 case DW_OP_entry_value:
4131 case DW_OP_GNU_entry_value:
4132 data = safe_read_uleb128 (data, end, &ul);
4133 fputc_filtered ('\n', stream);
4134 disassemble_dwarf_expression (stream, arch, addr_size, offset_size,
4135 start, data, data + ul, indent + 2,
4136 all, per_cu);
4137 data += ul;
4138 continue;
4139
4140 case DW_OP_GNU_parameter_ref:
4141 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
4142 data += 4;
4143 fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
4144 break;
4145
4146 case DW_OP_addrx:
4147 case DW_OP_GNU_addr_index:
4148 data = safe_read_uleb128 (data, end, &ul);
4149 ul = dwarf2_read_addr_index (per_cu, ul);
4150 fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
4151 break;
4152 case DW_OP_GNU_const_index:
4153 data = safe_read_uleb128 (data, end, &ul);
4154 ul = dwarf2_read_addr_index (per_cu, ul);
4155 fprintf_filtered (stream, " %s", pulongest (ul));
4156 break;
4157
4158 case DW_OP_GNU_variable_value:
4159 ul = extract_unsigned_integer (data, offset_size,
4160 gdbarch_byte_order (arch));
4161 data += offset_size;
4162 fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
4163 break;
4164 }
4165
4166 fprintf_filtered (stream, "\n");
4167 }
4168
4169 return data;
4170 }
4171
4172 static bool dwarf_always_disassemble;
4173
4174 static void
4175 show_dwarf_always_disassemble (struct ui_file *file, int from_tty,
4176 struct cmd_list_element *c, const char *value)
4177 {
4178 fprintf_filtered (file,
4179 _("Whether to always disassemble "
4180 "DWARF expressions is %s.\n"),
4181 value);
4182 }
4183
4184 /* Describe a single location, which may in turn consist of multiple
4185 pieces. */
4186
4187 static void
4188 locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
4189 struct ui_file *stream,
4190 const gdb_byte *data, size_t size,
4191 struct objfile *objfile, unsigned int addr_size,
4192 int offset_size, struct dwarf2_per_cu_data *per_cu)
4193 {
4194 const gdb_byte *end = data + size;
4195 int first_piece = 1, bad = 0;
4196
4197 while (data < end)
4198 {
4199 const gdb_byte *here = data;
4200 int disassemble = 1;
4201
4202 if (first_piece)
4203 first_piece = 0;
4204 else
4205 fprintf_filtered (stream, _(", and "));
4206
4207 if (!dwarf_always_disassemble)
4208 {
4209 data = locexpr_describe_location_piece (symbol, stream,
4210 addr, objfile, per_cu,
4211 data, end, addr_size);
4212 /* If we printed anything, or if we have an empty piece,
4213 then don't disassemble. */
4214 if (data != here
4215 || data[0] == DW_OP_piece
4216 || data[0] == DW_OP_bit_piece)
4217 disassemble = 0;
4218 }
4219 if (disassemble)
4220 {
4221 fprintf_filtered (stream, _("a complex DWARF expression:\n"));
4222 data = disassemble_dwarf_expression (stream,
4223 get_objfile_arch (objfile),
4224 addr_size, offset_size, data,
4225 data, end, 0,
4226 dwarf_always_disassemble,
4227 per_cu);
4228 }
4229
4230 if (data < end)
4231 {
4232 int empty = data == here;
4233
4234 if (disassemble)
4235 fprintf_filtered (stream, " ");
4236 if (data[0] == DW_OP_piece)
4237 {
4238 uint64_t bytes;
4239
4240 data = safe_read_uleb128 (data + 1, end, &bytes);
4241
4242 if (empty)
4243 fprintf_filtered (stream, _("an empty %s-byte piece"),
4244 pulongest (bytes));
4245 else
4246 fprintf_filtered (stream, _(" [%s-byte piece]"),
4247 pulongest (bytes));
4248 }
4249 else if (data[0] == DW_OP_bit_piece)
4250 {
4251 uint64_t bits, offset;
4252
4253 data = safe_read_uleb128 (data + 1, end, &bits);
4254 data = safe_read_uleb128 (data, end, &offset);
4255
4256 if (empty)
4257 fprintf_filtered (stream,
4258 _("an empty %s-bit piece"),
4259 pulongest (bits));
4260 else
4261 fprintf_filtered (stream,
4262 _(" [%s-bit piece, offset %s bits]"),
4263 pulongest (bits), pulongest (offset));
4264 }
4265 else
4266 {
4267 bad = 1;
4268 break;
4269 }
4270 }
4271 }
4272
4273 if (bad || data > end)
4274 error (_("Corrupted DWARF2 expression for \"%s\"."),
4275 symbol->print_name ());
4276 }
4277
4278 /* Print a natural-language description of SYMBOL to STREAM. This
4279 version is for a symbol with a single location. */
4280
4281 static void
4282 locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
4283 struct ui_file *stream)
4284 {
4285 struct dwarf2_locexpr_baton *dlbaton
4286 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
4287 struct objfile *objfile = dlbaton->per_cu->objfile ();
4288 unsigned int addr_size = dlbaton->per_cu->addr_size ();
4289 int offset_size = dlbaton->per_cu->offset_size ();
4290
4291 locexpr_describe_location_1 (symbol, addr, stream,
4292 dlbaton->data, dlbaton->size,
4293 objfile, addr_size, offset_size,
4294 dlbaton->per_cu);
4295 }
4296
4297 /* Describe the location of SYMBOL as an agent value in VALUE, generating
4298 any necessary bytecode in AX. */
4299
4300 static void
4301 locexpr_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
4302 struct axs_value *value)
4303 {
4304 struct dwarf2_locexpr_baton *dlbaton
4305 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
4306 unsigned int addr_size = dlbaton->per_cu->addr_size ();
4307
4308 if (dlbaton->size == 0)
4309 value->optimized_out = 1;
4310 else
4311 dwarf2_compile_expr_to_ax (ax, value, addr_size, dlbaton->data,
4312 dlbaton->data + dlbaton->size, dlbaton->per_cu);
4313 }
4314
4315 /* symbol_computed_ops 'generate_c_location' method. */
4316
4317 static void
4318 locexpr_generate_c_location (struct symbol *sym, string_file *stream,
4319 struct gdbarch *gdbarch,
4320 unsigned char *registers_used,
4321 CORE_ADDR pc, const char *result_name)
4322 {
4323 struct dwarf2_locexpr_baton *dlbaton
4324 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (sym);
4325 unsigned int addr_size = dlbaton->per_cu->addr_size ();
4326
4327 if (dlbaton->size == 0)
4328 error (_("symbol \"%s\" is optimized out"), sym->natural_name ());
4329
4330 compile_dwarf_expr_to_c (stream, result_name,
4331 sym, pc, gdbarch, registers_used, addr_size,
4332 dlbaton->data, dlbaton->data + dlbaton->size,
4333 dlbaton->per_cu);
4334 }
4335
4336 /* The set of location functions used with the DWARF-2 expression
4337 evaluator. */
4338 const struct symbol_computed_ops dwarf2_locexpr_funcs = {
4339 locexpr_read_variable,
4340 locexpr_read_variable_at_entry,
4341 locexpr_get_symbol_read_needs,
4342 locexpr_describe_location,
4343 0, /* location_has_loclist */
4344 locexpr_tracepoint_var_ref,
4345 locexpr_generate_c_location
4346 };
4347
4348
4349 /* Wrapper functions for location lists. These generally find
4350 the appropriate location expression and call something above. */
4351
4352 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
4353 evaluator to calculate the location. */
4354 static struct value *
4355 loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
4356 {
4357 struct dwarf2_loclist_baton *dlbaton
4358 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
4359 struct value *val;
4360 const gdb_byte *data;
4361 size_t size;
4362 CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0;
4363
4364 data = dwarf2_find_location_expression (dlbaton, &size, pc);
4365 val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size,
4366 dlbaton->per_cu);
4367
4368 return val;
4369 }
4370
4371 /* Read variable SYMBOL like loclist_read_variable at (callee) FRAME's function
4372 entry. SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
4373 will be thrown.
4374
4375 Function always returns non-NULL value, it may be marked optimized out if
4376 inferior frame information is not available. It throws NO_ENTRY_VALUE_ERROR
4377 if it cannot resolve the parameter for any reason. */
4378
4379 static struct value *
4380 loclist_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
4381 {
4382 struct dwarf2_loclist_baton *dlbaton
4383 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
4384 const gdb_byte *data;
4385 size_t size;
4386 CORE_ADDR pc;
4387
4388 if (frame == NULL || !get_frame_func_if_available (frame, &pc))
4389 return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
4390
4391 data = dwarf2_find_location_expression (dlbaton, &size, pc);
4392 if (data == NULL)
4393 return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
4394
4395 return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, data, size);
4396 }
4397
4398 /* Implementation of get_symbol_read_needs from
4399 symbol_computed_ops. */
4400
4401 static enum symbol_needs_kind
4402 loclist_symbol_needs (struct symbol *symbol)
4403 {
4404 /* If there's a location list, then assume we need to have a frame
4405 to choose the appropriate location expression. With tracking of
4406 global variables this is not necessarily true, but such tracking
4407 is disabled in GCC at the moment until we figure out how to
4408 represent it. */
4409
4410 return SYMBOL_NEEDS_FRAME;
4411 }
4412
4413 /* Print a natural-language description of SYMBOL to STREAM. This
4414 version applies when there is a list of different locations, each
4415 with a specified address range. */
4416
4417 static void
4418 loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
4419 struct ui_file *stream)
4420 {
4421 struct dwarf2_loclist_baton *dlbaton
4422 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
4423 const gdb_byte *loc_ptr, *buf_end;
4424 struct objfile *objfile = dlbaton->per_cu->objfile ();
4425 struct gdbarch *gdbarch = get_objfile_arch (objfile);
4426 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4427 unsigned int addr_size = dlbaton->per_cu->addr_size ();
4428 int offset_size = dlbaton->per_cu->offset_size ();
4429 int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
4430 /* Adjust base_address for relocatable objects. */
4431 CORE_ADDR base_offset = dlbaton->per_cu->text_offset ();
4432 CORE_ADDR base_address = dlbaton->base_address + base_offset;
4433 int done = 0;
4434
4435 loc_ptr = dlbaton->data;
4436 buf_end = dlbaton->data + dlbaton->size;
4437
4438 fprintf_filtered (stream, _("multi-location:\n"));
4439
4440 /* Iterate through locations until we run out. */
4441 while (!done)
4442 {
4443 CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
4444 int length;
4445 enum debug_loc_kind kind;
4446 const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
4447
4448 if (dlbaton->from_dwo)
4449 kind = decode_debug_loc_dwo_addresses (dlbaton->per_cu,
4450 loc_ptr, buf_end, &new_ptr,
4451 &low, &high, byte_order);
4452 else
4453 kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
4454 &low, &high,
4455 byte_order, addr_size,
4456 signed_addr_p);
4457 loc_ptr = new_ptr;
4458 switch (kind)
4459 {
4460 case DEBUG_LOC_END_OF_LIST:
4461 done = 1;
4462 continue;
4463 case DEBUG_LOC_BASE_ADDRESS:
4464 base_address = high + base_offset;
4465 fprintf_filtered (stream, _(" Base address %s"),
4466 paddress (gdbarch, base_address));
4467 continue;
4468 case DEBUG_LOC_START_END:
4469 case DEBUG_LOC_START_LENGTH:
4470 break;
4471 case DEBUG_LOC_BUFFER_OVERFLOW:
4472 case DEBUG_LOC_INVALID_ENTRY:
4473 error (_("Corrupted DWARF expression for symbol \"%s\"."),
4474 symbol->print_name ());
4475 default:
4476 gdb_assert_not_reached ("bad debug_loc_kind");
4477 }
4478
4479 /* Otherwise, a location expression entry. */
4480 low += base_address;
4481 high += base_address;
4482
4483 low = gdbarch_adjust_dwarf2_addr (gdbarch, low);
4484 high = gdbarch_adjust_dwarf2_addr (gdbarch, high);
4485
4486 length = extract_unsigned_integer (loc_ptr, 2, byte_order);
4487 loc_ptr += 2;
4488
4489 /* (It would improve readability to print only the minimum
4490 necessary digits of the second number of the range.) */
4491 fprintf_filtered (stream, _(" Range %s-%s: "),
4492 paddress (gdbarch, low), paddress (gdbarch, high));
4493
4494 /* Now describe this particular location. */
4495 locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
4496 objfile, addr_size, offset_size,
4497 dlbaton->per_cu);
4498
4499 fprintf_filtered (stream, "\n");
4500
4501 loc_ptr += length;
4502 }
4503 }
4504
4505 /* Describe the location of SYMBOL as an agent value in VALUE, generating
4506 any necessary bytecode in AX. */
4507 static void
4508 loclist_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
4509 struct axs_value *value)
4510 {
4511 struct dwarf2_loclist_baton *dlbaton
4512 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
4513 const gdb_byte *data;
4514 size_t size;
4515 unsigned int addr_size = dlbaton->per_cu->addr_size ();
4516
4517 data = dwarf2_find_location_expression (dlbaton, &size, ax->scope);
4518 if (size == 0)
4519 value->optimized_out = 1;
4520 else
4521 dwarf2_compile_expr_to_ax (ax, value, addr_size, data, data + size,
4522 dlbaton->per_cu);
4523 }
4524
4525 /* symbol_computed_ops 'generate_c_location' method. */
4526
4527 static void
4528 loclist_generate_c_location (struct symbol *sym, string_file *stream,
4529 struct gdbarch *gdbarch,
4530 unsigned char *registers_used,
4531 CORE_ADDR pc, const char *result_name)
4532 {
4533 struct dwarf2_loclist_baton *dlbaton
4534 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (sym);
4535 unsigned int addr_size = dlbaton->per_cu->addr_size ();
4536 const gdb_byte *data;
4537 size_t size;
4538
4539 data = dwarf2_find_location_expression (dlbaton, &size, pc);
4540 if (size == 0)
4541 error (_("symbol \"%s\" is optimized out"), sym->natural_name ());
4542
4543 compile_dwarf_expr_to_c (stream, result_name,
4544 sym, pc, gdbarch, registers_used, addr_size,
4545 data, data + size,
4546 dlbaton->per_cu);
4547 }
4548
4549 /* The set of location functions used with the DWARF-2 expression
4550 evaluator and location lists. */
4551 const struct symbol_computed_ops dwarf2_loclist_funcs = {
4552 loclist_read_variable,
4553 loclist_read_variable_at_entry,
4554 loclist_symbol_needs,
4555 loclist_describe_location,
4556 1, /* location_has_loclist */
4557 loclist_tracepoint_var_ref,
4558 loclist_generate_c_location
4559 };
4560
4561 void _initialize_dwarf2loc ();
4562 void
4563 _initialize_dwarf2loc ()
4564 {
4565 add_setshow_zuinteger_cmd ("entry-values", class_maintenance,
4566 &entry_values_debug,
4567 _("Set entry values and tail call frames "
4568 "debugging."),
4569 _("Show entry values and tail call frames "
4570 "debugging."),
4571 _("When non-zero, the process of determining "
4572 "parameter values from function entry point "
4573 "and tail call frames will be printed."),
4574 NULL,
4575 show_entry_values_debug,
4576 &setdebuglist, &showdebuglist);
4577
4578 add_setshow_boolean_cmd ("always-disassemble", class_obscure,
4579 &dwarf_always_disassemble, _("\
4580 Set whether `info address' always disassembles DWARF expressions."), _("\
4581 Show whether `info address' always disassembles DWARF expressions."), _("\
4582 When enabled, DWARF expressions are always printed in an assembly-like\n\
4583 syntax. When disabled, expressions will be printed in a more\n\
4584 conversational style, when possible."),
4585 NULL,
4586 show_dwarf_always_disassemble,
4587 &set_dwarf_cmdlist,
4588 &show_dwarf_cmdlist);
4589 }
This page took 0.176619 seconds and 5 git commands to generate.