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