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