Return unique_xmalloc_ptr from call_site_find_chain
[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 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 = get_frame_address_in_block (frame);
2515 const gdb_byte *data;
2516 struct value *val;
2517 size_t size;
2518
2519 data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
2520 if (data != NULL)
2521 {
2522 val = dwarf2_evaluate_loc_desc (baton->property_type, frame, data,
2523 size, baton->loclist.per_cu);
2524 if (!value_optimized_out (val))
2525 {
2526 *value = value_as_address (val);
2527 return true;
2528 }
2529 }
2530 }
2531 break;
2532
2533 case PROP_CONST:
2534 *value = prop->data.const_val;
2535 return true;
2536
2537 case PROP_ADDR_OFFSET:
2538 {
2539 struct dwarf2_property_baton *baton
2540 = (struct dwarf2_property_baton *) prop->data.baton;
2541 struct property_addr_info *pinfo;
2542 struct value *val;
2543
2544 for (pinfo = addr_stack; pinfo != NULL; pinfo = pinfo->next)
2545 {
2546 /* This approach lets us avoid checking the qualifiers. */
2547 if (TYPE_MAIN_TYPE (pinfo->type)
2548 == TYPE_MAIN_TYPE (baton->property_type))
2549 break;
2550 }
2551 if (pinfo == NULL)
2552 error (_("cannot find reference address for offset property"));
2553 if (pinfo->valaddr != NULL)
2554 val = value_from_contents
2555 (baton->offset_info.type,
2556 pinfo->valaddr + baton->offset_info.offset);
2557 else
2558 val = value_at (baton->offset_info.type,
2559 pinfo->addr + baton->offset_info.offset);
2560 *value = value_as_address (val);
2561 return true;
2562 }
2563 }
2564
2565 return false;
2566 }
2567
2568 /* See dwarf2loc.h. */
2569
2570 void
2571 dwarf2_compile_property_to_c (string_file *stream,
2572 const char *result_name,
2573 struct gdbarch *gdbarch,
2574 unsigned char *registers_used,
2575 const struct dynamic_prop *prop,
2576 CORE_ADDR pc,
2577 struct symbol *sym)
2578 {
2579 struct dwarf2_property_baton *baton
2580 = (struct dwarf2_property_baton *) prop->data.baton;
2581 const gdb_byte *data;
2582 size_t size;
2583 struct dwarf2_per_cu_data *per_cu;
2584
2585 if (prop->kind == PROP_LOCEXPR)
2586 {
2587 data = baton->locexpr.data;
2588 size = baton->locexpr.size;
2589 per_cu = baton->locexpr.per_cu;
2590 }
2591 else
2592 {
2593 gdb_assert (prop->kind == PROP_LOCLIST);
2594
2595 data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
2596 per_cu = baton->loclist.per_cu;
2597 }
2598
2599 compile_dwarf_bounds_to_c (stream, result_name, prop, sym, pc,
2600 gdbarch, registers_used,
2601 per_cu->addr_size (),
2602 data, data + size, per_cu);
2603 }
2604
2605 \f
2606 /* Helper functions and baton for dwarf2_loc_desc_get_symbol_read_needs. */
2607
2608 class symbol_needs_eval_context : public dwarf_expr_context
2609 {
2610 public:
2611
2612 enum symbol_needs_kind needs;
2613 struct dwarf2_per_cu_data *per_cu;
2614
2615 /* Reads from registers do require a frame. */
2616 CORE_ADDR read_addr_from_reg (int regnum) override
2617 {
2618 needs = SYMBOL_NEEDS_FRAME;
2619 return 1;
2620 }
2621
2622 /* "get_reg_value" callback: Reads from registers do require a
2623 frame. */
2624
2625 struct value *get_reg_value (struct type *type, int regnum) override
2626 {
2627 needs = SYMBOL_NEEDS_FRAME;
2628 return value_zero (type, not_lval);
2629 }
2630
2631 /* Reads from memory do not require a frame. */
2632 void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override
2633 {
2634 memset (buf, 0, len);
2635 }
2636
2637 /* Frame-relative accesses do require a frame. */
2638 void get_frame_base (const gdb_byte **start, size_t *length) override
2639 {
2640 static gdb_byte lit0 = DW_OP_lit0;
2641
2642 *start = &lit0;
2643 *length = 1;
2644
2645 needs = SYMBOL_NEEDS_FRAME;
2646 }
2647
2648 /* CFA accesses require a frame. */
2649 CORE_ADDR get_frame_cfa () override
2650 {
2651 needs = SYMBOL_NEEDS_FRAME;
2652 return 1;
2653 }
2654
2655 CORE_ADDR get_frame_pc () override
2656 {
2657 needs = SYMBOL_NEEDS_FRAME;
2658 return 1;
2659 }
2660
2661 /* Thread-local accesses require registers, but not a frame. */
2662 CORE_ADDR get_tls_address (CORE_ADDR offset) override
2663 {
2664 if (needs <= SYMBOL_NEEDS_REGISTERS)
2665 needs = SYMBOL_NEEDS_REGISTERS;
2666 return 1;
2667 }
2668
2669 /* Helper interface of per_cu_dwarf_call for
2670 dwarf2_loc_desc_get_symbol_read_needs. */
2671
2672 void dwarf_call (cu_offset die_offset) override
2673 {
2674 per_cu_dwarf_call (this, die_offset, per_cu);
2675 }
2676
2677 /* Helper interface of sect_variable_value for
2678 dwarf2_loc_desc_get_symbol_read_needs. */
2679
2680 struct value *dwarf_variable_value (sect_offset sect_off) override
2681 {
2682 return sect_variable_value (this, sect_off, per_cu);
2683 }
2684
2685 /* DW_OP_entry_value accesses require a caller, therefore a
2686 frame. */
2687
2688 void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind,
2689 union call_site_parameter_u kind_u,
2690 int deref_size) override
2691 {
2692 needs = SYMBOL_NEEDS_FRAME;
2693
2694 /* The expression may require some stub values on DWARF stack. */
2695 push_address (0, 0);
2696 }
2697
2698 /* DW_OP_addrx and DW_OP_GNU_addr_index doesn't require a frame. */
2699
2700 CORE_ADDR get_addr_index (unsigned int index) override
2701 {
2702 /* Nothing to do. */
2703 return 1;
2704 }
2705
2706 /* DW_OP_push_object_address has a frame already passed through. */
2707
2708 CORE_ADDR get_object_address () override
2709 {
2710 /* Nothing to do. */
2711 return 1;
2712 }
2713 };
2714
2715 /* Compute the correct symbol_needs_kind value for the location
2716 expression at DATA (length SIZE). */
2717
2718 static enum symbol_needs_kind
2719 dwarf2_loc_desc_get_symbol_read_needs (const gdb_byte *data, size_t size,
2720 struct dwarf2_per_cu_data *per_cu)
2721 {
2722 int in_reg;
2723 struct objfile *objfile = per_cu->objfile ();
2724
2725 scoped_value_mark free_values;
2726
2727 symbol_needs_eval_context ctx;
2728
2729 ctx.needs = SYMBOL_NEEDS_NONE;
2730 ctx.per_cu = per_cu;
2731 ctx.gdbarch = get_objfile_arch (objfile);
2732 ctx.addr_size = per_cu->addr_size ();
2733 ctx.ref_addr_size = per_cu->ref_addr_size ();
2734 ctx.offset = per_cu->text_offset ();
2735
2736 ctx.eval (data, size);
2737
2738 in_reg = ctx.location == DWARF_VALUE_REGISTER;
2739
2740 /* If the location has several pieces, and any of them are in
2741 registers, then we will need a frame to fetch them from. */
2742 for (dwarf_expr_piece &p : ctx.pieces)
2743 if (p.location == DWARF_VALUE_REGISTER)
2744 in_reg = 1;
2745
2746 if (in_reg)
2747 ctx.needs = SYMBOL_NEEDS_FRAME;
2748 return ctx.needs;
2749 }
2750
2751 /* A helper function that throws an unimplemented error mentioning a
2752 given DWARF operator. */
2753
2754 static void ATTRIBUTE_NORETURN
2755 unimplemented (unsigned int op)
2756 {
2757 const char *name = get_DW_OP_name (op);
2758
2759 if (name)
2760 error (_("DWARF operator %s cannot be translated to an agent expression"),
2761 name);
2762 else
2763 error (_("Unknown DWARF operator 0x%02x cannot be translated "
2764 "to an agent expression"),
2765 op);
2766 }
2767
2768 /* See dwarf2loc.h.
2769
2770 This is basically a wrapper on gdbarch_dwarf2_reg_to_regnum so that we
2771 can issue a complaint, which is better than having every target's
2772 implementation of dwarf2_reg_to_regnum do it. */
2773
2774 int
2775 dwarf_reg_to_regnum (struct gdbarch *arch, int dwarf_reg)
2776 {
2777 int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg);
2778
2779 if (reg == -1)
2780 {
2781 complaint (_("bad DWARF register number %d"), dwarf_reg);
2782 }
2783 return reg;
2784 }
2785
2786 /* Subroutine of dwarf_reg_to_regnum_or_error to simplify it.
2787 Throw an error because DWARF_REG is bad. */
2788
2789 static void
2790 throw_bad_regnum_error (ULONGEST dwarf_reg)
2791 {
2792 /* Still want to print -1 as "-1".
2793 We *could* have int and ULONGEST versions of dwarf2_reg_to_regnum_or_error
2794 but that's overkill for now. */
2795 if ((int) dwarf_reg == dwarf_reg)
2796 error (_("Unable to access DWARF register number %d"), (int) dwarf_reg);
2797 error (_("Unable to access DWARF register number %s"),
2798 pulongest (dwarf_reg));
2799 }
2800
2801 /* See dwarf2loc.h. */
2802
2803 int
2804 dwarf_reg_to_regnum_or_error (struct gdbarch *arch, ULONGEST dwarf_reg)
2805 {
2806 int reg;
2807
2808 if (dwarf_reg > INT_MAX)
2809 throw_bad_regnum_error (dwarf_reg);
2810 /* Yes, we will end up issuing a complaint and an error if DWARF_REG is
2811 bad, but that's ok. */
2812 reg = dwarf_reg_to_regnum (arch, (int) dwarf_reg);
2813 if (reg == -1)
2814 throw_bad_regnum_error (dwarf_reg);
2815 return reg;
2816 }
2817
2818 /* A helper function that emits an access to memory. ARCH is the
2819 target architecture. EXPR is the expression which we are building.
2820 NBITS is the number of bits we want to read. This emits the
2821 opcodes needed to read the memory and then extract the desired
2822 bits. */
2823
2824 static void
2825 access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits)
2826 {
2827 ULONGEST nbytes = (nbits + 7) / 8;
2828
2829 gdb_assert (nbytes > 0 && nbytes <= sizeof (LONGEST));
2830
2831 if (expr->tracing)
2832 ax_trace_quick (expr, nbytes);
2833
2834 if (nbits <= 8)
2835 ax_simple (expr, aop_ref8);
2836 else if (nbits <= 16)
2837 ax_simple (expr, aop_ref16);
2838 else if (nbits <= 32)
2839 ax_simple (expr, aop_ref32);
2840 else
2841 ax_simple (expr, aop_ref64);
2842
2843 /* If we read exactly the number of bytes we wanted, we're done. */
2844 if (8 * nbytes == nbits)
2845 return;
2846
2847 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
2848 {
2849 /* On a bits-big-endian machine, we want the high-order
2850 NBITS. */
2851 ax_const_l (expr, 8 * nbytes - nbits);
2852 ax_simple (expr, aop_rsh_unsigned);
2853 }
2854 else
2855 {
2856 /* On a bits-little-endian box, we want the low-order NBITS. */
2857 ax_zero_ext (expr, nbits);
2858 }
2859 }
2860
2861 /* A helper function to return the frame's PC. */
2862
2863 static CORE_ADDR
2864 get_ax_pc (void *baton)
2865 {
2866 struct agent_expr *expr = (struct agent_expr *) baton;
2867
2868 return expr->scope;
2869 }
2870
2871 /* Compile a DWARF location expression to an agent expression.
2872
2873 EXPR is the agent expression we are building.
2874 LOC is the agent value we modify.
2875 ARCH is the architecture.
2876 ADDR_SIZE is the size of addresses, in bytes.
2877 OP_PTR is the start of the location expression.
2878 OP_END is one past the last byte of the location expression.
2879
2880 This will throw an exception for various kinds of errors -- for
2881 example, if the expression cannot be compiled, or if the expression
2882 is invalid. */
2883
2884 void
2885 dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
2886 unsigned int addr_size, const gdb_byte *op_ptr,
2887 const gdb_byte *op_end,
2888 struct dwarf2_per_cu_data *per_cu)
2889 {
2890 gdbarch *arch = expr->gdbarch;
2891 std::vector<int> dw_labels, patches;
2892 const gdb_byte * const base = op_ptr;
2893 const gdb_byte *previous_piece = op_ptr;
2894 enum bfd_endian byte_order = gdbarch_byte_order (arch);
2895 ULONGEST bits_collected = 0;
2896 unsigned int addr_size_bits = 8 * addr_size;
2897 bool bits_big_endian = byte_order == BFD_ENDIAN_BIG;
2898
2899 std::vector<int> offsets (op_end - op_ptr, -1);
2900
2901 /* By default we are making an address. */
2902 loc->kind = axs_lvalue_memory;
2903
2904 while (op_ptr < op_end)
2905 {
2906 enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr;
2907 uint64_t uoffset, reg;
2908 int64_t offset;
2909 int i;
2910
2911 offsets[op_ptr - base] = expr->len;
2912 ++op_ptr;
2913
2914 /* Our basic approach to code generation is to map DWARF
2915 operations directly to AX operations. However, there are
2916 some differences.
2917
2918 First, DWARF works on address-sized units, but AX always uses
2919 LONGEST. For most operations we simply ignore this
2920 difference; instead we generate sign extensions as needed
2921 before division and comparison operations. It would be nice
2922 to omit the sign extensions, but there is no way to determine
2923 the size of the target's LONGEST. (This code uses the size
2924 of the host LONGEST in some cases -- that is a bug but it is
2925 difficult to fix.)
2926
2927 Second, some DWARF operations cannot be translated to AX.
2928 For these we simply fail. See
2929 http://sourceware.org/bugzilla/show_bug.cgi?id=11662. */
2930 switch (op)
2931 {
2932 case DW_OP_lit0:
2933 case DW_OP_lit1:
2934 case DW_OP_lit2:
2935 case DW_OP_lit3:
2936 case DW_OP_lit4:
2937 case DW_OP_lit5:
2938 case DW_OP_lit6:
2939 case DW_OP_lit7:
2940 case DW_OP_lit8:
2941 case DW_OP_lit9:
2942 case DW_OP_lit10:
2943 case DW_OP_lit11:
2944 case DW_OP_lit12:
2945 case DW_OP_lit13:
2946 case DW_OP_lit14:
2947 case DW_OP_lit15:
2948 case DW_OP_lit16:
2949 case DW_OP_lit17:
2950 case DW_OP_lit18:
2951 case DW_OP_lit19:
2952 case DW_OP_lit20:
2953 case DW_OP_lit21:
2954 case DW_OP_lit22:
2955 case DW_OP_lit23:
2956 case DW_OP_lit24:
2957 case DW_OP_lit25:
2958 case DW_OP_lit26:
2959 case DW_OP_lit27:
2960 case DW_OP_lit28:
2961 case DW_OP_lit29:
2962 case DW_OP_lit30:
2963 case DW_OP_lit31:
2964 ax_const_l (expr, op - DW_OP_lit0);
2965 break;
2966
2967 case DW_OP_addr:
2968 uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order);
2969 op_ptr += addr_size;
2970 /* Some versions of GCC emit DW_OP_addr before
2971 DW_OP_GNU_push_tls_address. In this case the value is an
2972 index, not an address. We don't support things like
2973 branching between the address and the TLS op. */
2974 if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
2975 uoffset += per_cu->text_offset ();
2976 ax_const_l (expr, uoffset);
2977 break;
2978
2979 case DW_OP_const1u:
2980 ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order));
2981 op_ptr += 1;
2982 break;
2983 case DW_OP_const1s:
2984 ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order));
2985 op_ptr += 1;
2986 break;
2987 case DW_OP_const2u:
2988 ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order));
2989 op_ptr += 2;
2990 break;
2991 case DW_OP_const2s:
2992 ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order));
2993 op_ptr += 2;
2994 break;
2995 case DW_OP_const4u:
2996 ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order));
2997 op_ptr += 4;
2998 break;
2999 case DW_OP_const4s:
3000 ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order));
3001 op_ptr += 4;
3002 break;
3003 case DW_OP_const8u:
3004 ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order));
3005 op_ptr += 8;
3006 break;
3007 case DW_OP_const8s:
3008 ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order));
3009 op_ptr += 8;
3010 break;
3011 case DW_OP_constu:
3012 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
3013 ax_const_l (expr, uoffset);
3014 break;
3015 case DW_OP_consts:
3016 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
3017 ax_const_l (expr, offset);
3018 break;
3019
3020 case DW_OP_reg0:
3021 case DW_OP_reg1:
3022 case DW_OP_reg2:
3023 case DW_OP_reg3:
3024 case DW_OP_reg4:
3025 case DW_OP_reg5:
3026 case DW_OP_reg6:
3027 case DW_OP_reg7:
3028 case DW_OP_reg8:
3029 case DW_OP_reg9:
3030 case DW_OP_reg10:
3031 case DW_OP_reg11:
3032 case DW_OP_reg12:
3033 case DW_OP_reg13:
3034 case DW_OP_reg14:
3035 case DW_OP_reg15:
3036 case DW_OP_reg16:
3037 case DW_OP_reg17:
3038 case DW_OP_reg18:
3039 case DW_OP_reg19:
3040 case DW_OP_reg20:
3041 case DW_OP_reg21:
3042 case DW_OP_reg22:
3043 case DW_OP_reg23:
3044 case DW_OP_reg24:
3045 case DW_OP_reg25:
3046 case DW_OP_reg26:
3047 case DW_OP_reg27:
3048 case DW_OP_reg28:
3049 case DW_OP_reg29:
3050 case DW_OP_reg30:
3051 case DW_OP_reg31:
3052 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
3053 loc->u.reg = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_reg0);
3054 loc->kind = axs_lvalue_register;
3055 break;
3056
3057 case DW_OP_regx:
3058 op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
3059 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
3060 loc->u.reg = dwarf_reg_to_regnum_or_error (arch, reg);
3061 loc->kind = axs_lvalue_register;
3062 break;
3063
3064 case DW_OP_implicit_value:
3065 {
3066 uint64_t len;
3067
3068 op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
3069 if (op_ptr + len > op_end)
3070 error (_("DW_OP_implicit_value: too few bytes available."));
3071 if (len > sizeof (ULONGEST))
3072 error (_("Cannot translate DW_OP_implicit_value of %d bytes"),
3073 (int) len);
3074
3075 ax_const_l (expr, extract_unsigned_integer (op_ptr, len,
3076 byte_order));
3077 op_ptr += len;
3078 dwarf_expr_require_composition (op_ptr, op_end,
3079 "DW_OP_implicit_value");
3080
3081 loc->kind = axs_rvalue;
3082 }
3083 break;
3084
3085 case DW_OP_stack_value:
3086 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
3087 loc->kind = axs_rvalue;
3088 break;
3089
3090 case DW_OP_breg0:
3091 case DW_OP_breg1:
3092 case DW_OP_breg2:
3093 case DW_OP_breg3:
3094 case DW_OP_breg4:
3095 case DW_OP_breg5:
3096 case DW_OP_breg6:
3097 case DW_OP_breg7:
3098 case DW_OP_breg8:
3099 case DW_OP_breg9:
3100 case DW_OP_breg10:
3101 case DW_OP_breg11:
3102 case DW_OP_breg12:
3103 case DW_OP_breg13:
3104 case DW_OP_breg14:
3105 case DW_OP_breg15:
3106 case DW_OP_breg16:
3107 case DW_OP_breg17:
3108 case DW_OP_breg18:
3109 case DW_OP_breg19:
3110 case DW_OP_breg20:
3111 case DW_OP_breg21:
3112 case DW_OP_breg22:
3113 case DW_OP_breg23:
3114 case DW_OP_breg24:
3115 case DW_OP_breg25:
3116 case DW_OP_breg26:
3117 case DW_OP_breg27:
3118 case DW_OP_breg28:
3119 case DW_OP_breg29:
3120 case DW_OP_breg30:
3121 case DW_OP_breg31:
3122 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
3123 i = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_breg0);
3124 ax_reg (expr, i);
3125 if (offset != 0)
3126 {
3127 ax_const_l (expr, offset);
3128 ax_simple (expr, aop_add);
3129 }
3130 break;
3131 case DW_OP_bregx:
3132 {
3133 op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
3134 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
3135 i = dwarf_reg_to_regnum_or_error (arch, reg);
3136 ax_reg (expr, i);
3137 if (offset != 0)
3138 {
3139 ax_const_l (expr, offset);
3140 ax_simple (expr, aop_add);
3141 }
3142 }
3143 break;
3144 case DW_OP_fbreg:
3145 {
3146 const gdb_byte *datastart;
3147 size_t datalen;
3148 const struct block *b;
3149 struct symbol *framefunc;
3150
3151 b = block_for_pc (expr->scope);
3152
3153 if (!b)
3154 error (_("No block found for address"));
3155
3156 framefunc = block_linkage_function (b);
3157
3158 if (!framefunc)
3159 error (_("No function found for block"));
3160
3161 func_get_frame_base_dwarf_block (framefunc, expr->scope,
3162 &datastart, &datalen);
3163
3164 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
3165 dwarf2_compile_expr_to_ax (expr, loc, addr_size, datastart,
3166 datastart + datalen, per_cu);
3167 if (loc->kind == axs_lvalue_register)
3168 require_rvalue (expr, loc);
3169
3170 if (offset != 0)
3171 {
3172 ax_const_l (expr, offset);
3173 ax_simple (expr, aop_add);
3174 }
3175
3176 loc->kind = axs_lvalue_memory;
3177 }
3178 break;
3179
3180 case DW_OP_dup:
3181 ax_simple (expr, aop_dup);
3182 break;
3183
3184 case DW_OP_drop:
3185 ax_simple (expr, aop_pop);
3186 break;
3187
3188 case DW_OP_pick:
3189 offset = *op_ptr++;
3190 ax_pick (expr, offset);
3191 break;
3192
3193 case DW_OP_swap:
3194 ax_simple (expr, aop_swap);
3195 break;
3196
3197 case DW_OP_over:
3198 ax_pick (expr, 1);
3199 break;
3200
3201 case DW_OP_rot:
3202 ax_simple (expr, aop_rot);
3203 break;
3204
3205 case DW_OP_deref:
3206 case DW_OP_deref_size:
3207 {
3208 int size;
3209
3210 if (op == DW_OP_deref_size)
3211 size = *op_ptr++;
3212 else
3213 size = addr_size;
3214
3215 if (size != 1 && size != 2 && size != 4 && size != 8)
3216 error (_("Unsupported size %d in %s"),
3217 size, get_DW_OP_name (op));
3218 access_memory (arch, expr, size * TARGET_CHAR_BIT);
3219 }
3220 break;
3221
3222 case DW_OP_abs:
3223 /* Sign extend the operand. */
3224 ax_ext (expr, addr_size_bits);
3225 ax_simple (expr, aop_dup);
3226 ax_const_l (expr, 0);
3227 ax_simple (expr, aop_less_signed);
3228 ax_simple (expr, aop_log_not);
3229 i = ax_goto (expr, aop_if_goto);
3230 /* We have to emit 0 - X. */
3231 ax_const_l (expr, 0);
3232 ax_simple (expr, aop_swap);
3233 ax_simple (expr, aop_sub);
3234 ax_label (expr, i, expr->len);
3235 break;
3236
3237 case DW_OP_neg:
3238 /* No need to sign extend here. */
3239 ax_const_l (expr, 0);
3240 ax_simple (expr, aop_swap);
3241 ax_simple (expr, aop_sub);
3242 break;
3243
3244 case DW_OP_not:
3245 /* Sign extend the operand. */
3246 ax_ext (expr, addr_size_bits);
3247 ax_simple (expr, aop_bit_not);
3248 break;
3249
3250 case DW_OP_plus_uconst:
3251 op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
3252 /* It would be really weird to emit `DW_OP_plus_uconst 0',
3253 but we micro-optimize anyhow. */
3254 if (reg != 0)
3255 {
3256 ax_const_l (expr, reg);
3257 ax_simple (expr, aop_add);
3258 }
3259 break;
3260
3261 case DW_OP_and:
3262 ax_simple (expr, aop_bit_and);
3263 break;
3264
3265 case DW_OP_div:
3266 /* Sign extend the operands. */
3267 ax_ext (expr, addr_size_bits);
3268 ax_simple (expr, aop_swap);
3269 ax_ext (expr, addr_size_bits);
3270 ax_simple (expr, aop_swap);
3271 ax_simple (expr, aop_div_signed);
3272 break;
3273
3274 case DW_OP_minus:
3275 ax_simple (expr, aop_sub);
3276 break;
3277
3278 case DW_OP_mod:
3279 ax_simple (expr, aop_rem_unsigned);
3280 break;
3281
3282 case DW_OP_mul:
3283 ax_simple (expr, aop_mul);
3284 break;
3285
3286 case DW_OP_or:
3287 ax_simple (expr, aop_bit_or);
3288 break;
3289
3290 case DW_OP_plus:
3291 ax_simple (expr, aop_add);
3292 break;
3293
3294 case DW_OP_shl:
3295 ax_simple (expr, aop_lsh);
3296 break;
3297
3298 case DW_OP_shr:
3299 ax_simple (expr, aop_rsh_unsigned);
3300 break;
3301
3302 case DW_OP_shra:
3303 ax_simple (expr, aop_rsh_signed);
3304 break;
3305
3306 case DW_OP_xor:
3307 ax_simple (expr, aop_bit_xor);
3308 break;
3309
3310 case DW_OP_le:
3311 /* Sign extend the operands. */
3312 ax_ext (expr, addr_size_bits);
3313 ax_simple (expr, aop_swap);
3314 ax_ext (expr, addr_size_bits);
3315 /* Note no swap here: A <= B is !(B < A). */
3316 ax_simple (expr, aop_less_signed);
3317 ax_simple (expr, aop_log_not);
3318 break;
3319
3320 case DW_OP_ge:
3321 /* Sign extend the operands. */
3322 ax_ext (expr, addr_size_bits);
3323 ax_simple (expr, aop_swap);
3324 ax_ext (expr, addr_size_bits);
3325 ax_simple (expr, aop_swap);
3326 /* A >= B is !(A < B). */
3327 ax_simple (expr, aop_less_signed);
3328 ax_simple (expr, aop_log_not);
3329 break;
3330
3331 case DW_OP_eq:
3332 /* Sign extend the operands. */
3333 ax_ext (expr, addr_size_bits);
3334 ax_simple (expr, aop_swap);
3335 ax_ext (expr, addr_size_bits);
3336 /* No need for a second swap here. */
3337 ax_simple (expr, aop_equal);
3338 break;
3339
3340 case DW_OP_lt:
3341 /* Sign extend the operands. */
3342 ax_ext (expr, addr_size_bits);
3343 ax_simple (expr, aop_swap);
3344 ax_ext (expr, addr_size_bits);
3345 ax_simple (expr, aop_swap);
3346 ax_simple (expr, aop_less_signed);
3347 break;
3348
3349 case DW_OP_gt:
3350 /* Sign extend the operands. */
3351 ax_ext (expr, addr_size_bits);
3352 ax_simple (expr, aop_swap);
3353 ax_ext (expr, addr_size_bits);
3354 /* Note no swap here: A > B is B < A. */
3355 ax_simple (expr, aop_less_signed);
3356 break;
3357
3358 case DW_OP_ne:
3359 /* Sign extend the operands. */
3360 ax_ext (expr, addr_size_bits);
3361 ax_simple (expr, aop_swap);
3362 ax_ext (expr, addr_size_bits);
3363 /* No need for a swap here. */
3364 ax_simple (expr, aop_equal);
3365 ax_simple (expr, aop_log_not);
3366 break;
3367
3368 case DW_OP_call_frame_cfa:
3369 {
3370 int regnum;
3371 CORE_ADDR text_offset;
3372 LONGEST off;
3373 const gdb_byte *cfa_start, *cfa_end;
3374
3375 if (dwarf2_fetch_cfa_info (arch, expr->scope, per_cu,
3376 &regnum, &off,
3377 &text_offset, &cfa_start, &cfa_end))
3378 {
3379 /* Register. */
3380 ax_reg (expr, regnum);
3381 if (off != 0)
3382 {
3383 ax_const_l (expr, off);
3384 ax_simple (expr, aop_add);
3385 }
3386 }
3387 else
3388 {
3389 /* Another expression. */
3390 ax_const_l (expr, text_offset);
3391 dwarf2_compile_expr_to_ax (expr, loc, addr_size, cfa_start,
3392 cfa_end, per_cu);
3393 }
3394
3395 loc->kind = axs_lvalue_memory;
3396 }
3397 break;
3398
3399 case DW_OP_GNU_push_tls_address:
3400 case DW_OP_form_tls_address:
3401 unimplemented (op);
3402 break;
3403
3404 case DW_OP_push_object_address:
3405 unimplemented (op);
3406 break;
3407
3408 case DW_OP_skip:
3409 offset = extract_signed_integer (op_ptr, 2, byte_order);
3410 op_ptr += 2;
3411 i = ax_goto (expr, aop_goto);
3412 dw_labels.push_back (op_ptr + offset - base);
3413 patches.push_back (i);
3414 break;
3415
3416 case DW_OP_bra:
3417 offset = extract_signed_integer (op_ptr, 2, byte_order);
3418 op_ptr += 2;
3419 /* Zero extend the operand. */
3420 ax_zero_ext (expr, addr_size_bits);
3421 i = ax_goto (expr, aop_if_goto);
3422 dw_labels.push_back (op_ptr + offset - base);
3423 patches.push_back (i);
3424 break;
3425
3426 case DW_OP_nop:
3427 break;
3428
3429 case DW_OP_piece:
3430 case DW_OP_bit_piece:
3431 {
3432 uint64_t size;
3433
3434 if (op_ptr - 1 == previous_piece)
3435 error (_("Cannot translate empty pieces to agent expressions"));
3436 previous_piece = op_ptr - 1;
3437
3438 op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
3439 if (op == DW_OP_piece)
3440 {
3441 size *= 8;
3442 uoffset = 0;
3443 }
3444 else
3445 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
3446
3447 if (bits_collected + size > 8 * sizeof (LONGEST))
3448 error (_("Expression pieces exceed word size"));
3449
3450 /* Access the bits. */
3451 switch (loc->kind)
3452 {
3453 case axs_lvalue_register:
3454 ax_reg (expr, loc->u.reg);
3455 break;
3456
3457 case axs_lvalue_memory:
3458 /* Offset the pointer, if needed. */
3459 if (uoffset > 8)
3460 {
3461 ax_const_l (expr, uoffset / 8);
3462 ax_simple (expr, aop_add);
3463 uoffset %= 8;
3464 }
3465 access_memory (arch, expr, size);
3466 break;
3467 }
3468
3469 /* For a bits-big-endian target, shift up what we already
3470 have. For a bits-little-endian target, shift up the
3471 new data. Note that there is a potential bug here if
3472 the DWARF expression leaves multiple values on the
3473 stack. */
3474 if (bits_collected > 0)
3475 {
3476 if (bits_big_endian)
3477 {
3478 ax_simple (expr, aop_swap);
3479 ax_const_l (expr, size);
3480 ax_simple (expr, aop_lsh);
3481 /* We don't need a second swap here, because
3482 aop_bit_or is symmetric. */
3483 }
3484 else
3485 {
3486 ax_const_l (expr, size);
3487 ax_simple (expr, aop_lsh);
3488 }
3489 ax_simple (expr, aop_bit_or);
3490 }
3491
3492 bits_collected += size;
3493 loc->kind = axs_rvalue;
3494 }
3495 break;
3496
3497 case DW_OP_GNU_uninit:
3498 unimplemented (op);
3499
3500 case DW_OP_call2:
3501 case DW_OP_call4:
3502 {
3503 struct dwarf2_locexpr_baton block;
3504 int size = (op == DW_OP_call2 ? 2 : 4);
3505
3506 uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
3507 op_ptr += size;
3508
3509 cu_offset cuoffset = (cu_offset) uoffset;
3510 block = dwarf2_fetch_die_loc_cu_off (cuoffset, per_cu,
3511 get_ax_pc, expr);
3512
3513 /* DW_OP_call_ref is currently not supported. */
3514 gdb_assert (block.per_cu == per_cu);
3515
3516 dwarf2_compile_expr_to_ax (expr, loc, addr_size, block.data,
3517 block.data + block.size, per_cu);
3518 }
3519 break;
3520
3521 case DW_OP_call_ref:
3522 unimplemented (op);
3523
3524 case DW_OP_GNU_variable_value:
3525 unimplemented (op);
3526
3527 default:
3528 unimplemented (op);
3529 }
3530 }
3531
3532 /* Patch all the branches we emitted. */
3533 for (int i = 0; i < patches.size (); ++i)
3534 {
3535 int targ = offsets[dw_labels[i]];
3536 if (targ == -1)
3537 internal_error (__FILE__, __LINE__, _("invalid label"));
3538 ax_label (expr, patches[i], targ);
3539 }
3540 }
3541
3542 \f
3543 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
3544 evaluator to calculate the location. */
3545 static struct value *
3546 locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
3547 {
3548 struct dwarf2_locexpr_baton *dlbaton
3549 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
3550 struct value *val;
3551
3552 val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
3553 dlbaton->size, dlbaton->per_cu);
3554
3555 return val;
3556 }
3557
3558 /* Return the value of SYMBOL in FRAME at (callee) FRAME's function
3559 entry. SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
3560 will be thrown. */
3561
3562 static struct value *
3563 locexpr_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
3564 {
3565 struct dwarf2_locexpr_baton *dlbaton
3566 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
3567
3568 return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, dlbaton->data,
3569 dlbaton->size);
3570 }
3571
3572 /* Implementation of get_symbol_read_needs from
3573 symbol_computed_ops. */
3574
3575 static enum symbol_needs_kind
3576 locexpr_get_symbol_read_needs (struct symbol *symbol)
3577 {
3578 struct dwarf2_locexpr_baton *dlbaton
3579 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
3580
3581 return dwarf2_loc_desc_get_symbol_read_needs (dlbaton->data, dlbaton->size,
3582 dlbaton->per_cu);
3583 }
3584
3585 /* Return true if DATA points to the end of a piece. END is one past
3586 the last byte in the expression. */
3587
3588 static int
3589 piece_end_p (const gdb_byte *data, const gdb_byte *end)
3590 {
3591 return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece;
3592 }
3593
3594 /* Helper for locexpr_describe_location_piece that finds the name of a
3595 DWARF register. */
3596
3597 static const char *
3598 locexpr_regname (struct gdbarch *gdbarch, int dwarf_regnum)
3599 {
3600 int regnum;
3601
3602 /* This doesn't use dwarf_reg_to_regnum_or_error on purpose.
3603 We'd rather print *something* here than throw an error. */
3604 regnum = dwarf_reg_to_regnum (gdbarch, dwarf_regnum);
3605 /* gdbarch_register_name may just return "", return something more
3606 descriptive for bad register numbers. */
3607 if (regnum == -1)
3608 {
3609 /* The text is output as "$bad_register_number".
3610 That is why we use the underscores. */
3611 return _("bad_register_number");
3612 }
3613 return gdbarch_register_name (gdbarch, regnum);
3614 }
3615
3616 /* Nicely describe a single piece of a location, returning an updated
3617 position in the bytecode sequence. This function cannot recognize
3618 all locations; if a location is not recognized, it simply returns
3619 DATA. If there is an error during reading, e.g. we run off the end
3620 of the buffer, an error is thrown. */
3621
3622 static const gdb_byte *
3623 locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
3624 CORE_ADDR addr, struct objfile *objfile,
3625 struct dwarf2_per_cu_data *per_cu,
3626 const gdb_byte *data, const gdb_byte *end,
3627 unsigned int addr_size)
3628 {
3629 struct gdbarch *gdbarch = get_objfile_arch (objfile);
3630 size_t leb128_size;
3631
3632 if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
3633 {
3634 fprintf_filtered (stream, _("a variable in $%s"),
3635 locexpr_regname (gdbarch, data[0] - DW_OP_reg0));
3636 data += 1;
3637 }
3638 else if (data[0] == DW_OP_regx)
3639 {
3640 uint64_t reg;
3641
3642 data = safe_read_uleb128 (data + 1, end, &reg);
3643 fprintf_filtered (stream, _("a variable in $%s"),
3644 locexpr_regname (gdbarch, reg));
3645 }
3646 else if (data[0] == DW_OP_fbreg)
3647 {
3648 const struct block *b;
3649 struct symbol *framefunc;
3650 int frame_reg = 0;
3651 int64_t frame_offset;
3652 const gdb_byte *base_data, *new_data, *save_data = data;
3653 size_t base_size;
3654 int64_t base_offset = 0;
3655
3656 new_data = safe_read_sleb128 (data + 1, end, &frame_offset);
3657 if (!piece_end_p (new_data, end))
3658 return data;
3659 data = new_data;
3660
3661 b = block_for_pc (addr);
3662
3663 if (!b)
3664 error (_("No block found for address for symbol \"%s\"."),
3665 symbol->print_name ());
3666
3667 framefunc = block_linkage_function (b);
3668
3669 if (!framefunc)
3670 error (_("No function found for block for symbol \"%s\"."),
3671 symbol->print_name ());
3672
3673 func_get_frame_base_dwarf_block (framefunc, addr, &base_data, &base_size);
3674
3675 if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
3676 {
3677 const gdb_byte *buf_end;
3678
3679 frame_reg = base_data[0] - DW_OP_breg0;
3680 buf_end = safe_read_sleb128 (base_data + 1, base_data + base_size,
3681 &base_offset);
3682 if (buf_end != base_data + base_size)
3683 error (_("Unexpected opcode after "
3684 "DW_OP_breg%u for symbol \"%s\"."),
3685 frame_reg, symbol->print_name ());
3686 }
3687 else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
3688 {
3689 /* The frame base is just the register, with no offset. */
3690 frame_reg = base_data[0] - DW_OP_reg0;
3691 base_offset = 0;
3692 }
3693 else
3694 {
3695 /* We don't know what to do with the frame base expression,
3696 so we can't trace this variable; give up. */
3697 return save_data;
3698 }
3699
3700 fprintf_filtered (stream,
3701 _("a variable at frame base reg $%s offset %s+%s"),
3702 locexpr_regname (gdbarch, frame_reg),
3703 plongest (base_offset), plongest (frame_offset));
3704 }
3705 else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
3706 && piece_end_p (data, end))
3707 {
3708 int64_t offset;
3709
3710 data = safe_read_sleb128 (data + 1, end, &offset);
3711
3712 fprintf_filtered (stream,
3713 _("a variable at offset %s from base reg $%s"),
3714 plongest (offset),
3715 locexpr_regname (gdbarch, data[0] - DW_OP_breg0));
3716 }
3717
3718 /* The location expression for a TLS variable looks like this (on a
3719 64-bit LE machine):
3720
3721 DW_AT_location : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
3722 (DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
3723
3724 0x3 is the encoding for DW_OP_addr, which has an operand as long
3725 as the size of an address on the target machine (here is 8
3726 bytes). Note that more recent version of GCC emit DW_OP_const4u
3727 or DW_OP_const8u, depending on address size, rather than
3728 DW_OP_addr. 0xe0 is the encoding for DW_OP_GNU_push_tls_address.
3729 The operand represents the offset at which the variable is within
3730 the thread local storage. */
3731
3732 else if (data + 1 + addr_size < end
3733 && (data[0] == DW_OP_addr
3734 || (addr_size == 4 && data[0] == DW_OP_const4u)
3735 || (addr_size == 8 && data[0] == DW_OP_const8u))
3736 && (data[1 + addr_size] == DW_OP_GNU_push_tls_address
3737 || data[1 + addr_size] == DW_OP_form_tls_address)
3738 && piece_end_p (data + 2 + addr_size, end))
3739 {
3740 ULONGEST offset;
3741 offset = extract_unsigned_integer (data + 1, addr_size,
3742 gdbarch_byte_order (gdbarch));
3743
3744 fprintf_filtered (stream,
3745 _("a thread-local variable at offset 0x%s "
3746 "in the thread-local storage for `%s'"),
3747 phex_nz (offset, addr_size), objfile_name (objfile));
3748
3749 data += 1 + addr_size + 1;
3750 }
3751
3752 /* With -gsplit-dwarf a TLS variable can also look like this:
3753 DW_AT_location : 3 byte block: fc 4 e0
3754 (DW_OP_GNU_const_index: 4;
3755 DW_OP_GNU_push_tls_address) */
3756 else if (data + 3 <= end
3757 && data + 1 + (leb128_size = skip_leb128 (data + 1, end)) < end
3758 && data[0] == DW_OP_GNU_const_index
3759 && leb128_size > 0
3760 && (data[1 + leb128_size] == DW_OP_GNU_push_tls_address
3761 || data[1 + leb128_size] == DW_OP_form_tls_address)
3762 && piece_end_p (data + 2 + leb128_size, end))
3763 {
3764 uint64_t offset;
3765
3766 data = safe_read_uleb128 (data + 1, end, &offset);
3767 offset = dwarf2_read_addr_index (per_cu, offset);
3768 fprintf_filtered (stream,
3769 _("a thread-local variable at offset 0x%s "
3770 "in the thread-local storage for `%s'"),
3771 phex_nz (offset, addr_size), objfile_name (objfile));
3772 ++data;
3773 }
3774
3775 else if (data[0] >= DW_OP_lit0
3776 && data[0] <= DW_OP_lit31
3777 && data + 1 < end
3778 && data[1] == DW_OP_stack_value)
3779 {
3780 fprintf_filtered (stream, _("the constant %d"), data[0] - DW_OP_lit0);
3781 data += 2;
3782 }
3783
3784 return data;
3785 }
3786
3787 /* Disassemble an expression, stopping at the end of a piece or at the
3788 end of the expression. Returns a pointer to the next unread byte
3789 in the input expression. If ALL is nonzero, then this function
3790 will keep going until it reaches the end of the expression.
3791 If there is an error during reading, e.g. we run off the end
3792 of the buffer, an error is thrown. */
3793
3794 static const gdb_byte *
3795 disassemble_dwarf_expression (struct ui_file *stream,
3796 struct gdbarch *arch, unsigned int addr_size,
3797 int offset_size, const gdb_byte *start,
3798 const gdb_byte *data, const gdb_byte *end,
3799 int indent, int all,
3800 struct dwarf2_per_cu_data *per_cu)
3801 {
3802 while (data < end
3803 && (all
3804 || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
3805 {
3806 enum dwarf_location_atom op = (enum dwarf_location_atom) *data++;
3807 uint64_t ul;
3808 int64_t l;
3809 const char *name;
3810
3811 name = get_DW_OP_name (op);
3812
3813 if (!name)
3814 error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
3815 op, (long) (data - 1 - start));
3816 fprintf_filtered (stream, " %*ld: %s", indent + 4,
3817 (long) (data - 1 - start), name);
3818
3819 switch (op)
3820 {
3821 case DW_OP_addr:
3822 ul = extract_unsigned_integer (data, addr_size,
3823 gdbarch_byte_order (arch));
3824 data += addr_size;
3825 fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
3826 break;
3827
3828 case DW_OP_const1u:
3829 ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch));
3830 data += 1;
3831 fprintf_filtered (stream, " %s", pulongest (ul));
3832 break;
3833 case DW_OP_const1s:
3834 l = extract_signed_integer (data, 1, gdbarch_byte_order (arch));
3835 data += 1;
3836 fprintf_filtered (stream, " %s", plongest (l));
3837 break;
3838 case DW_OP_const2u:
3839 ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
3840 data += 2;
3841 fprintf_filtered (stream, " %s", pulongest (ul));
3842 break;
3843 case DW_OP_const2s:
3844 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3845 data += 2;
3846 fprintf_filtered (stream, " %s", plongest (l));
3847 break;
3848 case DW_OP_const4u:
3849 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
3850 data += 4;
3851 fprintf_filtered (stream, " %s", pulongest (ul));
3852 break;
3853 case DW_OP_const4s:
3854 l = extract_signed_integer (data, 4, gdbarch_byte_order (arch));
3855 data += 4;
3856 fprintf_filtered (stream, " %s", plongest (l));
3857 break;
3858 case DW_OP_const8u:
3859 ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch));
3860 data += 8;
3861 fprintf_filtered (stream, " %s", pulongest (ul));
3862 break;
3863 case DW_OP_const8s:
3864 l = extract_signed_integer (data, 8, gdbarch_byte_order (arch));
3865 data += 8;
3866 fprintf_filtered (stream, " %s", plongest (l));
3867 break;
3868 case DW_OP_constu:
3869 data = safe_read_uleb128 (data, end, &ul);
3870 fprintf_filtered (stream, " %s", pulongest (ul));
3871 break;
3872 case DW_OP_consts:
3873 data = safe_read_sleb128 (data, end, &l);
3874 fprintf_filtered (stream, " %s", plongest (l));
3875 break;
3876
3877 case DW_OP_reg0:
3878 case DW_OP_reg1:
3879 case DW_OP_reg2:
3880 case DW_OP_reg3:
3881 case DW_OP_reg4:
3882 case DW_OP_reg5:
3883 case DW_OP_reg6:
3884 case DW_OP_reg7:
3885 case DW_OP_reg8:
3886 case DW_OP_reg9:
3887 case DW_OP_reg10:
3888 case DW_OP_reg11:
3889 case DW_OP_reg12:
3890 case DW_OP_reg13:
3891 case DW_OP_reg14:
3892 case DW_OP_reg15:
3893 case DW_OP_reg16:
3894 case DW_OP_reg17:
3895 case DW_OP_reg18:
3896 case DW_OP_reg19:
3897 case DW_OP_reg20:
3898 case DW_OP_reg21:
3899 case DW_OP_reg22:
3900 case DW_OP_reg23:
3901 case DW_OP_reg24:
3902 case DW_OP_reg25:
3903 case DW_OP_reg26:
3904 case DW_OP_reg27:
3905 case DW_OP_reg28:
3906 case DW_OP_reg29:
3907 case DW_OP_reg30:
3908 case DW_OP_reg31:
3909 fprintf_filtered (stream, " [$%s]",
3910 locexpr_regname (arch, op - DW_OP_reg0));
3911 break;
3912
3913 case DW_OP_regx:
3914 data = safe_read_uleb128 (data, end, &ul);
3915 fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
3916 locexpr_regname (arch, (int) ul));
3917 break;
3918
3919 case DW_OP_implicit_value:
3920 data = safe_read_uleb128 (data, end, &ul);
3921 data += ul;
3922 fprintf_filtered (stream, " %s", pulongest (ul));
3923 break;
3924
3925 case DW_OP_breg0:
3926 case DW_OP_breg1:
3927 case DW_OP_breg2:
3928 case DW_OP_breg3:
3929 case DW_OP_breg4:
3930 case DW_OP_breg5:
3931 case DW_OP_breg6:
3932 case DW_OP_breg7:
3933 case DW_OP_breg8:
3934 case DW_OP_breg9:
3935 case DW_OP_breg10:
3936 case DW_OP_breg11:
3937 case DW_OP_breg12:
3938 case DW_OP_breg13:
3939 case DW_OP_breg14:
3940 case DW_OP_breg15:
3941 case DW_OP_breg16:
3942 case DW_OP_breg17:
3943 case DW_OP_breg18:
3944 case DW_OP_breg19:
3945 case DW_OP_breg20:
3946 case DW_OP_breg21:
3947 case DW_OP_breg22:
3948 case DW_OP_breg23:
3949 case DW_OP_breg24:
3950 case DW_OP_breg25:
3951 case DW_OP_breg26:
3952 case DW_OP_breg27:
3953 case DW_OP_breg28:
3954 case DW_OP_breg29:
3955 case DW_OP_breg30:
3956 case DW_OP_breg31:
3957 data = safe_read_sleb128 (data, end, &l);
3958 fprintf_filtered (stream, " %s [$%s]", plongest (l),
3959 locexpr_regname (arch, op - DW_OP_breg0));
3960 break;
3961
3962 case DW_OP_bregx:
3963 data = safe_read_uleb128 (data, end, &ul);
3964 data = safe_read_sleb128 (data, end, &l);
3965 fprintf_filtered (stream, " register %s [$%s] offset %s",
3966 pulongest (ul),
3967 locexpr_regname (arch, (int) ul),
3968 plongest (l));
3969 break;
3970
3971 case DW_OP_fbreg:
3972 data = safe_read_sleb128 (data, end, &l);
3973 fprintf_filtered (stream, " %s", plongest (l));
3974 break;
3975
3976 case DW_OP_xderef_size:
3977 case DW_OP_deref_size:
3978 case DW_OP_pick:
3979 fprintf_filtered (stream, " %d", *data);
3980 ++data;
3981 break;
3982
3983 case DW_OP_plus_uconst:
3984 data = safe_read_uleb128 (data, end, &ul);
3985 fprintf_filtered (stream, " %s", pulongest (ul));
3986 break;
3987
3988 case DW_OP_skip:
3989 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3990 data += 2;
3991 fprintf_filtered (stream, " to %ld",
3992 (long) (data + l - start));
3993 break;
3994
3995 case DW_OP_bra:
3996 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
3997 data += 2;
3998 fprintf_filtered (stream, " %ld",
3999 (long) (data + l - start));
4000 break;
4001
4002 case DW_OP_call2:
4003 ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
4004 data += 2;
4005 fprintf_filtered (stream, " offset %s", phex_nz (ul, 2));
4006 break;
4007
4008 case DW_OP_call4:
4009 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
4010 data += 4;
4011 fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
4012 break;
4013
4014 case DW_OP_call_ref:
4015 ul = extract_unsigned_integer (data, offset_size,
4016 gdbarch_byte_order (arch));
4017 data += offset_size;
4018 fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
4019 break;
4020
4021 case DW_OP_piece:
4022 data = safe_read_uleb128 (data, end, &ul);
4023 fprintf_filtered (stream, " %s (bytes)", pulongest (ul));
4024 break;
4025
4026 case DW_OP_bit_piece:
4027 {
4028 uint64_t offset;
4029
4030 data = safe_read_uleb128 (data, end, &ul);
4031 data = safe_read_uleb128 (data, end, &offset);
4032 fprintf_filtered (stream, " size %s offset %s (bits)",
4033 pulongest (ul), pulongest (offset));
4034 }
4035 break;
4036
4037 case DW_OP_implicit_pointer:
4038 case DW_OP_GNU_implicit_pointer:
4039 {
4040 ul = extract_unsigned_integer (data, offset_size,
4041 gdbarch_byte_order (arch));
4042 data += offset_size;
4043
4044 data = safe_read_sleb128 (data, end, &l);
4045
4046 fprintf_filtered (stream, " DIE %s offset %s",
4047 phex_nz (ul, offset_size),
4048 plongest (l));
4049 }
4050 break;
4051
4052 case DW_OP_deref_type:
4053 case DW_OP_GNU_deref_type:
4054 {
4055 int deref_addr_size = *data++;
4056 struct type *type;
4057
4058 data = safe_read_uleb128 (data, end, &ul);
4059 cu_offset offset = (cu_offset) ul;
4060 type = dwarf2_get_die_type (offset, per_cu);
4061 fprintf_filtered (stream, "<");
4062 type_print (type, "", stream, -1);
4063 fprintf_filtered (stream, " [0x%s]> %d",
4064 phex_nz (to_underlying (offset), 0),
4065 deref_addr_size);
4066 }
4067 break;
4068
4069 case DW_OP_const_type:
4070 case DW_OP_GNU_const_type:
4071 {
4072 struct type *type;
4073
4074 data = safe_read_uleb128 (data, end, &ul);
4075 cu_offset type_die = (cu_offset) ul;
4076 type = dwarf2_get_die_type (type_die, per_cu);
4077 fprintf_filtered (stream, "<");
4078 type_print (type, "", stream, -1);
4079 fprintf_filtered (stream, " [0x%s]>",
4080 phex_nz (to_underlying (type_die), 0));
4081 }
4082 break;
4083
4084 case DW_OP_regval_type:
4085 case DW_OP_GNU_regval_type:
4086 {
4087 uint64_t reg;
4088 struct type *type;
4089
4090 data = safe_read_uleb128 (data, end, &reg);
4091 data = safe_read_uleb128 (data, end, &ul);
4092 cu_offset type_die = (cu_offset) ul;
4093
4094 type = dwarf2_get_die_type (type_die, per_cu);
4095 fprintf_filtered (stream, "<");
4096 type_print (type, "", stream, -1);
4097 fprintf_filtered (stream, " [0x%s]> [$%s]",
4098 phex_nz (to_underlying (type_die), 0),
4099 locexpr_regname (arch, reg));
4100 }
4101 break;
4102
4103 case DW_OP_convert:
4104 case DW_OP_GNU_convert:
4105 case DW_OP_reinterpret:
4106 case DW_OP_GNU_reinterpret:
4107 {
4108 data = safe_read_uleb128 (data, end, &ul);
4109 cu_offset type_die = (cu_offset) ul;
4110
4111 if (to_underlying (type_die) == 0)
4112 fprintf_filtered (stream, "<0>");
4113 else
4114 {
4115 struct type *type;
4116
4117 type = dwarf2_get_die_type (type_die, per_cu);
4118 fprintf_filtered (stream, "<");
4119 type_print (type, "", stream, -1);
4120 fprintf_filtered (stream, " [0x%s]>",
4121 phex_nz (to_underlying (type_die), 0));
4122 }
4123 }
4124 break;
4125
4126 case DW_OP_entry_value:
4127 case DW_OP_GNU_entry_value:
4128 data = safe_read_uleb128 (data, end, &ul);
4129 fputc_filtered ('\n', stream);
4130 disassemble_dwarf_expression (stream, arch, addr_size, offset_size,
4131 start, data, data + ul, indent + 2,
4132 all, per_cu);
4133 data += ul;
4134 continue;
4135
4136 case DW_OP_GNU_parameter_ref:
4137 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
4138 data += 4;
4139 fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
4140 break;
4141
4142 case DW_OP_addrx:
4143 case DW_OP_GNU_addr_index:
4144 data = safe_read_uleb128 (data, end, &ul);
4145 ul = dwarf2_read_addr_index (per_cu, ul);
4146 fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
4147 break;
4148 case DW_OP_GNU_const_index:
4149 data = safe_read_uleb128 (data, end, &ul);
4150 ul = dwarf2_read_addr_index (per_cu, ul);
4151 fprintf_filtered (stream, " %s", pulongest (ul));
4152 break;
4153
4154 case DW_OP_GNU_variable_value:
4155 ul = extract_unsigned_integer (data, offset_size,
4156 gdbarch_byte_order (arch));
4157 data += offset_size;
4158 fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
4159 break;
4160 }
4161
4162 fprintf_filtered (stream, "\n");
4163 }
4164
4165 return data;
4166 }
4167
4168 static bool dwarf_always_disassemble;
4169
4170 static void
4171 show_dwarf_always_disassemble (struct ui_file *file, int from_tty,
4172 struct cmd_list_element *c, const char *value)
4173 {
4174 fprintf_filtered (file,
4175 _("Whether to always disassemble "
4176 "DWARF expressions is %s.\n"),
4177 value);
4178 }
4179
4180 /* Describe a single location, which may in turn consist of multiple
4181 pieces. */
4182
4183 static void
4184 locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
4185 struct ui_file *stream,
4186 const gdb_byte *data, size_t size,
4187 struct objfile *objfile, unsigned int addr_size,
4188 int offset_size, struct dwarf2_per_cu_data *per_cu)
4189 {
4190 const gdb_byte *end = data + size;
4191 int first_piece = 1, bad = 0;
4192
4193 while (data < end)
4194 {
4195 const gdb_byte *here = data;
4196 int disassemble = 1;
4197
4198 if (first_piece)
4199 first_piece = 0;
4200 else
4201 fprintf_filtered (stream, _(", and "));
4202
4203 if (!dwarf_always_disassemble)
4204 {
4205 data = locexpr_describe_location_piece (symbol, stream,
4206 addr, objfile, per_cu,
4207 data, end, addr_size);
4208 /* If we printed anything, or if we have an empty piece,
4209 then don't disassemble. */
4210 if (data != here
4211 || data[0] == DW_OP_piece
4212 || data[0] == DW_OP_bit_piece)
4213 disassemble = 0;
4214 }
4215 if (disassemble)
4216 {
4217 fprintf_filtered (stream, _("a complex DWARF expression:\n"));
4218 data = disassemble_dwarf_expression (stream,
4219 get_objfile_arch (objfile),
4220 addr_size, offset_size, data,
4221 data, end, 0,
4222 dwarf_always_disassemble,
4223 per_cu);
4224 }
4225
4226 if (data < end)
4227 {
4228 int empty = data == here;
4229
4230 if (disassemble)
4231 fprintf_filtered (stream, " ");
4232 if (data[0] == DW_OP_piece)
4233 {
4234 uint64_t bytes;
4235
4236 data = safe_read_uleb128 (data + 1, end, &bytes);
4237
4238 if (empty)
4239 fprintf_filtered (stream, _("an empty %s-byte piece"),
4240 pulongest (bytes));
4241 else
4242 fprintf_filtered (stream, _(" [%s-byte piece]"),
4243 pulongest (bytes));
4244 }
4245 else if (data[0] == DW_OP_bit_piece)
4246 {
4247 uint64_t bits, offset;
4248
4249 data = safe_read_uleb128 (data + 1, end, &bits);
4250 data = safe_read_uleb128 (data, end, &offset);
4251
4252 if (empty)
4253 fprintf_filtered (stream,
4254 _("an empty %s-bit piece"),
4255 pulongest (bits));
4256 else
4257 fprintf_filtered (stream,
4258 _(" [%s-bit piece, offset %s bits]"),
4259 pulongest (bits), pulongest (offset));
4260 }
4261 else
4262 {
4263 bad = 1;
4264 break;
4265 }
4266 }
4267 }
4268
4269 if (bad || data > end)
4270 error (_("Corrupted DWARF2 expression for \"%s\"."),
4271 symbol->print_name ());
4272 }
4273
4274 /* Print a natural-language description of SYMBOL to STREAM. This
4275 version is for a symbol with a single location. */
4276
4277 static void
4278 locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
4279 struct ui_file *stream)
4280 {
4281 struct dwarf2_locexpr_baton *dlbaton
4282 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
4283 struct objfile *objfile = dlbaton->per_cu->objfile ();
4284 unsigned int addr_size = dlbaton->per_cu->addr_size ();
4285 int offset_size = dlbaton->per_cu->offset_size ();
4286
4287 locexpr_describe_location_1 (symbol, addr, stream,
4288 dlbaton->data, dlbaton->size,
4289 objfile, addr_size, offset_size,
4290 dlbaton->per_cu);
4291 }
4292
4293 /* Describe the location of SYMBOL as an agent value in VALUE, generating
4294 any necessary bytecode in AX. */
4295
4296 static void
4297 locexpr_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
4298 struct axs_value *value)
4299 {
4300 struct dwarf2_locexpr_baton *dlbaton
4301 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
4302 unsigned int addr_size = dlbaton->per_cu->addr_size ();
4303
4304 if (dlbaton->size == 0)
4305 value->optimized_out = 1;
4306 else
4307 dwarf2_compile_expr_to_ax (ax, value, addr_size, dlbaton->data,
4308 dlbaton->data + dlbaton->size, dlbaton->per_cu);
4309 }
4310
4311 /* symbol_computed_ops 'generate_c_location' method. */
4312
4313 static void
4314 locexpr_generate_c_location (struct symbol *sym, string_file *stream,
4315 struct gdbarch *gdbarch,
4316 unsigned char *registers_used,
4317 CORE_ADDR pc, const char *result_name)
4318 {
4319 struct dwarf2_locexpr_baton *dlbaton
4320 = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (sym);
4321 unsigned int addr_size = dlbaton->per_cu->addr_size ();
4322
4323 if (dlbaton->size == 0)
4324 error (_("symbol \"%s\" is optimized out"), sym->natural_name ());
4325
4326 compile_dwarf_expr_to_c (stream, result_name,
4327 sym, pc, gdbarch, registers_used, addr_size,
4328 dlbaton->data, dlbaton->data + dlbaton->size,
4329 dlbaton->per_cu);
4330 }
4331
4332 /* The set of location functions used with the DWARF-2 expression
4333 evaluator. */
4334 const struct symbol_computed_ops dwarf2_locexpr_funcs = {
4335 locexpr_read_variable,
4336 locexpr_read_variable_at_entry,
4337 locexpr_get_symbol_read_needs,
4338 locexpr_describe_location,
4339 0, /* location_has_loclist */
4340 locexpr_tracepoint_var_ref,
4341 locexpr_generate_c_location
4342 };
4343
4344
4345 /* Wrapper functions for location lists. These generally find
4346 the appropriate location expression and call something above. */
4347
4348 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
4349 evaluator to calculate the location. */
4350 static struct value *
4351 loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
4352 {
4353 struct dwarf2_loclist_baton *dlbaton
4354 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
4355 struct value *val;
4356 const gdb_byte *data;
4357 size_t size;
4358 CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0;
4359
4360 data = dwarf2_find_location_expression (dlbaton, &size, pc);
4361 val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size,
4362 dlbaton->per_cu);
4363
4364 return val;
4365 }
4366
4367 /* Read variable SYMBOL like loclist_read_variable at (callee) FRAME's function
4368 entry. SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
4369 will be thrown.
4370
4371 Function always returns non-NULL value, it may be marked optimized out if
4372 inferior frame information is not available. It throws NO_ENTRY_VALUE_ERROR
4373 if it cannot resolve the parameter for any reason. */
4374
4375 static struct value *
4376 loclist_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
4377 {
4378 struct dwarf2_loclist_baton *dlbaton
4379 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
4380 const gdb_byte *data;
4381 size_t size;
4382 CORE_ADDR pc;
4383
4384 if (frame == NULL || !get_frame_func_if_available (frame, &pc))
4385 return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
4386
4387 data = dwarf2_find_location_expression (dlbaton, &size, pc);
4388 if (data == NULL)
4389 return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
4390
4391 return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, data, size);
4392 }
4393
4394 /* Implementation of get_symbol_read_needs from
4395 symbol_computed_ops. */
4396
4397 static enum symbol_needs_kind
4398 loclist_symbol_needs (struct symbol *symbol)
4399 {
4400 /* If there's a location list, then assume we need to have a frame
4401 to choose the appropriate location expression. With tracking of
4402 global variables this is not necessarily true, but such tracking
4403 is disabled in GCC at the moment until we figure out how to
4404 represent it. */
4405
4406 return SYMBOL_NEEDS_FRAME;
4407 }
4408
4409 /* Print a natural-language description of SYMBOL to STREAM. This
4410 version applies when there is a list of different locations, each
4411 with a specified address range. */
4412
4413 static void
4414 loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
4415 struct ui_file *stream)
4416 {
4417 struct dwarf2_loclist_baton *dlbaton
4418 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
4419 const gdb_byte *loc_ptr, *buf_end;
4420 struct objfile *objfile = dlbaton->per_cu->objfile ();
4421 struct gdbarch *gdbarch = get_objfile_arch (objfile);
4422 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4423 unsigned int addr_size = dlbaton->per_cu->addr_size ();
4424 int offset_size = dlbaton->per_cu->offset_size ();
4425 int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
4426 /* Adjust base_address for relocatable objects. */
4427 CORE_ADDR base_offset = dlbaton->per_cu->text_offset ();
4428 CORE_ADDR base_address = dlbaton->base_address + base_offset;
4429 int done = 0;
4430
4431 loc_ptr = dlbaton->data;
4432 buf_end = dlbaton->data + dlbaton->size;
4433
4434 fprintf_filtered (stream, _("multi-location:\n"));
4435
4436 /* Iterate through locations until we run out. */
4437 while (!done)
4438 {
4439 CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
4440 int length;
4441 enum debug_loc_kind kind;
4442 const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
4443
4444 if (dlbaton->from_dwo)
4445 kind = decode_debug_loc_dwo_addresses (dlbaton->per_cu,
4446 loc_ptr, buf_end, &new_ptr,
4447 &low, &high, byte_order);
4448 else
4449 kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
4450 &low, &high,
4451 byte_order, addr_size,
4452 signed_addr_p);
4453 loc_ptr = new_ptr;
4454 switch (kind)
4455 {
4456 case DEBUG_LOC_END_OF_LIST:
4457 done = 1;
4458 continue;
4459 case DEBUG_LOC_BASE_ADDRESS:
4460 base_address = high + base_offset;
4461 fprintf_filtered (stream, _(" Base address %s"),
4462 paddress (gdbarch, base_address));
4463 continue;
4464 case DEBUG_LOC_START_END:
4465 case DEBUG_LOC_START_LENGTH:
4466 break;
4467 case DEBUG_LOC_BUFFER_OVERFLOW:
4468 case DEBUG_LOC_INVALID_ENTRY:
4469 error (_("Corrupted DWARF expression for symbol \"%s\"."),
4470 symbol->print_name ());
4471 default:
4472 gdb_assert_not_reached ("bad debug_loc_kind");
4473 }
4474
4475 /* Otherwise, a location expression entry. */
4476 low += base_address;
4477 high += base_address;
4478
4479 low = gdbarch_adjust_dwarf2_addr (gdbarch, low);
4480 high = gdbarch_adjust_dwarf2_addr (gdbarch, high);
4481
4482 length = extract_unsigned_integer (loc_ptr, 2, byte_order);
4483 loc_ptr += 2;
4484
4485 /* (It would improve readability to print only the minimum
4486 necessary digits of the second number of the range.) */
4487 fprintf_filtered (stream, _(" Range %s-%s: "),
4488 paddress (gdbarch, low), paddress (gdbarch, high));
4489
4490 /* Now describe this particular location. */
4491 locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
4492 objfile, addr_size, offset_size,
4493 dlbaton->per_cu);
4494
4495 fprintf_filtered (stream, "\n");
4496
4497 loc_ptr += length;
4498 }
4499 }
4500
4501 /* Describe the location of SYMBOL as an agent value in VALUE, generating
4502 any necessary bytecode in AX. */
4503 static void
4504 loclist_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
4505 struct axs_value *value)
4506 {
4507 struct dwarf2_loclist_baton *dlbaton
4508 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
4509 const gdb_byte *data;
4510 size_t size;
4511 unsigned int addr_size = dlbaton->per_cu->addr_size ();
4512
4513 data = dwarf2_find_location_expression (dlbaton, &size, ax->scope);
4514 if (size == 0)
4515 value->optimized_out = 1;
4516 else
4517 dwarf2_compile_expr_to_ax (ax, value, addr_size, data, data + size,
4518 dlbaton->per_cu);
4519 }
4520
4521 /* symbol_computed_ops 'generate_c_location' method. */
4522
4523 static void
4524 loclist_generate_c_location (struct symbol *sym, string_file *stream,
4525 struct gdbarch *gdbarch,
4526 unsigned char *registers_used,
4527 CORE_ADDR pc, const char *result_name)
4528 {
4529 struct dwarf2_loclist_baton *dlbaton
4530 = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (sym);
4531 unsigned int addr_size = dlbaton->per_cu->addr_size ();
4532 const gdb_byte *data;
4533 size_t size;
4534
4535 data = dwarf2_find_location_expression (dlbaton, &size, pc);
4536 if (size == 0)
4537 error (_("symbol \"%s\" is optimized out"), sym->natural_name ());
4538
4539 compile_dwarf_expr_to_c (stream, result_name,
4540 sym, pc, gdbarch, registers_used, addr_size,
4541 data, data + size,
4542 dlbaton->per_cu);
4543 }
4544
4545 /* The set of location functions used with the DWARF-2 expression
4546 evaluator and location lists. */
4547 const struct symbol_computed_ops dwarf2_loclist_funcs = {
4548 loclist_read_variable,
4549 loclist_read_variable_at_entry,
4550 loclist_symbol_needs,
4551 loclist_describe_location,
4552 1, /* location_has_loclist */
4553 loclist_tracepoint_var_ref,
4554 loclist_generate_c_location
4555 };
4556
4557 void _initialize_dwarf2loc ();
4558 void
4559 _initialize_dwarf2loc ()
4560 {
4561 add_setshow_zuinteger_cmd ("entry-values", class_maintenance,
4562 &entry_values_debug,
4563 _("Set entry values and tail call frames "
4564 "debugging."),
4565 _("Show entry values and tail call frames "
4566 "debugging."),
4567 _("When non-zero, the process of determining "
4568 "parameter values from function entry point "
4569 "and tail call frames will be printed."),
4570 NULL,
4571 show_entry_values_debug,
4572 &setdebuglist, &showdebuglist);
4573
4574 add_setshow_boolean_cmd ("always-disassemble", class_obscure,
4575 &dwarf_always_disassemble, _("\
4576 Set whether `info address' always disassembles DWARF expressions."), _("\
4577 Show whether `info address' always disassembles DWARF expressions."), _("\
4578 When enabled, DWARF expressions are always printed in an assembly-like\n\
4579 syntax. When disabled, expressions will be printed in a more\n\
4580 conversational style, when possible."),
4581 NULL,
4582 show_dwarf_always_disassemble,
4583 &set_dwarf_cmdlist,
4584 &show_dwarf_cmdlist);
4585 }
This page took 0.115915 seconds and 5 git commands to generate.