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