1 /* DWARF 2 location expression support for GDB.
3 Copyright (C) 2003, 2005, 2007, 2008, 2009, 2010, 2011
4 Free Software Foundation, Inc.
6 Contributed by Daniel Jacobowitz, MontaVista Software, Inc.
8 This file is part of GDB.
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
34 #include "exceptions.h"
38 #include "dwarf2expr.h"
39 #include "dwarf2loc.h"
40 #include "dwarf2-frame.h"
42 #include "gdb_string.h"
43 #include "gdb_assert.h"
45 extern int dwarf2_always_disassemble;
48 dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc,
49 const gdb_byte **start, size_t *length);
52 dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
53 const gdb_byte *data, unsigned short size,
54 struct dwarf2_per_cu_data *per_cu,
57 /* A function for dealing with location lists. Given a
58 symbol baton (BATON) and a pc value (PC), find the appropriate
59 location expression, set *LOCEXPR_LENGTH, and return a pointer
60 to the beginning of the expression. Returns NULL on failure.
62 For now, only return the first matching location expression; there
63 can be more than one in the list. */
66 dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton,
67 size_t *locexpr_length, CORE_ADDR pc)
70 const gdb_byte *loc_ptr, *buf_end;
72 struct objfile *objfile = dwarf2_per_cu_objfile (baton->per_cu);
73 struct gdbarch *gdbarch = get_objfile_arch (objfile);
74 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
75 unsigned int addr_size = dwarf2_per_cu_addr_size (baton->per_cu);
76 int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
77 CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
78 /* Adjust base_address for relocatable objects. */
79 CORE_ADDR base_offset = dwarf2_per_cu_text_offset (baton->per_cu);
80 CORE_ADDR base_address = baton->base_address + base_offset;
82 loc_ptr = baton->data;
83 buf_end = baton->data + baton->size;
87 if (buf_end - loc_ptr < 2 * addr_size)
88 error (_("dwarf2_find_location_expression: "
89 "Corrupted DWARF expression."));
92 low = extract_signed_integer (loc_ptr, addr_size, byte_order);
94 low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
98 high = extract_signed_integer (loc_ptr, addr_size, byte_order);
100 high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
101 loc_ptr += addr_size;
103 /* A base-address-selection entry. */
104 if ((low & base_mask) == base_mask)
106 base_address = high + base_offset;
110 /* An end-of-list entry. */
111 if (low == 0 && high == 0)
114 /* Otherwise, a location expression entry. */
116 high += base_address;
118 length = extract_unsigned_integer (loc_ptr, 2, byte_order);
121 if (pc >= low && pc < high)
123 *locexpr_length = length;
131 /* This is the baton used when performing dwarf2 expression
133 struct dwarf_expr_baton
135 struct frame_info *frame;
136 struct dwarf2_per_cu_data *per_cu;
139 /* Helper functions for dwarf2_evaluate_loc_desc. */
141 /* Using the frame specified in BATON, return the value of register
142 REGNUM, treated as a pointer. */
144 dwarf_expr_read_reg (void *baton, int dwarf_regnum)
146 struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
147 struct gdbarch *gdbarch = get_frame_arch (debaton->frame);
151 regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, dwarf_regnum);
152 result = address_from_register (builtin_type (gdbarch)->builtin_data_ptr,
153 regnum, debaton->frame);
157 /* Read memory at ADDR (length LEN) into BUF. */
160 dwarf_expr_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
162 read_memory (addr, buf, len);
165 /* Using the frame specified in BATON, find the location expression
166 describing the frame base. Return a pointer to it in START and
167 its length in LENGTH. */
169 dwarf_expr_frame_base (void *baton, const gdb_byte **start, size_t * length)
171 /* FIXME: cagney/2003-03-26: This code should be using
172 get_frame_base_address(), and then implement a dwarf2 specific
174 struct symbol *framefunc;
175 struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
177 /* Use block_linkage_function, which returns a real (not inlined)
178 function, instead of get_frame_function, which may return an
180 framefunc = block_linkage_function (get_frame_block (debaton->frame, NULL));
182 /* If we found a frame-relative symbol then it was certainly within
183 some function associated with a frame. If we can't find the frame,
184 something has gone wrong. */
185 gdb_assert (framefunc != NULL);
187 dwarf_expr_frame_base_1 (framefunc,
188 get_frame_address_in_block (debaton->frame),
193 dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc,
194 const gdb_byte **start, size_t *length)
196 if (SYMBOL_LOCATION_BATON (framefunc) == NULL)
198 else if (SYMBOL_COMPUTED_OPS (framefunc) == &dwarf2_loclist_funcs)
200 struct dwarf2_loclist_baton *symbaton;
202 symbaton = SYMBOL_LOCATION_BATON (framefunc);
203 *start = dwarf2_find_location_expression (symbaton, length, pc);
207 struct dwarf2_locexpr_baton *symbaton;
209 symbaton = SYMBOL_LOCATION_BATON (framefunc);
210 if (symbaton != NULL)
212 *length = symbaton->size;
213 *start = symbaton->data;
220 error (_("Could not find the frame base for \"%s\"."),
221 SYMBOL_NATURAL_NAME (framefunc));
224 /* Helper function for dwarf2_evaluate_loc_desc. Computes the CFA for
225 the frame in BATON. */
228 dwarf_expr_frame_cfa (void *baton)
230 struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
232 return dwarf2_frame_cfa (debaton->frame);
235 /* Helper function for dwarf2_evaluate_loc_desc. Computes the PC for
236 the frame in BATON. */
239 dwarf_expr_frame_pc (void *baton)
241 struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
243 return get_frame_address_in_block (debaton->frame);
246 /* Using the objfile specified in BATON, find the address for the
247 current thread's thread-local storage with offset OFFSET. */
249 dwarf_expr_tls_address (void *baton, CORE_ADDR offset)
251 struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
252 struct objfile *objfile = dwarf2_per_cu_objfile (debaton->per_cu);
254 return target_translate_tls_address (objfile, offset);
257 /* Call DWARF subroutine from DW_AT_location of DIE at DIE_OFFSET in
258 current CU (as is PER_CU). State of the CTX is not affected by the
262 per_cu_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset,
263 struct dwarf2_per_cu_data *per_cu,
264 CORE_ADDR (*get_frame_pc) (void *baton),
267 struct dwarf2_locexpr_baton block;
269 block = dwarf2_fetch_die_location_block (die_offset, per_cu,
270 get_frame_pc, baton);
272 /* DW_OP_call_ref is currently not supported. */
273 gdb_assert (block.per_cu == per_cu);
275 dwarf_expr_eval (ctx, block.data, block.size);
278 /* Helper interface of per_cu_dwarf_call for dwarf2_evaluate_loc_desc. */
281 dwarf_expr_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
283 struct dwarf_expr_baton *debaton = ctx->baton;
285 return per_cu_dwarf_call (ctx, die_offset, debaton->per_cu,
286 ctx->get_frame_pc, ctx->baton);
291 /* Reference count. */
294 /* The CU from which this closure's expression came. */
295 struct dwarf2_per_cu_data *per_cu;
297 /* The number of pieces used to describe this variable. */
300 /* The target address size, used only for DWARF_VALUE_STACK. */
303 /* The pieces themselves. */
304 struct dwarf_expr_piece *pieces;
307 /* Allocate a closure for a value formed from separately-described
310 static struct piece_closure *
311 allocate_piece_closure (struct dwarf2_per_cu_data *per_cu,
312 int n_pieces, struct dwarf_expr_piece *pieces,
315 struct piece_closure *c = XZALLOC (struct piece_closure);
319 c->n_pieces = n_pieces;
320 c->addr_size = addr_size;
321 c->pieces = XCALLOC (n_pieces, struct dwarf_expr_piece);
323 memcpy (c->pieces, pieces, n_pieces * sizeof (struct dwarf_expr_piece));
328 /* The lowest-level function to extract bits from a byte buffer.
329 SOURCE is the buffer. It is updated if we read to the end of a
331 SOURCE_OFFSET_BITS is the offset of the first bit to read. It is
332 updated to reflect the number of bits actually read.
333 NBITS is the number of bits we want to read. It is updated to
334 reflect the number of bits actually read. This function may read
336 BITS_BIG_ENDIAN is taken directly from gdbarch.
337 This function returns the extracted bits. */
340 extract_bits_primitive (const gdb_byte **source,
341 unsigned int *source_offset_bits,
342 int *nbits, int bits_big_endian)
344 unsigned int avail, mask, datum;
346 gdb_assert (*source_offset_bits < 8);
348 avail = 8 - *source_offset_bits;
352 mask = (1 << avail) - 1;
355 datum >>= 8 - (*source_offset_bits + *nbits);
357 datum >>= *source_offset_bits;
361 *source_offset_bits += avail;
362 if (*source_offset_bits >= 8)
364 *source_offset_bits -= 8;
371 /* Extract some bits from a source buffer and move forward in the
374 SOURCE is the source buffer. It is updated as bytes are read.
375 SOURCE_OFFSET_BITS is the offset into SOURCE. It is updated as
377 NBITS is the number of bits to read.
378 BITS_BIG_ENDIAN is taken directly from gdbarch.
380 This function returns the bits that were read. */
383 extract_bits (const gdb_byte **source, unsigned int *source_offset_bits,
384 int nbits, int bits_big_endian)
388 gdb_assert (nbits > 0 && nbits <= 8);
390 datum = extract_bits_primitive (source, source_offset_bits, &nbits,
396 more = extract_bits_primitive (source, source_offset_bits, &nbits,
408 /* Write some bits into a buffer and move forward in the buffer.
410 DATUM is the bits to write. The low-order bits of DATUM are used.
411 DEST is the destination buffer. It is updated as bytes are
413 DEST_OFFSET_BITS is the bit offset in DEST at which writing is
415 NBITS is the number of valid bits in DATUM.
416 BITS_BIG_ENDIAN is taken directly from gdbarch. */
419 insert_bits (unsigned int datum,
420 gdb_byte *dest, unsigned int dest_offset_bits,
421 int nbits, int bits_big_endian)
425 gdb_assert (dest_offset_bits >= 0 && dest_offset_bits + nbits <= 8);
427 mask = (1 << nbits) - 1;
430 datum <<= 8 - (dest_offset_bits + nbits);
431 mask <<= 8 - (dest_offset_bits + nbits);
435 datum <<= dest_offset_bits;
436 mask <<= dest_offset_bits;
439 gdb_assert ((datum & ~mask) == 0);
441 *dest = (*dest & ~mask) | datum;
444 /* Copy bits from a source to a destination.
446 DEST is where the bits should be written.
447 DEST_OFFSET_BITS is the bit offset into DEST.
448 SOURCE is the source of bits.
449 SOURCE_OFFSET_BITS is the bit offset into SOURCE.
450 BIT_COUNT is the number of bits to copy.
451 BITS_BIG_ENDIAN is taken directly from gdbarch. */
454 copy_bitwise (gdb_byte *dest, unsigned int dest_offset_bits,
455 const gdb_byte *source, unsigned int source_offset_bits,
456 unsigned int bit_count,
459 unsigned int dest_avail;
462 /* Reduce everything to byte-size pieces. */
463 dest += dest_offset_bits / 8;
464 dest_offset_bits %= 8;
465 source += source_offset_bits / 8;
466 source_offset_bits %= 8;
468 dest_avail = 8 - dest_offset_bits % 8;
470 /* See if we can fill the first destination byte. */
471 if (dest_avail < bit_count)
473 datum = extract_bits (&source, &source_offset_bits, dest_avail,
475 insert_bits (datum, dest, dest_offset_bits, dest_avail, bits_big_endian);
477 dest_offset_bits = 0;
478 bit_count -= dest_avail;
481 /* Now, either DEST_OFFSET_BITS is byte-aligned, or we have fewer
482 than 8 bits remaining. */
483 gdb_assert (dest_offset_bits % 8 == 0 || bit_count < 8);
484 for (; bit_count >= 8; bit_count -= 8)
486 datum = extract_bits (&source, &source_offset_bits, 8, bits_big_endian);
487 *dest++ = (gdb_byte) datum;
490 /* Finally, we may have a few leftover bits. */
491 gdb_assert (bit_count <= 8 - dest_offset_bits % 8);
494 datum = extract_bits (&source, &source_offset_bits, bit_count,
496 insert_bits (datum, dest, dest_offset_bits, bit_count, bits_big_endian);
501 read_pieced_value (struct value *v)
505 ULONGEST bits_to_skip;
507 struct piece_closure *c
508 = (struct piece_closure *) value_computed_closure (v);
509 struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (v));
511 size_t buffer_size = 0;
513 struct cleanup *cleanup;
515 = gdbarch_bits_big_endian (get_type_arch (value_type (v)));
517 if (value_type (v) != value_enclosing_type (v))
518 internal_error (__FILE__, __LINE__,
519 _("Should not be able to create a lazy value with "
520 "an enclosing type"));
522 cleanup = make_cleanup (free_current_contents, &buffer);
524 contents = value_contents_raw (v);
525 bits_to_skip = 8 * value_offset (v);
526 if (value_bitsize (v))
528 bits_to_skip += value_bitpos (v);
529 type_len = value_bitsize (v);
532 type_len = 8 * TYPE_LENGTH (value_type (v));
534 for (i = 0; i < c->n_pieces && offset < type_len; i++)
536 struct dwarf_expr_piece *p = &c->pieces[i];
537 size_t this_size, this_size_bits;
538 long dest_offset_bits, source_offset_bits, source_offset;
539 const gdb_byte *intermediate_buffer;
541 /* Compute size, source, and destination offsets for copying, in
543 this_size_bits = p->size;
544 if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
546 bits_to_skip -= this_size_bits;
549 if (this_size_bits > type_len - offset)
550 this_size_bits = type_len - offset;
551 if (bits_to_skip > 0)
553 dest_offset_bits = 0;
554 source_offset_bits = bits_to_skip;
555 this_size_bits -= bits_to_skip;
560 dest_offset_bits = offset;
561 source_offset_bits = 0;
564 this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
565 source_offset = source_offset_bits / 8;
566 if (buffer_size < this_size)
568 buffer_size = this_size;
569 buffer = xrealloc (buffer, buffer_size);
571 intermediate_buffer = buffer;
573 /* Copy from the source to DEST_BUFFER. */
576 case DWARF_VALUE_REGISTER:
578 struct gdbarch *arch = get_frame_arch (frame);
579 int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, p->v.value);
580 int reg_offset = source_offset;
582 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
583 && this_size < register_size (arch, gdb_regnum))
585 /* Big-endian, and we want less than full size. */
586 reg_offset = register_size (arch, gdb_regnum) - this_size;
587 /* We want the lower-order THIS_SIZE_BITS of the bytes
588 we extract from the register. */
589 source_offset_bits += 8 * this_size - this_size_bits;
592 if (gdb_regnum != -1)
594 get_frame_register_bytes (frame, gdb_regnum, reg_offset,
599 error (_("Unable to access DWARF register number %s"),
600 paddress (arch, p->v.value));
605 case DWARF_VALUE_MEMORY:
606 read_value_memory (v, offset,
607 p->v.mem.in_stack_memory,
608 p->v.mem.addr + source_offset,
612 case DWARF_VALUE_STACK:
614 struct gdbarch *gdbarch = get_type_arch (value_type (v));
615 size_t n = this_size;
617 if (n > c->addr_size - source_offset)
618 n = (c->addr_size >= source_offset
619 ? c->addr_size - source_offset
625 else if (source_offset == 0)
626 store_unsigned_integer (buffer, n,
627 gdbarch_byte_order (gdbarch),
631 gdb_byte bytes[sizeof (ULONGEST)];
633 store_unsigned_integer (bytes, n + source_offset,
634 gdbarch_byte_order (gdbarch),
636 memcpy (buffer, bytes + source_offset, n);
641 case DWARF_VALUE_LITERAL:
643 size_t n = this_size;
645 if (n > p->v.literal.length - source_offset)
646 n = (p->v.literal.length >= source_offset
647 ? p->v.literal.length - source_offset
650 intermediate_buffer = p->v.literal.data + source_offset;
654 /* These bits show up as zeros -- but do not cause the value
655 to be considered optimized-out. */
656 case DWARF_VALUE_IMPLICIT_POINTER:
659 case DWARF_VALUE_OPTIMIZED_OUT:
660 set_value_optimized_out (v, 1);
664 internal_error (__FILE__, __LINE__, _("invalid location type"));
667 if (p->location != DWARF_VALUE_OPTIMIZED_OUT
668 && p->location != DWARF_VALUE_IMPLICIT_POINTER)
669 copy_bitwise (contents, dest_offset_bits,
670 intermediate_buffer, source_offset_bits % 8,
671 this_size_bits, bits_big_endian);
673 offset += this_size_bits;
676 do_cleanups (cleanup);
680 write_pieced_value (struct value *to, struct value *from)
684 ULONGEST bits_to_skip;
685 const gdb_byte *contents;
686 struct piece_closure *c
687 = (struct piece_closure *) value_computed_closure (to);
688 struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (to));
690 size_t buffer_size = 0;
692 struct cleanup *cleanup;
694 = gdbarch_bits_big_endian (get_type_arch (value_type (to)));
698 set_value_optimized_out (to, 1);
702 cleanup = make_cleanup (free_current_contents, &buffer);
704 contents = value_contents (from);
705 bits_to_skip = 8 * value_offset (to);
706 if (value_bitsize (to))
708 bits_to_skip += value_bitpos (to);
709 type_len = value_bitsize (to);
712 type_len = 8 * TYPE_LENGTH (value_type (to));
714 for (i = 0; i < c->n_pieces && offset < type_len; i++)
716 struct dwarf_expr_piece *p = &c->pieces[i];
717 size_t this_size_bits, this_size;
718 long dest_offset_bits, source_offset_bits, dest_offset, source_offset;
720 const gdb_byte *source_buffer;
722 this_size_bits = p->size;
723 if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
725 bits_to_skip -= this_size_bits;
728 if (this_size_bits > type_len - offset)
729 this_size_bits = type_len - offset;
730 if (bits_to_skip > 0)
732 dest_offset_bits = bits_to_skip;
733 source_offset_bits = 0;
734 this_size_bits -= bits_to_skip;
739 dest_offset_bits = 0;
740 source_offset_bits = offset;
743 this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
744 source_offset = source_offset_bits / 8;
745 dest_offset = dest_offset_bits / 8;
746 if (dest_offset_bits % 8 == 0 && source_offset_bits % 8 == 0)
748 source_buffer = contents + source_offset;
753 if (buffer_size < this_size)
755 buffer_size = this_size;
756 buffer = xrealloc (buffer, buffer_size);
758 source_buffer = buffer;
764 case DWARF_VALUE_REGISTER:
766 struct gdbarch *arch = get_frame_arch (frame);
767 int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, p->v.value);
768 int reg_offset = dest_offset;
770 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
771 && this_size <= register_size (arch, gdb_regnum))
772 /* Big-endian, and we want less than full size. */
773 reg_offset = register_size (arch, gdb_regnum) - this_size;
775 if (gdb_regnum != -1)
779 get_frame_register_bytes (frame, gdb_regnum, reg_offset,
781 copy_bitwise (buffer, dest_offset_bits,
782 contents, source_offset_bits,
787 put_frame_register_bytes (frame, gdb_regnum, reg_offset,
788 this_size, source_buffer);
792 error (_("Unable to write to DWARF register number %s"),
793 paddress (arch, p->v.value));
797 case DWARF_VALUE_MEMORY:
800 /* Only the first and last bytes can possibly have any
802 read_memory (p->v.mem.addr + dest_offset, buffer, 1);
803 read_memory (p->v.mem.addr + dest_offset + this_size - 1,
804 buffer + this_size - 1, 1);
805 copy_bitwise (buffer, dest_offset_bits,
806 contents, source_offset_bits,
811 write_memory (p->v.mem.addr + dest_offset,
812 source_buffer, this_size);
815 set_value_optimized_out (to, 1);
818 offset += this_size_bits;
821 do_cleanups (cleanup);
824 /* A helper function that checks bit validity in a pieced value.
825 CHECK_FOR indicates the kind of validity checking.
826 DWARF_VALUE_MEMORY means to check whether any bit is valid.
827 DWARF_VALUE_OPTIMIZED_OUT means to check whether any bit is
829 DWARF_VALUE_IMPLICIT_POINTER means to check whether the bits are an
833 check_pieced_value_bits (const struct value *value, int bit_offset,
835 enum dwarf_value_location check_for)
837 struct piece_closure *c
838 = (struct piece_closure *) value_computed_closure (value);
840 int validity = (check_for == DWARF_VALUE_MEMORY
841 || check_for == DWARF_VALUE_IMPLICIT_POINTER);
843 bit_offset += 8 * value_offset (value);
844 if (value_bitsize (value))
845 bit_offset += value_bitpos (value);
847 for (i = 0; i < c->n_pieces && bit_length > 0; i++)
849 struct dwarf_expr_piece *p = &c->pieces[i];
850 size_t this_size_bits = p->size;
854 if (bit_offset >= this_size_bits)
856 bit_offset -= this_size_bits;
860 bit_length -= this_size_bits - bit_offset;
864 bit_length -= this_size_bits;
866 if (check_for == DWARF_VALUE_IMPLICIT_POINTER)
868 if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
871 else if (p->location == DWARF_VALUE_OPTIMIZED_OUT
872 || p->location == DWARF_VALUE_IMPLICIT_POINTER)
888 check_pieced_value_validity (const struct value *value, int bit_offset,
891 return check_pieced_value_bits (value, bit_offset, bit_length,
896 check_pieced_value_invalid (const struct value *value)
898 return check_pieced_value_bits (value, 0,
899 8 * TYPE_LENGTH (value_type (value)),
900 DWARF_VALUE_OPTIMIZED_OUT);
903 /* An implementation of an lval_funcs method to see whether a value is
904 a synthetic pointer. */
907 check_pieced_synthetic_pointer (const struct value *value, int bit_offset,
910 return check_pieced_value_bits (value, bit_offset, bit_length,
911 DWARF_VALUE_IMPLICIT_POINTER);
914 /* A wrapper function for get_frame_address_in_block. */
917 get_frame_address_in_block_wrapper (void *baton)
919 return get_frame_address_in_block (baton);
922 /* An implementation of an lval_funcs method to indirect through a
923 pointer. This handles the synthetic pointer case when needed. */
925 static struct value *
926 indirect_pieced_value (struct value *value)
928 struct piece_closure *c
929 = (struct piece_closure *) value_computed_closure (value);
931 struct frame_info *frame;
932 struct dwarf2_locexpr_baton baton;
933 int i, bit_offset, bit_length;
934 struct dwarf_expr_piece *piece = NULL;
935 struct value *result;
938 type = value_type (value);
939 if (TYPE_CODE (type) != TYPE_CODE_PTR)
942 bit_length = 8 * TYPE_LENGTH (type);
943 bit_offset = 8 * value_offset (value);
944 if (value_bitsize (value))
945 bit_offset += value_bitpos (value);
947 for (i = 0; i < c->n_pieces && bit_length > 0; i++)
949 struct dwarf_expr_piece *p = &c->pieces[i];
950 size_t this_size_bits = p->size;
954 if (bit_offset >= this_size_bits)
956 bit_offset -= this_size_bits;
960 bit_length -= this_size_bits - bit_offset;
964 bit_length -= this_size_bits;
966 if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
970 error (_("Invalid use of DW_OP_GNU_implicit_pointer"));
976 frame = get_selected_frame (_("No frame selected."));
977 byte_offset = value_as_address (value);
979 baton = dwarf2_fetch_die_location_block (piece->v.ptr.die, c->per_cu,
980 get_frame_address_in_block_wrapper,
983 result = dwarf2_evaluate_loc_desc_full (TYPE_TARGET_TYPE (type), frame,
984 baton.data, baton.size, baton.per_cu,
991 copy_pieced_value_closure (const struct value *v)
993 struct piece_closure *c
994 = (struct piece_closure *) value_computed_closure (v);
1001 free_pieced_value_closure (struct value *v)
1003 struct piece_closure *c
1004 = (struct piece_closure *) value_computed_closure (v);
1014 /* Functions for accessing a variable described by DW_OP_piece. */
1015 static struct lval_funcs pieced_value_funcs = {
1018 check_pieced_value_validity,
1019 check_pieced_value_invalid,
1020 indirect_pieced_value,
1021 check_pieced_synthetic_pointer,
1022 copy_pieced_value_closure,
1023 free_pieced_value_closure
1026 /* Helper function which throws an error if a synthetic pointer is
1030 invalid_synthetic_pointer (void)
1032 error (_("access outside bounds of object "
1033 "referenced via synthetic pointer"));
1036 /* Evaluate a location description, starting at DATA and with length
1037 SIZE, to find the current location of variable of TYPE in the
1038 context of FRAME. BYTE_OFFSET is applied after the contents are
1041 static struct value *
1042 dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
1043 const gdb_byte *data, unsigned short size,
1044 struct dwarf2_per_cu_data *per_cu,
1045 LONGEST byte_offset)
1047 struct value *retval;
1048 struct dwarf_expr_baton baton;
1049 struct dwarf_expr_context *ctx;
1050 struct cleanup *old_chain;
1051 struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
1053 if (byte_offset < 0)
1054 invalid_synthetic_pointer ();
1058 retval = allocate_value (type);
1059 VALUE_LVAL (retval) = not_lval;
1060 set_value_optimized_out (retval, 1);
1064 baton.frame = frame;
1065 baton.per_cu = per_cu;
1067 ctx = new_dwarf_expr_context ();
1068 old_chain = make_cleanup_free_dwarf_expr_context (ctx);
1070 ctx->gdbarch = get_objfile_arch (objfile);
1071 ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
1072 ctx->offset = dwarf2_per_cu_text_offset (per_cu);
1073 ctx->baton = &baton;
1074 ctx->read_reg = dwarf_expr_read_reg;
1075 ctx->read_mem = dwarf_expr_read_mem;
1076 ctx->get_frame_base = dwarf_expr_frame_base;
1077 ctx->get_frame_cfa = dwarf_expr_frame_cfa;
1078 ctx->get_frame_pc = dwarf_expr_frame_pc;
1079 ctx->get_tls_address = dwarf_expr_tls_address;
1080 ctx->dwarf_call = dwarf_expr_dwarf_call;
1082 dwarf_expr_eval (ctx, data, size);
1083 if (ctx->num_pieces > 0)
1085 struct piece_closure *c;
1086 struct frame_id frame_id = get_frame_id (frame);
1087 ULONGEST bit_size = 0;
1090 for (i = 0; i < ctx->num_pieces; ++i)
1091 bit_size += ctx->pieces[i].size;
1092 if (8 * (byte_offset + TYPE_LENGTH (type)) > bit_size)
1093 invalid_synthetic_pointer ();
1095 c = allocate_piece_closure (per_cu, ctx->num_pieces, ctx->pieces,
1097 retval = allocate_computed_value (type, &pieced_value_funcs, c);
1098 VALUE_FRAME_ID (retval) = frame_id;
1099 set_value_offset (retval, byte_offset);
1103 switch (ctx->location)
1105 case DWARF_VALUE_REGISTER:
1107 struct gdbarch *arch = get_frame_arch (frame);
1108 ULONGEST dwarf_regnum = dwarf_expr_fetch (ctx, 0);
1109 int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_regnum);
1111 if (byte_offset != 0)
1112 error (_("cannot use offset on synthetic pointer to register"));
1113 if (gdb_regnum != -1)
1114 retval = value_from_register (type, gdb_regnum, frame);
1116 error (_("Unable to access DWARF register number %s"),
1117 paddress (arch, dwarf_regnum));
1121 case DWARF_VALUE_MEMORY:
1123 CORE_ADDR address = dwarf_expr_fetch_address (ctx, 0);
1124 int in_stack_memory = dwarf_expr_fetch_in_stack_memory (ctx, 0);
1126 retval = allocate_value_lazy (type);
1127 VALUE_LVAL (retval) = lval_memory;
1128 if (in_stack_memory)
1129 set_value_stack (retval, 1);
1130 set_value_address (retval, address + byte_offset);
1134 case DWARF_VALUE_STACK:
1136 ULONGEST value = dwarf_expr_fetch (ctx, 0);
1137 bfd_byte *contents, *tem;
1138 size_t n = ctx->addr_size;
1140 if (byte_offset + TYPE_LENGTH (type) > n)
1141 invalid_synthetic_pointer ();
1144 store_unsigned_integer (tem, n,
1145 gdbarch_byte_order (ctx->gdbarch),
1151 retval = allocate_value (type);
1152 contents = value_contents_raw (retval);
1153 if (n > TYPE_LENGTH (type))
1154 n = TYPE_LENGTH (type);
1155 memcpy (contents, tem, n);
1159 case DWARF_VALUE_LITERAL:
1162 const bfd_byte *data;
1163 size_t n = ctx->len;
1165 if (byte_offset + TYPE_LENGTH (type) > n)
1166 invalid_synthetic_pointer ();
1168 retval = allocate_value (type);
1169 contents = value_contents_raw (retval);
1171 data = ctx->data + byte_offset;
1174 if (n > TYPE_LENGTH (type))
1175 n = TYPE_LENGTH (type);
1176 memcpy (contents, data, n);
1180 /* DWARF_VALUE_IMPLICIT_POINTER was converted to a pieced
1181 operation by execute_stack_op. */
1182 case DWARF_VALUE_IMPLICIT_POINTER:
1183 /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context --
1184 it can only be encountered when making a piece. */
1185 case DWARF_VALUE_OPTIMIZED_OUT:
1187 internal_error (__FILE__, __LINE__, _("invalid location type"));
1191 set_value_initialized (retval, ctx->initialized);
1193 do_cleanups (old_chain);
1198 /* The exported interface to dwarf2_evaluate_loc_desc_full; it always
1199 passes 0 as the byte_offset. */
1202 dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame,
1203 const gdb_byte *data, unsigned short size,
1204 struct dwarf2_per_cu_data *per_cu)
1206 return dwarf2_evaluate_loc_desc_full (type, frame, data, size, per_cu, 0);
1210 /* Helper functions and baton for dwarf2_loc_desc_needs_frame. */
1212 struct needs_frame_baton
1215 struct dwarf2_per_cu_data *per_cu;
1218 /* Reads from registers do require a frame. */
1220 needs_frame_read_reg (void *baton, int regnum)
1222 struct needs_frame_baton *nf_baton = baton;
1224 nf_baton->needs_frame = 1;
1228 /* Reads from memory do not require a frame. */
1230 needs_frame_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
1232 memset (buf, 0, len);
1235 /* Frame-relative accesses do require a frame. */
1237 needs_frame_frame_base (void *baton, const gdb_byte **start, size_t * length)
1239 static gdb_byte lit0 = DW_OP_lit0;
1240 struct needs_frame_baton *nf_baton = baton;
1245 nf_baton->needs_frame = 1;
1248 /* CFA accesses require a frame. */
1251 needs_frame_frame_cfa (void *baton)
1253 struct needs_frame_baton *nf_baton = baton;
1255 nf_baton->needs_frame = 1;
1259 /* Thread-local accesses do require a frame. */
1261 needs_frame_tls_address (void *baton, CORE_ADDR offset)
1263 struct needs_frame_baton *nf_baton = baton;
1265 nf_baton->needs_frame = 1;
1269 /* Helper interface of per_cu_dwarf_call for dwarf2_loc_desc_needs_frame. */
1272 needs_frame_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
1274 struct needs_frame_baton *nf_baton = ctx->baton;
1276 return per_cu_dwarf_call (ctx, die_offset, nf_baton->per_cu,
1277 ctx->get_frame_pc, ctx->baton);
1280 /* Return non-zero iff the location expression at DATA (length SIZE)
1281 requires a frame to evaluate. */
1284 dwarf2_loc_desc_needs_frame (const gdb_byte *data, unsigned short size,
1285 struct dwarf2_per_cu_data *per_cu)
1287 struct needs_frame_baton baton;
1288 struct dwarf_expr_context *ctx;
1290 struct cleanup *old_chain;
1291 struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
1293 baton.needs_frame = 0;
1294 baton.per_cu = per_cu;
1296 ctx = new_dwarf_expr_context ();
1297 old_chain = make_cleanup_free_dwarf_expr_context (ctx);
1299 ctx->gdbarch = get_objfile_arch (objfile);
1300 ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
1301 ctx->offset = dwarf2_per_cu_text_offset (per_cu);
1302 ctx->baton = &baton;
1303 ctx->read_reg = needs_frame_read_reg;
1304 ctx->read_mem = needs_frame_read_mem;
1305 ctx->get_frame_base = needs_frame_frame_base;
1306 ctx->get_frame_cfa = needs_frame_frame_cfa;
1307 ctx->get_frame_pc = needs_frame_frame_cfa;
1308 ctx->get_tls_address = needs_frame_tls_address;
1309 ctx->dwarf_call = needs_frame_dwarf_call;
1311 dwarf_expr_eval (ctx, data, size);
1313 in_reg = ctx->location == DWARF_VALUE_REGISTER;
1315 if (ctx->num_pieces > 0)
1319 /* If the location has several pieces, and any of them are in
1320 registers, then we will need a frame to fetch them from. */
1321 for (i = 0; i < ctx->num_pieces; i++)
1322 if (ctx->pieces[i].location == DWARF_VALUE_REGISTER)
1326 do_cleanups (old_chain);
1328 return baton.needs_frame || in_reg;
1331 /* A helper function that throws an unimplemented error mentioning a
1332 given DWARF operator. */
1335 unimplemented (unsigned int op)
1337 const char *name = dwarf_stack_op_name (op);
1340 error (_("DWARF operator %s cannot be translated to an agent expression"),
1343 error (_("Unknown DWARF operator 0x%02x cannot be translated "
1344 "to an agent expression"),
1348 /* A helper function to convert a DWARF register to an arch register.
1349 ARCH is the architecture.
1350 DWARF_REG is the register.
1351 This will throw an exception if the DWARF register cannot be
1352 translated to an architecture register. */
1355 translate_register (struct gdbarch *arch, int dwarf_reg)
1357 int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg);
1359 error (_("Unable to access DWARF register number %d"), dwarf_reg);
1363 /* A helper function that emits an access to memory. ARCH is the
1364 target architecture. EXPR is the expression which we are building.
1365 NBITS is the number of bits we want to read. This emits the
1366 opcodes needed to read the memory and then extract the desired
1370 access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits)
1372 ULONGEST nbytes = (nbits + 7) / 8;
1374 gdb_assert (nbits > 0 && nbits <= sizeof (LONGEST));
1377 ax_trace_quick (expr, nbytes);
1380 ax_simple (expr, aop_ref8);
1381 else if (nbits <= 16)
1382 ax_simple (expr, aop_ref16);
1383 else if (nbits <= 32)
1384 ax_simple (expr, aop_ref32);
1386 ax_simple (expr, aop_ref64);
1388 /* If we read exactly the number of bytes we wanted, we're done. */
1389 if (8 * nbytes == nbits)
1392 if (gdbarch_bits_big_endian (arch))
1394 /* On a bits-big-endian machine, we want the high-order
1396 ax_const_l (expr, 8 * nbytes - nbits);
1397 ax_simple (expr, aop_rsh_unsigned);
1401 /* On a bits-little-endian box, we want the low-order NBITS. */
1402 ax_zero_ext (expr, nbits);
1406 /* A helper function to return the frame's PC. */
1409 get_ax_pc (void *baton)
1411 struct agent_expr *expr = baton;
1416 /* Compile a DWARF location expression to an agent expression.
1418 EXPR is the agent expression we are building.
1419 LOC is the agent value we modify.
1420 ARCH is the architecture.
1421 ADDR_SIZE is the size of addresses, in bytes.
1422 OP_PTR is the start of the location expression.
1423 OP_END is one past the last byte of the location expression.
1425 This will throw an exception for various kinds of errors -- for
1426 example, if the expression cannot be compiled, or if the expression
1430 compile_dwarf_to_ax (struct agent_expr *expr, struct axs_value *loc,
1431 struct gdbarch *arch, unsigned int addr_size,
1432 const gdb_byte *op_ptr, const gdb_byte *op_end,
1433 struct dwarf2_per_cu_data *per_cu)
1435 struct cleanup *cleanups;
1437 VEC(int) *dw_labels = NULL, *patches = NULL;
1438 const gdb_byte * const base = op_ptr;
1439 const gdb_byte *previous_piece = op_ptr;
1440 enum bfd_endian byte_order = gdbarch_byte_order (arch);
1441 ULONGEST bits_collected = 0;
1442 unsigned int addr_size_bits = 8 * addr_size;
1443 int bits_big_endian = gdbarch_bits_big_endian (arch);
1445 offsets = xmalloc ((op_end - op_ptr) * sizeof (int));
1446 cleanups = make_cleanup (xfree, offsets);
1448 for (i = 0; i < op_end - op_ptr; ++i)
1451 make_cleanup (VEC_cleanup (int), &dw_labels);
1452 make_cleanup (VEC_cleanup (int), &patches);
1454 /* By default we are making an address. */
1455 loc->kind = axs_lvalue_memory;
1457 while (op_ptr < op_end)
1459 enum dwarf_location_atom op = *op_ptr;
1460 ULONGEST uoffset, reg;
1464 offsets[op_ptr - base] = expr->len;
1467 /* Our basic approach to code generation is to map DWARF
1468 operations directly to AX operations. However, there are
1471 First, DWARF works on address-sized units, but AX always uses
1472 LONGEST. For most operations we simply ignore this
1473 difference; instead we generate sign extensions as needed
1474 before division and comparison operations. It would be nice
1475 to omit the sign extensions, but there is no way to determine
1476 the size of the target's LONGEST. (This code uses the size
1477 of the host LONGEST in some cases -- that is a bug but it is
1480 Second, some DWARF operations cannot be translated to AX.
1481 For these we simply fail. See
1482 http://sourceware.org/bugzilla/show_bug.cgi?id=11662. */
1517 ax_const_l (expr, op - DW_OP_lit0);
1521 uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order);
1522 op_ptr += addr_size;
1523 /* Some versions of GCC emit DW_OP_addr before
1524 DW_OP_GNU_push_tls_address. In this case the value is an
1525 index, not an address. We don't support things like
1526 branching between the address and the TLS op. */
1527 if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
1528 uoffset += dwarf2_per_cu_text_offset (per_cu);
1529 ax_const_l (expr, uoffset);
1533 ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order));
1537 ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order));
1541 ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order));
1545 ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order));
1549 ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order));
1553 ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order));
1557 ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order));
1561 ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order));
1565 op_ptr = read_uleb128 (op_ptr, op_end, &uoffset);
1566 ax_const_l (expr, uoffset);
1569 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1570 ax_const_l (expr, offset);
1605 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
1606 loc->u.reg = translate_register (arch, op - DW_OP_reg0);
1607 loc->kind = axs_lvalue_register;
1611 op_ptr = read_uleb128 (op_ptr, op_end, ®);
1612 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
1613 loc->u.reg = translate_register (arch, reg);
1614 loc->kind = axs_lvalue_register;
1617 case DW_OP_implicit_value:
1621 op_ptr = read_uleb128 (op_ptr, op_end, &len);
1622 if (op_ptr + len > op_end)
1623 error (_("DW_OP_implicit_value: too few bytes available."));
1624 if (len > sizeof (ULONGEST))
1625 error (_("Cannot translate DW_OP_implicit_value of %d bytes"),
1628 ax_const_l (expr, extract_unsigned_integer (op_ptr, len,
1631 dwarf_expr_require_composition (op_ptr, op_end,
1632 "DW_OP_implicit_value");
1634 loc->kind = axs_rvalue;
1638 case DW_OP_stack_value:
1639 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
1640 loc->kind = axs_rvalue;
1675 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1676 i = translate_register (arch, op - DW_OP_breg0);
1680 ax_const_l (expr, offset);
1681 ax_simple (expr, aop_add);
1686 op_ptr = read_uleb128 (op_ptr, op_end, ®);
1687 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1688 i = translate_register (arch, reg);
1692 ax_const_l (expr, offset);
1693 ax_simple (expr, aop_add);
1699 const gdb_byte *datastart;
1701 unsigned int before_stack_len;
1703 struct symbol *framefunc;
1704 LONGEST base_offset = 0;
1706 b = block_for_pc (expr->scope);
1709 error (_("No block found for address"));
1711 framefunc = block_linkage_function (b);
1714 error (_("No function found for block"));
1716 dwarf_expr_frame_base_1 (framefunc, expr->scope,
1717 &datastart, &datalen);
1719 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1720 compile_dwarf_to_ax (expr, loc, arch, addr_size, datastart,
1721 datastart + datalen, per_cu);
1725 ax_const_l (expr, offset);
1726 ax_simple (expr, aop_add);
1729 loc->kind = axs_lvalue_memory;
1734 ax_simple (expr, aop_dup);
1738 ax_simple (expr, aop_pop);
1747 ax_simple (expr, aop_swap);
1751 /* We can't directly support DW_OP_over, but GCC emits it as
1752 part of a sequence to implement signed modulus. As a
1753 hack, we recognize this sequence. Note that if GCC ever
1754 generates a branch to the middle of this sequence, then
1755 we will die somehow. */
1756 if (op_end - op_ptr >= 4
1757 && op_ptr[0] == DW_OP_over
1758 && op_ptr[1] == DW_OP_div
1759 && op_ptr[2] == DW_OP_mul
1760 && op_ptr[3] == DW_OP_minus)
1762 /* Sign extend the operands. */
1763 ax_ext (expr, addr_size_bits);
1764 ax_simple (expr, aop_swap);
1765 ax_ext (expr, addr_size_bits);
1766 ax_simple (expr, aop_swap);
1767 ax_simple (expr, aop_rem_signed);
1779 case DW_OP_deref_size:
1783 if (op == DW_OP_deref_size)
1791 ax_simple (expr, aop_ref8);
1794 ax_simple (expr, aop_ref16);
1797 ax_simple (expr, aop_ref32);
1800 ax_simple (expr, aop_ref64);
1803 /* Note that dwarf_stack_op_name will never return
1805 error (_("Unsupported size %d in %s"),
1806 size, dwarf_stack_op_name (op));
1812 /* Sign extend the operand. */
1813 ax_ext (expr, addr_size_bits);
1814 ax_simple (expr, aop_dup);
1815 ax_const_l (expr, 0);
1816 ax_simple (expr, aop_less_signed);
1817 ax_simple (expr, aop_log_not);
1818 i = ax_goto (expr, aop_if_goto);
1819 /* We have to emit 0 - X. */
1820 ax_const_l (expr, 0);
1821 ax_simple (expr, aop_swap);
1822 ax_simple (expr, aop_sub);
1823 ax_label (expr, i, expr->len);
1827 /* No need to sign extend here. */
1828 ax_const_l (expr, 0);
1829 ax_simple (expr, aop_swap);
1830 ax_simple (expr, aop_sub);
1834 /* Sign extend the operand. */
1835 ax_ext (expr, addr_size_bits);
1836 ax_simple (expr, aop_bit_not);
1839 case DW_OP_plus_uconst:
1840 op_ptr = read_uleb128 (op_ptr, op_end, ®);
1841 /* It would be really weird to emit `DW_OP_plus_uconst 0',
1842 but we micro-optimize anyhow. */
1845 ax_const_l (expr, reg);
1846 ax_simple (expr, aop_add);
1851 ax_simple (expr, aop_bit_and);
1855 /* Sign extend the operands. */
1856 ax_ext (expr, addr_size_bits);
1857 ax_simple (expr, aop_swap);
1858 ax_ext (expr, addr_size_bits);
1859 ax_simple (expr, aop_swap);
1860 ax_simple (expr, aop_div_signed);
1864 ax_simple (expr, aop_sub);
1868 ax_simple (expr, aop_rem_unsigned);
1872 ax_simple (expr, aop_mul);
1876 ax_simple (expr, aop_bit_or);
1880 ax_simple (expr, aop_add);
1884 ax_simple (expr, aop_lsh);
1888 ax_simple (expr, aop_rsh_unsigned);
1892 ax_simple (expr, aop_rsh_signed);
1896 ax_simple (expr, aop_bit_xor);
1900 /* Sign extend the operands. */
1901 ax_ext (expr, addr_size_bits);
1902 ax_simple (expr, aop_swap);
1903 ax_ext (expr, addr_size_bits);
1904 /* Note no swap here: A <= B is !(B < A). */
1905 ax_simple (expr, aop_less_signed);
1906 ax_simple (expr, aop_log_not);
1910 /* Sign extend the operands. */
1911 ax_ext (expr, addr_size_bits);
1912 ax_simple (expr, aop_swap);
1913 ax_ext (expr, addr_size_bits);
1914 ax_simple (expr, aop_swap);
1915 /* A >= B is !(A < B). */
1916 ax_simple (expr, aop_less_signed);
1917 ax_simple (expr, aop_log_not);
1921 /* Sign extend the operands. */
1922 ax_ext (expr, addr_size_bits);
1923 ax_simple (expr, aop_swap);
1924 ax_ext (expr, addr_size_bits);
1925 /* No need for a second swap here. */
1926 ax_simple (expr, aop_equal);
1930 /* Sign extend the operands. */
1931 ax_ext (expr, addr_size_bits);
1932 ax_simple (expr, aop_swap);
1933 ax_ext (expr, addr_size_bits);
1934 ax_simple (expr, aop_swap);
1935 ax_simple (expr, aop_less_signed);
1939 /* Sign extend the operands. */
1940 ax_ext (expr, addr_size_bits);
1941 ax_simple (expr, aop_swap);
1942 ax_ext (expr, addr_size_bits);
1943 /* Note no swap here: A > B is B < A. */
1944 ax_simple (expr, aop_less_signed);
1948 /* Sign extend the operands. */
1949 ax_ext (expr, addr_size_bits);
1950 ax_simple (expr, aop_swap);
1951 ax_ext (expr, addr_size_bits);
1952 /* No need for a swap here. */
1953 ax_simple (expr, aop_equal);
1954 ax_simple (expr, aop_log_not);
1957 case DW_OP_call_frame_cfa:
1961 case DW_OP_GNU_push_tls_address:
1966 offset = extract_signed_integer (op_ptr, 2, byte_order);
1968 i = ax_goto (expr, aop_goto);
1969 VEC_safe_push (int, dw_labels, op_ptr + offset - base);
1970 VEC_safe_push (int, patches, i);
1974 offset = extract_signed_integer (op_ptr, 2, byte_order);
1976 /* Zero extend the operand. */
1977 ax_zero_ext (expr, addr_size_bits);
1978 i = ax_goto (expr, aop_if_goto);
1979 VEC_safe_push (int, dw_labels, op_ptr + offset - base);
1980 VEC_safe_push (int, patches, i);
1987 case DW_OP_bit_piece:
1989 ULONGEST size, offset;
1991 if (op_ptr - 1 == previous_piece)
1992 error (_("Cannot translate empty pieces to agent expressions"));
1993 previous_piece = op_ptr - 1;
1995 op_ptr = read_uleb128 (op_ptr, op_end, &size);
1996 if (op == DW_OP_piece)
2002 op_ptr = read_uleb128 (op_ptr, op_end, &offset);
2004 if (bits_collected + size > 8 * sizeof (LONGEST))
2005 error (_("Expression pieces exceed word size"));
2007 /* Access the bits. */
2010 case axs_lvalue_register:
2011 ax_reg (expr, loc->u.reg);
2014 case axs_lvalue_memory:
2015 /* Offset the pointer, if needed. */
2018 ax_const_l (expr, offset / 8);
2019 ax_simple (expr, aop_add);
2022 access_memory (arch, expr, size);
2026 /* For a bits-big-endian target, shift up what we already
2027 have. For a bits-little-endian target, shift up the
2028 new data. Note that there is a potential bug here if
2029 the DWARF expression leaves multiple values on the
2031 if (bits_collected > 0)
2033 if (bits_big_endian)
2035 ax_simple (expr, aop_swap);
2036 ax_const_l (expr, size);
2037 ax_simple (expr, aop_lsh);
2038 /* We don't need a second swap here, because
2039 aop_bit_or is symmetric. */
2043 ax_const_l (expr, size);
2044 ax_simple (expr, aop_lsh);
2046 ax_simple (expr, aop_bit_or);
2049 bits_collected += size;
2050 loc->kind = axs_rvalue;
2054 case DW_OP_GNU_uninit:
2060 struct dwarf2_locexpr_baton block;
2061 int size = (op == DW_OP_call2 ? 2 : 4);
2063 uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
2066 block = dwarf2_fetch_die_location_block (uoffset, per_cu,
2069 /* DW_OP_call_ref is currently not supported. */
2070 gdb_assert (block.per_cu == per_cu);
2072 compile_dwarf_to_ax (expr, loc, arch, addr_size,
2073 block.data, block.data + block.size,
2078 case DW_OP_call_ref:
2086 /* Patch all the branches we emitted. */
2087 for (i = 0; i < VEC_length (int, patches); ++i)
2089 int targ = offsets[VEC_index (int, dw_labels, i)];
2091 internal_error (__FILE__, __LINE__, _("invalid label"));
2092 ax_label (expr, VEC_index (int, patches, i), targ);
2095 do_cleanups (cleanups);
2099 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
2100 evaluator to calculate the location. */
2101 static struct value *
2102 locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
2104 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2107 val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
2108 dlbaton->size, dlbaton->per_cu);
2113 /* Return non-zero iff we need a frame to evaluate SYMBOL. */
2115 locexpr_read_needs_frame (struct symbol *symbol)
2117 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2119 return dwarf2_loc_desc_needs_frame (dlbaton->data, dlbaton->size,
2123 /* Return true if DATA points to the end of a piece. END is one past
2124 the last byte in the expression. */
2127 piece_end_p (const gdb_byte *data, const gdb_byte *end)
2129 return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece;
2132 /* Nicely describe a single piece of a location, returning an updated
2133 position in the bytecode sequence. This function cannot recognize
2134 all locations; if a location is not recognized, it simply returns
2137 static const gdb_byte *
2138 locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
2139 CORE_ADDR addr, struct objfile *objfile,
2140 const gdb_byte *data, const gdb_byte *end,
2141 unsigned int addr_size)
2143 struct gdbarch *gdbarch = get_objfile_arch (objfile);
2146 if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
2148 regno = gdbarch_dwarf2_reg_to_regnum (gdbarch, data[0] - DW_OP_reg0);
2149 fprintf_filtered (stream, _("a variable in $%s"),
2150 gdbarch_register_name (gdbarch, regno));
2153 else if (data[0] == DW_OP_regx)
2157 data = read_uleb128 (data + 1, end, ®);
2158 regno = gdbarch_dwarf2_reg_to_regnum (gdbarch, reg);
2159 fprintf_filtered (stream, _("a variable in $%s"),
2160 gdbarch_register_name (gdbarch, regno));
2162 else if (data[0] == DW_OP_fbreg)
2165 struct symbol *framefunc;
2167 LONGEST frame_offset;
2168 const gdb_byte *base_data, *new_data, *save_data = data;
2170 LONGEST base_offset = 0;
2172 new_data = read_sleb128 (data + 1, end, &frame_offset);
2173 if (!piece_end_p (new_data, end))
2177 b = block_for_pc (addr);
2180 error (_("No block found for address for symbol \"%s\"."),
2181 SYMBOL_PRINT_NAME (symbol));
2183 framefunc = block_linkage_function (b);
2186 error (_("No function found for block for symbol \"%s\"."),
2187 SYMBOL_PRINT_NAME (symbol));
2189 dwarf_expr_frame_base_1 (framefunc, addr, &base_data, &base_size);
2191 if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
2193 const gdb_byte *buf_end;
2195 frame_reg = base_data[0] - DW_OP_breg0;
2196 buf_end = read_sleb128 (base_data + 1,
2197 base_data + base_size, &base_offset);
2198 if (buf_end != base_data + base_size)
2199 error (_("Unexpected opcode after "
2200 "DW_OP_breg%u for symbol \"%s\"."),
2201 frame_reg, SYMBOL_PRINT_NAME (symbol));
2203 else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
2205 /* The frame base is just the register, with no offset. */
2206 frame_reg = base_data[0] - DW_OP_reg0;
2211 /* We don't know what to do with the frame base expression,
2212 so we can't trace this variable; give up. */
2216 regno = gdbarch_dwarf2_reg_to_regnum (gdbarch, frame_reg);
2218 fprintf_filtered (stream,
2219 _("a variable at frame base reg $%s offset %s+%s"),
2220 gdbarch_register_name (gdbarch, regno),
2221 plongest (base_offset), plongest (frame_offset));
2223 else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
2224 && piece_end_p (data, end))
2228 regno = gdbarch_dwarf2_reg_to_regnum (gdbarch, data[0] - DW_OP_breg0);
2230 data = read_sleb128 (data + 1, end, &offset);
2232 fprintf_filtered (stream,
2233 _("a variable at offset %s from base reg $%s"),
2235 gdbarch_register_name (gdbarch, regno));
2238 /* The location expression for a TLS variable looks like this (on a
2241 DW_AT_location : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
2242 (DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
2244 0x3 is the encoding for DW_OP_addr, which has an operand as long
2245 as the size of an address on the target machine (here is 8
2246 bytes). Note that more recent version of GCC emit DW_OP_const4u
2247 or DW_OP_const8u, depending on address size, rather than
2248 DW_OP_addr. 0xe0 is the encoding for DW_OP_GNU_push_tls_address.
2249 The operand represents the offset at which the variable is within
2250 the thread local storage. */
2252 else if (data + 1 + addr_size < end
2253 && (data[0] == DW_OP_addr
2254 || (addr_size == 4 && data[0] == DW_OP_const4u)
2255 || (addr_size == 8 && data[0] == DW_OP_const8u))
2256 && data[1 + addr_size] == DW_OP_GNU_push_tls_address
2257 && piece_end_p (data + 2 + addr_size, end))
2260 offset = extract_unsigned_integer (data + 1, addr_size,
2261 gdbarch_byte_order (gdbarch));
2263 fprintf_filtered (stream,
2264 _("a thread-local variable at offset 0x%s "
2265 "in the thread-local storage for `%s'"),
2266 phex_nz (offset, addr_size), objfile->name);
2268 data += 1 + addr_size + 1;
2270 else if (data[0] >= DW_OP_lit0
2271 && data[0] <= DW_OP_lit31
2273 && data[1] == DW_OP_stack_value)
2275 fprintf_filtered (stream, _("the constant %d"), data[0] - DW_OP_lit0);
2282 /* Disassemble an expression, stopping at the end of a piece or at the
2283 end of the expression. Returns a pointer to the next unread byte
2284 in the input expression. If ALL is nonzero, then this function
2285 will keep going until it reaches the end of the expression. */
2287 static const gdb_byte *
2288 disassemble_dwarf_expression (struct ui_file *stream,
2289 struct gdbarch *arch, unsigned int addr_size,
2291 const gdb_byte *data, const gdb_byte *end,
2294 const gdb_byte *start = data;
2296 fprintf_filtered (stream, _("a complex DWARF expression:\n"));
2300 || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
2302 enum dwarf_location_atom op = *data++;
2307 name = dwarf_stack_op_name (op);
2310 error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
2311 op, (long) (data - start));
2312 fprintf_filtered (stream, " % 4ld: %s", (long) (data - start), name);
2317 ul = extract_unsigned_integer (data, addr_size,
2318 gdbarch_byte_order (arch));
2320 fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
2324 ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch));
2326 fprintf_filtered (stream, " %s", pulongest (ul));
2329 l = extract_signed_integer (data, 1, gdbarch_byte_order (arch));
2331 fprintf_filtered (stream, " %s", plongest (l));
2334 ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
2336 fprintf_filtered (stream, " %s", pulongest (ul));
2339 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
2341 fprintf_filtered (stream, " %s", plongest (l));
2344 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
2346 fprintf_filtered (stream, " %s", pulongest (ul));
2349 l = extract_signed_integer (data, 4, gdbarch_byte_order (arch));
2351 fprintf_filtered (stream, " %s", plongest (l));
2354 ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch));
2356 fprintf_filtered (stream, " %s", pulongest (ul));
2359 l = extract_signed_integer (data, 8, gdbarch_byte_order (arch));
2361 fprintf_filtered (stream, " %s", plongest (l));
2364 data = read_uleb128 (data, end, &ul);
2365 fprintf_filtered (stream, " %s", pulongest (ul));
2368 data = read_sleb128 (data, end, &l);
2369 fprintf_filtered (stream, " %s", plongest (l));
2404 fprintf_filtered (stream, " [$%s]",
2405 gdbarch_register_name (arch, op - DW_OP_reg0));
2409 data = read_uleb128 (data, end, &ul);
2410 fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
2411 gdbarch_register_name (arch, (int) ul));
2414 case DW_OP_implicit_value:
2415 data = read_uleb128 (data, end, &ul);
2417 fprintf_filtered (stream, " %s", pulongest (ul));
2452 data = read_sleb128 (data, end, &ul);
2453 fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
2454 gdbarch_register_name (arch, op - DW_OP_breg0));
2461 data = read_uleb128 (data, end, &ul);
2462 data = read_sleb128 (data, end, &offset);
2463 fprintf_filtered (stream, " register %s [$%s] offset %s",
2465 gdbarch_register_name (arch, (int) ul),
2466 pulongest (offset));
2471 data = read_sleb128 (data, end, &ul);
2472 fprintf_filtered (stream, " %s", pulongest (ul));
2475 case DW_OP_xderef_size:
2476 case DW_OP_deref_size:
2478 fprintf_filtered (stream, " %d", *data);
2482 case DW_OP_plus_uconst:
2483 data = read_uleb128 (data, end, &ul);
2484 fprintf_filtered (stream, " %s", pulongest (ul));
2488 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
2490 fprintf_filtered (stream, " to %ld",
2491 (long) (data + l - start));
2495 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
2497 fprintf_filtered (stream, " %ld",
2498 (long) (data + l - start));
2502 ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
2504 fprintf_filtered (stream, " offset %s", phex_nz (ul, 2));
2508 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
2510 fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
2513 case DW_OP_call_ref:
2514 ul = extract_unsigned_integer (data, offset_size,
2515 gdbarch_byte_order (arch));
2516 data += offset_size;
2517 fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
2521 data = read_uleb128 (data, end, &ul);
2522 fprintf_filtered (stream, " %s (bytes)", pulongest (ul));
2525 case DW_OP_bit_piece:
2529 data = read_uleb128 (data, end, &ul);
2530 data = read_uleb128 (data, end, &offset);
2531 fprintf_filtered (stream, " size %s offset %s (bits)",
2532 pulongest (ul), pulongest (offset));
2536 case DW_OP_GNU_implicit_pointer:
2538 ul = extract_unsigned_integer (data, offset_size,
2539 gdbarch_byte_order (arch));
2540 data += offset_size;
2542 data = read_sleb128 (data, end, &l);
2544 fprintf_filtered (stream, " DIE %s offset %s",
2545 phex_nz (ul, offset_size),
2551 fprintf_filtered (stream, "\n");
2557 /* Describe a single location, which may in turn consist of multiple
2561 locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
2562 struct ui_file *stream,
2563 const gdb_byte *data, int size,
2564 struct objfile *objfile, unsigned int addr_size,
2567 const gdb_byte *end = data + size;
2568 int first_piece = 1, bad = 0;
2572 const gdb_byte *here = data;
2573 int disassemble = 1;
2578 fprintf_filtered (stream, _(", and "));
2580 if (!dwarf2_always_disassemble)
2582 data = locexpr_describe_location_piece (symbol, stream,
2584 data, end, addr_size);
2585 /* If we printed anything, or if we have an empty piece,
2586 then don't disassemble. */
2588 || data[0] == DW_OP_piece
2589 || data[0] == DW_OP_bit_piece)
2593 data = disassemble_dwarf_expression (stream,
2594 get_objfile_arch (objfile),
2595 addr_size, offset_size, data, end,
2596 dwarf2_always_disassemble);
2600 int empty = data == here;
2603 fprintf_filtered (stream, " ");
2604 if (data[0] == DW_OP_piece)
2608 data = read_uleb128 (data + 1, end, &bytes);
2611 fprintf_filtered (stream, _("an empty %s-byte piece"),
2614 fprintf_filtered (stream, _(" [%s-byte piece]"),
2617 else if (data[0] == DW_OP_bit_piece)
2619 ULONGEST bits, offset;
2621 data = read_uleb128 (data + 1, end, &bits);
2622 data = read_uleb128 (data, end, &offset);
2625 fprintf_filtered (stream,
2626 _("an empty %s-bit piece"),
2629 fprintf_filtered (stream,
2630 _(" [%s-bit piece, offset %s bits]"),
2631 pulongest (bits), pulongest (offset));
2641 if (bad || data > end)
2642 error (_("Corrupted DWARF2 expression for \"%s\"."),
2643 SYMBOL_PRINT_NAME (symbol));
2646 /* Print a natural-language description of SYMBOL to STREAM. This
2647 version is for a symbol with a single location. */
2650 locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
2651 struct ui_file *stream)
2653 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2654 struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
2655 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2656 int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
2658 locexpr_describe_location_1 (symbol, addr, stream,
2659 dlbaton->data, dlbaton->size,
2660 objfile, addr_size, offset_size);
2663 /* Describe the location of SYMBOL as an agent value in VALUE, generating
2664 any necessary bytecode in AX. */
2667 locexpr_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
2668 struct agent_expr *ax, struct axs_value *value)
2670 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2671 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2673 if (dlbaton->data == NULL || dlbaton->size == 0)
2674 value->optimized_out = 1;
2676 compile_dwarf_to_ax (ax, value, gdbarch, addr_size,
2677 dlbaton->data, dlbaton->data + dlbaton->size,
2681 /* The set of location functions used with the DWARF-2 expression
2683 const struct symbol_computed_ops dwarf2_locexpr_funcs = {
2684 locexpr_read_variable,
2685 locexpr_read_needs_frame,
2686 locexpr_describe_location,
2687 locexpr_tracepoint_var_ref
2691 /* Wrapper functions for location lists. These generally find
2692 the appropriate location expression and call something above. */
2694 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
2695 evaluator to calculate the location. */
2696 static struct value *
2697 loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
2699 struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2701 const gdb_byte *data;
2703 CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0;
2705 data = dwarf2_find_location_expression (dlbaton, &size, pc);
2708 val = allocate_value (SYMBOL_TYPE (symbol));
2709 VALUE_LVAL (val) = not_lval;
2710 set_value_optimized_out (val, 1);
2713 val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size,
2719 /* Return non-zero iff we need a frame to evaluate SYMBOL. */
2721 loclist_read_needs_frame (struct symbol *symbol)
2723 /* If there's a location list, then assume we need to have a frame
2724 to choose the appropriate location expression. With tracking of
2725 global variables this is not necessarily true, but such tracking
2726 is disabled in GCC at the moment until we figure out how to
2732 /* Print a natural-language description of SYMBOL to STREAM. This
2733 version applies when there is a list of different locations, each
2734 with a specified address range. */
2737 loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
2738 struct ui_file *stream)
2740 struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2741 CORE_ADDR low, high;
2742 const gdb_byte *loc_ptr, *buf_end;
2743 int length, first = 1;
2744 struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
2745 struct gdbarch *gdbarch = get_objfile_arch (objfile);
2746 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2747 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2748 int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
2749 int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
2750 CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
2751 /* Adjust base_address for relocatable objects. */
2752 CORE_ADDR base_offset = dwarf2_per_cu_text_offset (dlbaton->per_cu);
2753 CORE_ADDR base_address = dlbaton->base_address + base_offset;
2755 loc_ptr = dlbaton->data;
2756 buf_end = dlbaton->data + dlbaton->size;
2758 fprintf_filtered (stream, _("multi-location:\n"));
2760 /* Iterate through locations until we run out. */
2763 if (buf_end - loc_ptr < 2 * addr_size)
2764 error (_("Corrupted DWARF expression for symbol \"%s\"."),
2765 SYMBOL_PRINT_NAME (symbol));
2768 low = extract_signed_integer (loc_ptr, addr_size, byte_order);
2770 low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
2771 loc_ptr += addr_size;
2774 high = extract_signed_integer (loc_ptr, addr_size, byte_order);
2776 high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
2777 loc_ptr += addr_size;
2779 /* A base-address-selection entry. */
2780 if ((low & base_mask) == base_mask)
2782 base_address = high + base_offset;
2783 fprintf_filtered (stream, _(" Base address %s"),
2784 paddress (gdbarch, base_address));
2788 /* An end-of-list entry. */
2789 if (low == 0 && high == 0)
2792 /* Otherwise, a location expression entry. */
2793 low += base_address;
2794 high += base_address;
2796 length = extract_unsigned_integer (loc_ptr, 2, byte_order);
2799 /* (It would improve readability to print only the minimum
2800 necessary digits of the second number of the range.) */
2801 fprintf_filtered (stream, _(" Range %s-%s: "),
2802 paddress (gdbarch, low), paddress (gdbarch, high));
2804 /* Now describe this particular location. */
2805 locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
2806 objfile, addr_size, offset_size);
2808 fprintf_filtered (stream, "\n");
2814 /* Describe the location of SYMBOL as an agent value in VALUE, generating
2815 any necessary bytecode in AX. */
2817 loclist_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
2818 struct agent_expr *ax, struct axs_value *value)
2820 struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2821 const gdb_byte *data;
2823 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2825 data = dwarf2_find_location_expression (dlbaton, &size, ax->scope);
2826 if (data == NULL || size == 0)
2827 value->optimized_out = 1;
2829 compile_dwarf_to_ax (ax, value, gdbarch, addr_size, data, data + size,
2833 /* The set of location functions used with the DWARF-2 expression
2834 evaluator and location lists. */
2835 const struct symbol_computed_ops dwarf2_loclist_funcs = {
2836 loclist_read_variable,
2837 loclist_read_needs_frame,
2838 loclist_describe_location,
2839 loclist_tracepoint_var_ref