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;
47 static void dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc,
48 const gdb_byte **start, size_t *length);
50 static struct value *dwarf2_evaluate_loc_desc_full (struct type *type,
51 struct frame_info *frame,
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 per_cu_dwarf_call (ctx, die_offset, debaton->per_cu,
286 ctx->get_frame_pc, ctx->baton);
289 /* Callback function for dwarf2_evaluate_loc_desc. */
292 dwarf_expr_get_base_type (struct dwarf_expr_context *ctx, size_t die_offset)
294 struct dwarf_expr_baton *debaton = ctx->baton;
296 return dwarf2_get_die_type (die_offset, debaton->per_cu);
301 /* Reference count. */
304 /* The CU from which this closure's expression came. */
305 struct dwarf2_per_cu_data *per_cu;
307 /* The number of pieces used to describe this variable. */
310 /* The target address size, used only for DWARF_VALUE_STACK. */
313 /* The pieces themselves. */
314 struct dwarf_expr_piece *pieces;
317 /* Allocate a closure for a value formed from separately-described
320 static struct piece_closure *
321 allocate_piece_closure (struct dwarf2_per_cu_data *per_cu,
322 int n_pieces, struct dwarf_expr_piece *pieces,
325 struct piece_closure *c = XZALLOC (struct piece_closure);
330 c->n_pieces = n_pieces;
331 c->addr_size = addr_size;
332 c->pieces = XCALLOC (n_pieces, struct dwarf_expr_piece);
334 memcpy (c->pieces, pieces, n_pieces * sizeof (struct dwarf_expr_piece));
335 for (i = 0; i < n_pieces; ++i)
336 if (c->pieces[i].location == DWARF_VALUE_STACK)
337 value_incref (c->pieces[i].v.value);
342 /* The lowest-level function to extract bits from a byte buffer.
343 SOURCE is the buffer. It is updated if we read to the end of a
345 SOURCE_OFFSET_BITS is the offset of the first bit to read. It is
346 updated to reflect the number of bits actually read.
347 NBITS is the number of bits we want to read. It is updated to
348 reflect the number of bits actually read. This function may read
350 BITS_BIG_ENDIAN is taken directly from gdbarch.
351 This function returns the extracted bits. */
354 extract_bits_primitive (const gdb_byte **source,
355 unsigned int *source_offset_bits,
356 int *nbits, int bits_big_endian)
358 unsigned int avail, mask, datum;
360 gdb_assert (*source_offset_bits < 8);
362 avail = 8 - *source_offset_bits;
366 mask = (1 << avail) - 1;
369 datum >>= 8 - (*source_offset_bits + *nbits);
371 datum >>= *source_offset_bits;
375 *source_offset_bits += avail;
376 if (*source_offset_bits >= 8)
378 *source_offset_bits -= 8;
385 /* Extract some bits from a source buffer and move forward in the
388 SOURCE is the source buffer. It is updated as bytes are read.
389 SOURCE_OFFSET_BITS is the offset into SOURCE. It is updated as
391 NBITS is the number of bits to read.
392 BITS_BIG_ENDIAN is taken directly from gdbarch.
394 This function returns the bits that were read. */
397 extract_bits (const gdb_byte **source, unsigned int *source_offset_bits,
398 int nbits, int bits_big_endian)
402 gdb_assert (nbits > 0 && nbits <= 8);
404 datum = extract_bits_primitive (source, source_offset_bits, &nbits,
410 more = extract_bits_primitive (source, source_offset_bits, &nbits,
422 /* Write some bits into a buffer and move forward in the buffer.
424 DATUM is the bits to write. The low-order bits of DATUM are used.
425 DEST is the destination buffer. It is updated as bytes are
427 DEST_OFFSET_BITS is the bit offset in DEST at which writing is
429 NBITS is the number of valid bits in DATUM.
430 BITS_BIG_ENDIAN is taken directly from gdbarch. */
433 insert_bits (unsigned int datum,
434 gdb_byte *dest, unsigned int dest_offset_bits,
435 int nbits, int bits_big_endian)
439 gdb_assert (dest_offset_bits + nbits <= 8);
441 mask = (1 << nbits) - 1;
444 datum <<= 8 - (dest_offset_bits + nbits);
445 mask <<= 8 - (dest_offset_bits + nbits);
449 datum <<= dest_offset_bits;
450 mask <<= dest_offset_bits;
453 gdb_assert ((datum & ~mask) == 0);
455 *dest = (*dest & ~mask) | datum;
458 /* Copy bits from a source to a destination.
460 DEST is where the bits should be written.
461 DEST_OFFSET_BITS is the bit offset into DEST.
462 SOURCE is the source of bits.
463 SOURCE_OFFSET_BITS is the bit offset into SOURCE.
464 BIT_COUNT is the number of bits to copy.
465 BITS_BIG_ENDIAN is taken directly from gdbarch. */
468 copy_bitwise (gdb_byte *dest, unsigned int dest_offset_bits,
469 const gdb_byte *source, unsigned int source_offset_bits,
470 unsigned int bit_count,
473 unsigned int dest_avail;
476 /* Reduce everything to byte-size pieces. */
477 dest += dest_offset_bits / 8;
478 dest_offset_bits %= 8;
479 source += source_offset_bits / 8;
480 source_offset_bits %= 8;
482 dest_avail = 8 - dest_offset_bits % 8;
484 /* See if we can fill the first destination byte. */
485 if (dest_avail < bit_count)
487 datum = extract_bits (&source, &source_offset_bits, dest_avail,
489 insert_bits (datum, dest, dest_offset_bits, dest_avail, bits_big_endian);
491 dest_offset_bits = 0;
492 bit_count -= dest_avail;
495 /* Now, either DEST_OFFSET_BITS is byte-aligned, or we have fewer
496 than 8 bits remaining. */
497 gdb_assert (dest_offset_bits % 8 == 0 || bit_count < 8);
498 for (; bit_count >= 8; bit_count -= 8)
500 datum = extract_bits (&source, &source_offset_bits, 8, bits_big_endian);
501 *dest++ = (gdb_byte) datum;
504 /* Finally, we may have a few leftover bits. */
505 gdb_assert (bit_count <= 8 - dest_offset_bits % 8);
508 datum = extract_bits (&source, &source_offset_bits, bit_count,
510 insert_bits (datum, dest, dest_offset_bits, bit_count, bits_big_endian);
515 read_pieced_value (struct value *v)
519 ULONGEST bits_to_skip;
521 struct piece_closure *c
522 = (struct piece_closure *) value_computed_closure (v);
523 struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (v));
525 size_t buffer_size = 0;
527 struct cleanup *cleanup;
529 = gdbarch_bits_big_endian (get_type_arch (value_type (v)));
531 if (value_type (v) != value_enclosing_type (v))
532 internal_error (__FILE__, __LINE__,
533 _("Should not be able to create a lazy value with "
534 "an enclosing type"));
536 cleanup = make_cleanup (free_current_contents, &buffer);
538 contents = value_contents_raw (v);
539 bits_to_skip = 8 * value_offset (v);
540 if (value_bitsize (v))
542 bits_to_skip += value_bitpos (v);
543 type_len = value_bitsize (v);
546 type_len = 8 * TYPE_LENGTH (value_type (v));
548 for (i = 0; i < c->n_pieces && offset < type_len; i++)
550 struct dwarf_expr_piece *p = &c->pieces[i];
551 size_t this_size, this_size_bits;
552 long dest_offset_bits, source_offset_bits, source_offset;
553 const gdb_byte *intermediate_buffer;
555 /* Compute size, source, and destination offsets for copying, in
557 this_size_bits = p->size;
558 if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
560 bits_to_skip -= this_size_bits;
563 if (this_size_bits > type_len - offset)
564 this_size_bits = type_len - offset;
565 if (bits_to_skip > 0)
567 dest_offset_bits = 0;
568 source_offset_bits = bits_to_skip;
569 this_size_bits -= bits_to_skip;
574 dest_offset_bits = offset;
575 source_offset_bits = 0;
578 this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
579 source_offset = source_offset_bits / 8;
580 if (buffer_size < this_size)
582 buffer_size = this_size;
583 buffer = xrealloc (buffer, buffer_size);
585 intermediate_buffer = buffer;
587 /* Copy from the source to DEST_BUFFER. */
590 case DWARF_VALUE_REGISTER:
592 struct gdbarch *arch = get_frame_arch (frame);
593 int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, p->v.regno);
594 int reg_offset = source_offset;
596 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
597 && this_size < register_size (arch, gdb_regnum))
599 /* Big-endian, and we want less than full size. */
600 reg_offset = register_size (arch, gdb_regnum) - this_size;
601 /* We want the lower-order THIS_SIZE_BITS of the bytes
602 we extract from the register. */
603 source_offset_bits += 8 * this_size - this_size_bits;
606 if (gdb_regnum != -1)
610 if (!get_frame_register_bytes (frame, gdb_regnum, reg_offset,
614 /* Just so garbage doesn't ever shine through. */
615 memset (buffer, 0, this_size);
618 set_value_optimized_out (v, 1);
620 mark_value_bytes_unavailable (v, offset, this_size);
625 error (_("Unable to access DWARF register number %s"),
626 paddress (arch, p->v.regno));
631 case DWARF_VALUE_MEMORY:
632 read_value_memory (v, offset,
633 p->v.mem.in_stack_memory,
634 p->v.mem.addr + source_offset,
638 case DWARF_VALUE_STACK:
640 size_t n = this_size;
642 if (n > c->addr_size - source_offset)
643 n = (c->addr_size >= source_offset
644 ? c->addr_size - source_offset
652 const gdb_byte *val_bytes = value_contents_all (p->v.value);
654 intermediate_buffer = val_bytes + source_offset;
659 case DWARF_VALUE_LITERAL:
661 size_t n = this_size;
663 if (n > p->v.literal.length - source_offset)
664 n = (p->v.literal.length >= source_offset
665 ? p->v.literal.length - source_offset
668 intermediate_buffer = p->v.literal.data + source_offset;
672 /* These bits show up as zeros -- but do not cause the value
673 to be considered optimized-out. */
674 case DWARF_VALUE_IMPLICIT_POINTER:
677 case DWARF_VALUE_OPTIMIZED_OUT:
678 set_value_optimized_out (v, 1);
682 internal_error (__FILE__, __LINE__, _("invalid location type"));
685 if (p->location != DWARF_VALUE_OPTIMIZED_OUT
686 && p->location != DWARF_VALUE_IMPLICIT_POINTER)
687 copy_bitwise (contents, dest_offset_bits,
688 intermediate_buffer, source_offset_bits % 8,
689 this_size_bits, bits_big_endian);
691 offset += this_size_bits;
694 do_cleanups (cleanup);
698 write_pieced_value (struct value *to, struct value *from)
702 ULONGEST bits_to_skip;
703 const gdb_byte *contents;
704 struct piece_closure *c
705 = (struct piece_closure *) value_computed_closure (to);
706 struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (to));
708 size_t buffer_size = 0;
710 struct cleanup *cleanup;
712 = gdbarch_bits_big_endian (get_type_arch (value_type (to)));
716 set_value_optimized_out (to, 1);
720 cleanup = make_cleanup (free_current_contents, &buffer);
722 contents = value_contents (from);
723 bits_to_skip = 8 * value_offset (to);
724 if (value_bitsize (to))
726 bits_to_skip += value_bitpos (to);
727 type_len = value_bitsize (to);
730 type_len = 8 * TYPE_LENGTH (value_type (to));
732 for (i = 0; i < c->n_pieces && offset < type_len; i++)
734 struct dwarf_expr_piece *p = &c->pieces[i];
735 size_t this_size_bits, this_size;
736 long dest_offset_bits, source_offset_bits, dest_offset, source_offset;
738 const gdb_byte *source_buffer;
740 this_size_bits = p->size;
741 if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
743 bits_to_skip -= this_size_bits;
746 if (this_size_bits > type_len - offset)
747 this_size_bits = type_len - offset;
748 if (bits_to_skip > 0)
750 dest_offset_bits = bits_to_skip;
751 source_offset_bits = 0;
752 this_size_bits -= bits_to_skip;
757 dest_offset_bits = 0;
758 source_offset_bits = offset;
761 this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
762 source_offset = source_offset_bits / 8;
763 dest_offset = dest_offset_bits / 8;
764 if (dest_offset_bits % 8 == 0 && source_offset_bits % 8 == 0)
766 source_buffer = contents + source_offset;
771 if (buffer_size < this_size)
773 buffer_size = this_size;
774 buffer = xrealloc (buffer, buffer_size);
776 source_buffer = buffer;
782 case DWARF_VALUE_REGISTER:
784 struct gdbarch *arch = get_frame_arch (frame);
785 int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, p->v.regno);
786 int reg_offset = dest_offset;
788 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
789 && this_size <= register_size (arch, gdb_regnum))
790 /* Big-endian, and we want less than full size. */
791 reg_offset = register_size (arch, gdb_regnum) - this_size;
793 if (gdb_regnum != -1)
799 if (!get_frame_register_bytes (frame, gdb_regnum, reg_offset,
804 error (_("Can't do read-modify-write to "
805 "update bitfield; containing word has been "
808 throw_error (NOT_AVAILABLE_ERROR,
809 _("Can't do read-modify-write to update "
810 "bitfield; containing word "
813 copy_bitwise (buffer, dest_offset_bits,
814 contents, source_offset_bits,
819 put_frame_register_bytes (frame, gdb_regnum, reg_offset,
820 this_size, source_buffer);
824 error (_("Unable to write to DWARF register number %s"),
825 paddress (arch, p->v.regno));
829 case DWARF_VALUE_MEMORY:
832 /* Only the first and last bytes can possibly have any
834 read_memory (p->v.mem.addr + dest_offset, buffer, 1);
835 read_memory (p->v.mem.addr + dest_offset + this_size - 1,
836 buffer + this_size - 1, 1);
837 copy_bitwise (buffer, dest_offset_bits,
838 contents, source_offset_bits,
843 write_memory (p->v.mem.addr + dest_offset,
844 source_buffer, this_size);
847 set_value_optimized_out (to, 1);
850 offset += this_size_bits;
853 do_cleanups (cleanup);
856 /* A helper function that checks bit validity in a pieced value.
857 CHECK_FOR indicates the kind of validity checking.
858 DWARF_VALUE_MEMORY means to check whether any bit is valid.
859 DWARF_VALUE_OPTIMIZED_OUT means to check whether any bit is
861 DWARF_VALUE_IMPLICIT_POINTER means to check whether the bits are an
865 check_pieced_value_bits (const struct value *value, int bit_offset,
867 enum dwarf_value_location check_for)
869 struct piece_closure *c
870 = (struct piece_closure *) value_computed_closure (value);
872 int validity = (check_for == DWARF_VALUE_MEMORY
873 || check_for == DWARF_VALUE_IMPLICIT_POINTER);
875 bit_offset += 8 * value_offset (value);
876 if (value_bitsize (value))
877 bit_offset += value_bitpos (value);
879 for (i = 0; i < c->n_pieces && bit_length > 0; i++)
881 struct dwarf_expr_piece *p = &c->pieces[i];
882 size_t this_size_bits = p->size;
886 if (bit_offset >= this_size_bits)
888 bit_offset -= this_size_bits;
892 bit_length -= this_size_bits - bit_offset;
896 bit_length -= this_size_bits;
898 if (check_for == DWARF_VALUE_IMPLICIT_POINTER)
900 if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
903 else if (p->location == DWARF_VALUE_OPTIMIZED_OUT
904 || p->location == DWARF_VALUE_IMPLICIT_POINTER)
920 check_pieced_value_validity (const struct value *value, int bit_offset,
923 return check_pieced_value_bits (value, bit_offset, bit_length,
928 check_pieced_value_invalid (const struct value *value)
930 return check_pieced_value_bits (value, 0,
931 8 * TYPE_LENGTH (value_type (value)),
932 DWARF_VALUE_OPTIMIZED_OUT);
935 /* An implementation of an lval_funcs method to see whether a value is
936 a synthetic pointer. */
939 check_pieced_synthetic_pointer (const struct value *value, int bit_offset,
942 return check_pieced_value_bits (value, bit_offset, bit_length,
943 DWARF_VALUE_IMPLICIT_POINTER);
946 /* A wrapper function for get_frame_address_in_block. */
949 get_frame_address_in_block_wrapper (void *baton)
951 return get_frame_address_in_block (baton);
954 /* An implementation of an lval_funcs method to indirect through a
955 pointer. This handles the synthetic pointer case when needed. */
957 static struct value *
958 indirect_pieced_value (struct value *value)
960 struct piece_closure *c
961 = (struct piece_closure *) value_computed_closure (value);
963 struct frame_info *frame;
964 struct dwarf2_locexpr_baton baton;
965 int i, bit_offset, bit_length;
966 struct dwarf_expr_piece *piece = NULL;
967 struct value *result;
970 type = value_type (value);
971 if (TYPE_CODE (type) != TYPE_CODE_PTR)
974 bit_length = 8 * TYPE_LENGTH (type);
975 bit_offset = 8 * value_offset (value);
976 if (value_bitsize (value))
977 bit_offset += value_bitpos (value);
979 for (i = 0; i < c->n_pieces && bit_length > 0; i++)
981 struct dwarf_expr_piece *p = &c->pieces[i];
982 size_t this_size_bits = p->size;
986 if (bit_offset >= this_size_bits)
988 bit_offset -= this_size_bits;
992 bit_length -= this_size_bits - bit_offset;
996 bit_length -= this_size_bits;
998 if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
1001 if (bit_length != 0)
1002 error (_("Invalid use of DW_OP_GNU_implicit_pointer"));
1008 frame = get_selected_frame (_("No frame selected."));
1009 byte_offset = value_as_address (value);
1012 baton = dwarf2_fetch_die_location_block (piece->v.ptr.die, c->per_cu,
1013 get_frame_address_in_block_wrapper,
1016 result = dwarf2_evaluate_loc_desc_full (TYPE_TARGET_TYPE (type), frame,
1017 baton.data, baton.size, baton.per_cu,
1024 copy_pieced_value_closure (const struct value *v)
1026 struct piece_closure *c
1027 = (struct piece_closure *) value_computed_closure (v);
1034 free_pieced_value_closure (struct value *v)
1036 struct piece_closure *c
1037 = (struct piece_closure *) value_computed_closure (v);
1044 for (i = 0; i < c->n_pieces; ++i)
1045 if (c->pieces[i].location == DWARF_VALUE_STACK)
1046 value_free (c->pieces[i].v.value);
1053 /* Functions for accessing a variable described by DW_OP_piece. */
1054 static const struct lval_funcs pieced_value_funcs = {
1057 check_pieced_value_validity,
1058 check_pieced_value_invalid,
1059 indirect_pieced_value,
1060 check_pieced_synthetic_pointer,
1061 copy_pieced_value_closure,
1062 free_pieced_value_closure
1065 /* Helper function which throws an error if a synthetic pointer is
1069 invalid_synthetic_pointer (void)
1071 error (_("access outside bounds of object "
1072 "referenced via synthetic pointer"));
1075 /* Evaluate a location description, starting at DATA and with length
1076 SIZE, to find the current location of variable of TYPE in the
1077 context of FRAME. BYTE_OFFSET is applied after the contents are
1080 static struct value *
1081 dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
1082 const gdb_byte *data, unsigned short size,
1083 struct dwarf2_per_cu_data *per_cu,
1084 LONGEST byte_offset)
1086 struct value *retval;
1087 struct dwarf_expr_baton baton;
1088 struct dwarf_expr_context *ctx;
1089 struct cleanup *old_chain, *value_chain;
1090 struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
1091 volatile struct gdb_exception ex;
1093 if (byte_offset < 0)
1094 invalid_synthetic_pointer ();
1097 return allocate_optimized_out_value (type);
1099 baton.frame = frame;
1100 baton.per_cu = per_cu;
1102 ctx = new_dwarf_expr_context ();
1103 old_chain = make_cleanup_free_dwarf_expr_context (ctx);
1104 value_chain = make_cleanup_value_free_to_mark (value_mark ());
1106 ctx->gdbarch = get_objfile_arch (objfile);
1107 ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
1108 ctx->offset = dwarf2_per_cu_text_offset (per_cu);
1109 ctx->baton = &baton;
1110 ctx->read_reg = dwarf_expr_read_reg;
1111 ctx->read_mem = dwarf_expr_read_mem;
1112 ctx->get_frame_base = dwarf_expr_frame_base;
1113 ctx->get_frame_cfa = dwarf_expr_frame_cfa;
1114 ctx->get_frame_pc = dwarf_expr_frame_pc;
1115 ctx->get_tls_address = dwarf_expr_tls_address;
1116 ctx->dwarf_call = dwarf_expr_dwarf_call;
1117 ctx->get_base_type = dwarf_expr_get_base_type;
1119 TRY_CATCH (ex, RETURN_MASK_ERROR)
1121 dwarf_expr_eval (ctx, data, size);
1125 if (ex.error == NOT_AVAILABLE_ERROR)
1127 do_cleanups (old_chain);
1128 retval = allocate_value (type);
1129 mark_value_bytes_unavailable (retval, 0, TYPE_LENGTH (type));
1133 throw_exception (ex);
1136 if (ctx->num_pieces > 0)
1138 struct piece_closure *c;
1139 struct frame_id frame_id = get_frame_id (frame);
1140 ULONGEST bit_size = 0;
1143 for (i = 0; i < ctx->num_pieces; ++i)
1144 bit_size += ctx->pieces[i].size;
1145 if (8 * (byte_offset + TYPE_LENGTH (type)) > bit_size)
1146 invalid_synthetic_pointer ();
1148 c = allocate_piece_closure (per_cu, ctx->num_pieces, ctx->pieces,
1150 /* We must clean up the value chain after creating the piece
1151 closure but before allocating the result. */
1152 do_cleanups (value_chain);
1153 retval = allocate_computed_value (type, &pieced_value_funcs, c);
1154 VALUE_FRAME_ID (retval) = frame_id;
1155 set_value_offset (retval, byte_offset);
1159 switch (ctx->location)
1161 case DWARF_VALUE_REGISTER:
1163 struct gdbarch *arch = get_frame_arch (frame);
1164 ULONGEST dwarf_regnum = value_as_long (dwarf_expr_fetch (ctx, 0));
1165 int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_regnum);
1167 if (byte_offset != 0)
1168 error (_("cannot use offset on synthetic pointer to register"));
1169 do_cleanups (value_chain);
1170 if (gdb_regnum != -1)
1171 retval = value_from_register (type, gdb_regnum, frame);
1173 error (_("Unable to access DWARF register number %s"),
1174 paddress (arch, dwarf_regnum));
1178 case DWARF_VALUE_MEMORY:
1180 CORE_ADDR address = dwarf_expr_fetch_address (ctx, 0);
1181 int in_stack_memory = dwarf_expr_fetch_in_stack_memory (ctx, 0);
1183 do_cleanups (value_chain);
1184 retval = allocate_value_lazy (type);
1185 VALUE_LVAL (retval) = lval_memory;
1186 if (in_stack_memory)
1187 set_value_stack (retval, 1);
1188 set_value_address (retval, address + byte_offset);
1192 case DWARF_VALUE_STACK:
1194 struct value *value = dwarf_expr_fetch (ctx, 0);
1196 const gdb_byte *val_bytes;
1197 size_t n = TYPE_LENGTH (value_type (value));
1199 if (byte_offset + TYPE_LENGTH (type) > n)
1200 invalid_synthetic_pointer ();
1202 val_bytes = value_contents_all (value);
1203 val_bytes += byte_offset;
1206 /* Preserve VALUE because we are going to free values back
1207 to the mark, but we still need the value contents
1209 value_incref (value);
1210 do_cleanups (value_chain);
1211 make_cleanup_value_free (value);
1213 retval = allocate_value (type);
1214 contents = value_contents_raw (retval);
1215 if (n > TYPE_LENGTH (type))
1216 n = TYPE_LENGTH (type);
1217 memcpy (contents, val_bytes, n);
1221 case DWARF_VALUE_LITERAL:
1224 const bfd_byte *ldata;
1225 size_t n = ctx->len;
1227 if (byte_offset + TYPE_LENGTH (type) > n)
1228 invalid_synthetic_pointer ();
1230 do_cleanups (value_chain);
1231 retval = allocate_value (type);
1232 contents = value_contents_raw (retval);
1234 ldata = ctx->data + byte_offset;
1237 if (n > TYPE_LENGTH (type))
1238 n = TYPE_LENGTH (type);
1239 memcpy (contents, ldata, n);
1243 case DWARF_VALUE_OPTIMIZED_OUT:
1244 do_cleanups (value_chain);
1245 retval = allocate_optimized_out_value (type);
1248 /* DWARF_VALUE_IMPLICIT_POINTER was converted to a pieced
1249 operation by execute_stack_op. */
1250 case DWARF_VALUE_IMPLICIT_POINTER:
1251 /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context --
1252 it can only be encountered when making a piece. */
1254 internal_error (__FILE__, __LINE__, _("invalid location type"));
1258 set_value_initialized (retval, ctx->initialized);
1260 do_cleanups (old_chain);
1265 /* The exported interface to dwarf2_evaluate_loc_desc_full; it always
1266 passes 0 as the byte_offset. */
1269 dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame,
1270 const gdb_byte *data, unsigned short size,
1271 struct dwarf2_per_cu_data *per_cu)
1273 return dwarf2_evaluate_loc_desc_full (type, frame, data, size, per_cu, 0);
1277 /* Helper functions and baton for dwarf2_loc_desc_needs_frame. */
1279 struct needs_frame_baton
1282 struct dwarf2_per_cu_data *per_cu;
1285 /* Reads from registers do require a frame. */
1287 needs_frame_read_reg (void *baton, int regnum)
1289 struct needs_frame_baton *nf_baton = baton;
1291 nf_baton->needs_frame = 1;
1295 /* Reads from memory do not require a frame. */
1297 needs_frame_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
1299 memset (buf, 0, len);
1302 /* Frame-relative accesses do require a frame. */
1304 needs_frame_frame_base (void *baton, const gdb_byte **start, size_t * length)
1306 static gdb_byte lit0 = DW_OP_lit0;
1307 struct needs_frame_baton *nf_baton = baton;
1312 nf_baton->needs_frame = 1;
1315 /* CFA accesses require a frame. */
1318 needs_frame_frame_cfa (void *baton)
1320 struct needs_frame_baton *nf_baton = baton;
1322 nf_baton->needs_frame = 1;
1326 /* Thread-local accesses do require a frame. */
1328 needs_frame_tls_address (void *baton, CORE_ADDR offset)
1330 struct needs_frame_baton *nf_baton = baton;
1332 nf_baton->needs_frame = 1;
1336 /* Helper interface of per_cu_dwarf_call for dwarf2_loc_desc_needs_frame. */
1339 needs_frame_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
1341 struct needs_frame_baton *nf_baton = ctx->baton;
1343 per_cu_dwarf_call (ctx, die_offset, nf_baton->per_cu,
1344 ctx->get_frame_pc, ctx->baton);
1347 /* Return non-zero iff the location expression at DATA (length SIZE)
1348 requires a frame to evaluate. */
1351 dwarf2_loc_desc_needs_frame (const gdb_byte *data, unsigned short size,
1352 struct dwarf2_per_cu_data *per_cu)
1354 struct needs_frame_baton baton;
1355 struct dwarf_expr_context *ctx;
1357 struct cleanup *old_chain;
1358 struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
1360 baton.needs_frame = 0;
1361 baton.per_cu = per_cu;
1363 ctx = new_dwarf_expr_context ();
1364 old_chain = make_cleanup_free_dwarf_expr_context (ctx);
1365 make_cleanup_value_free_to_mark (value_mark ());
1367 ctx->gdbarch = get_objfile_arch (objfile);
1368 ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
1369 ctx->offset = dwarf2_per_cu_text_offset (per_cu);
1370 ctx->baton = &baton;
1371 ctx->read_reg = needs_frame_read_reg;
1372 ctx->read_mem = needs_frame_read_mem;
1373 ctx->get_frame_base = needs_frame_frame_base;
1374 ctx->get_frame_cfa = needs_frame_frame_cfa;
1375 ctx->get_frame_pc = needs_frame_frame_cfa;
1376 ctx->get_tls_address = needs_frame_tls_address;
1377 ctx->dwarf_call = needs_frame_dwarf_call;
1379 dwarf_expr_eval (ctx, data, size);
1381 in_reg = ctx->location == DWARF_VALUE_REGISTER;
1383 if (ctx->num_pieces > 0)
1387 /* If the location has several pieces, and any of them are in
1388 registers, then we will need a frame to fetch them from. */
1389 for (i = 0; i < ctx->num_pieces; i++)
1390 if (ctx->pieces[i].location == DWARF_VALUE_REGISTER)
1394 do_cleanups (old_chain);
1396 return baton.needs_frame || in_reg;
1399 /* A helper function that throws an unimplemented error mentioning a
1400 given DWARF operator. */
1403 unimplemented (unsigned int op)
1405 const char *name = dwarf_stack_op_name (op);
1408 error (_("DWARF operator %s cannot be translated to an agent expression"),
1411 error (_("Unknown DWARF operator 0x%02x cannot be translated "
1412 "to an agent expression"),
1416 /* A helper function to convert a DWARF register to an arch register.
1417 ARCH is the architecture.
1418 DWARF_REG is the register.
1419 This will throw an exception if the DWARF register cannot be
1420 translated to an architecture register. */
1423 translate_register (struct gdbarch *arch, int dwarf_reg)
1425 int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg);
1427 error (_("Unable to access DWARF register number %d"), dwarf_reg);
1431 /* A helper function that emits an access to memory. ARCH is the
1432 target architecture. EXPR is the expression which we are building.
1433 NBITS is the number of bits we want to read. This emits the
1434 opcodes needed to read the memory and then extract the desired
1438 access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits)
1440 ULONGEST nbytes = (nbits + 7) / 8;
1442 gdb_assert (nbits > 0 && nbits <= sizeof (LONGEST));
1445 ax_trace_quick (expr, nbytes);
1448 ax_simple (expr, aop_ref8);
1449 else if (nbits <= 16)
1450 ax_simple (expr, aop_ref16);
1451 else if (nbits <= 32)
1452 ax_simple (expr, aop_ref32);
1454 ax_simple (expr, aop_ref64);
1456 /* If we read exactly the number of bytes we wanted, we're done. */
1457 if (8 * nbytes == nbits)
1460 if (gdbarch_bits_big_endian (arch))
1462 /* On a bits-big-endian machine, we want the high-order
1464 ax_const_l (expr, 8 * nbytes - nbits);
1465 ax_simple (expr, aop_rsh_unsigned);
1469 /* On a bits-little-endian box, we want the low-order NBITS. */
1470 ax_zero_ext (expr, nbits);
1474 /* A helper function to return the frame's PC. */
1477 get_ax_pc (void *baton)
1479 struct agent_expr *expr = baton;
1484 /* Compile a DWARF location expression to an agent expression.
1486 EXPR is the agent expression we are building.
1487 LOC is the agent value we modify.
1488 ARCH is the architecture.
1489 ADDR_SIZE is the size of addresses, in bytes.
1490 OP_PTR is the start of the location expression.
1491 OP_END is one past the last byte of the location expression.
1493 This will throw an exception for various kinds of errors -- for
1494 example, if the expression cannot be compiled, or if the expression
1498 dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
1499 struct gdbarch *arch, unsigned int addr_size,
1500 const gdb_byte *op_ptr, const gdb_byte *op_end,
1501 struct dwarf2_per_cu_data *per_cu)
1503 struct cleanup *cleanups;
1505 VEC(int) *dw_labels = NULL, *patches = NULL;
1506 const gdb_byte * const base = op_ptr;
1507 const gdb_byte *previous_piece = op_ptr;
1508 enum bfd_endian byte_order = gdbarch_byte_order (arch);
1509 ULONGEST bits_collected = 0;
1510 unsigned int addr_size_bits = 8 * addr_size;
1511 int bits_big_endian = gdbarch_bits_big_endian (arch);
1513 offsets = xmalloc ((op_end - op_ptr) * sizeof (int));
1514 cleanups = make_cleanup (xfree, offsets);
1516 for (i = 0; i < op_end - op_ptr; ++i)
1519 make_cleanup (VEC_cleanup (int), &dw_labels);
1520 make_cleanup (VEC_cleanup (int), &patches);
1522 /* By default we are making an address. */
1523 loc->kind = axs_lvalue_memory;
1525 while (op_ptr < op_end)
1527 enum dwarf_location_atom op = *op_ptr;
1528 ULONGEST uoffset, reg;
1532 offsets[op_ptr - base] = expr->len;
1535 /* Our basic approach to code generation is to map DWARF
1536 operations directly to AX operations. However, there are
1539 First, DWARF works on address-sized units, but AX always uses
1540 LONGEST. For most operations we simply ignore this
1541 difference; instead we generate sign extensions as needed
1542 before division and comparison operations. It would be nice
1543 to omit the sign extensions, but there is no way to determine
1544 the size of the target's LONGEST. (This code uses the size
1545 of the host LONGEST in some cases -- that is a bug but it is
1548 Second, some DWARF operations cannot be translated to AX.
1549 For these we simply fail. See
1550 http://sourceware.org/bugzilla/show_bug.cgi?id=11662. */
1585 ax_const_l (expr, op - DW_OP_lit0);
1589 uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order);
1590 op_ptr += addr_size;
1591 /* Some versions of GCC emit DW_OP_addr before
1592 DW_OP_GNU_push_tls_address. In this case the value is an
1593 index, not an address. We don't support things like
1594 branching between the address and the TLS op. */
1595 if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
1596 uoffset += dwarf2_per_cu_text_offset (per_cu);
1597 ax_const_l (expr, uoffset);
1601 ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order));
1605 ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order));
1609 ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order));
1613 ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order));
1617 ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order));
1621 ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order));
1625 ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order));
1629 ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order));
1633 op_ptr = read_uleb128 (op_ptr, op_end, &uoffset);
1634 ax_const_l (expr, uoffset);
1637 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1638 ax_const_l (expr, offset);
1673 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
1674 loc->u.reg = translate_register (arch, op - DW_OP_reg0);
1675 loc->kind = axs_lvalue_register;
1679 op_ptr = read_uleb128 (op_ptr, op_end, ®);
1680 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
1681 loc->u.reg = translate_register (arch, reg);
1682 loc->kind = axs_lvalue_register;
1685 case DW_OP_implicit_value:
1689 op_ptr = read_uleb128 (op_ptr, op_end, &len);
1690 if (op_ptr + len > op_end)
1691 error (_("DW_OP_implicit_value: too few bytes available."));
1692 if (len > sizeof (ULONGEST))
1693 error (_("Cannot translate DW_OP_implicit_value of %d bytes"),
1696 ax_const_l (expr, extract_unsigned_integer (op_ptr, len,
1699 dwarf_expr_require_composition (op_ptr, op_end,
1700 "DW_OP_implicit_value");
1702 loc->kind = axs_rvalue;
1706 case DW_OP_stack_value:
1707 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
1708 loc->kind = axs_rvalue;
1743 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1744 i = translate_register (arch, op - DW_OP_breg0);
1748 ax_const_l (expr, offset);
1749 ax_simple (expr, aop_add);
1754 op_ptr = read_uleb128 (op_ptr, op_end, ®);
1755 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1756 i = translate_register (arch, reg);
1760 ax_const_l (expr, offset);
1761 ax_simple (expr, aop_add);
1767 const gdb_byte *datastart;
1769 unsigned int before_stack_len;
1771 struct symbol *framefunc;
1772 LONGEST base_offset = 0;
1774 b = block_for_pc (expr->scope);
1777 error (_("No block found for address"));
1779 framefunc = block_linkage_function (b);
1782 error (_("No function found for block"));
1784 dwarf_expr_frame_base_1 (framefunc, expr->scope,
1785 &datastart, &datalen);
1787 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1788 dwarf2_compile_expr_to_ax (expr, loc, arch, addr_size, datastart,
1789 datastart + datalen, per_cu);
1793 ax_const_l (expr, offset);
1794 ax_simple (expr, aop_add);
1797 loc->kind = axs_lvalue_memory;
1802 ax_simple (expr, aop_dup);
1806 ax_simple (expr, aop_pop);
1811 ax_pick (expr, offset);
1815 ax_simple (expr, aop_swap);
1823 ax_simple (expr, aop_rot);
1827 case DW_OP_deref_size:
1831 if (op == DW_OP_deref_size)
1839 ax_simple (expr, aop_ref8);
1842 ax_simple (expr, aop_ref16);
1845 ax_simple (expr, aop_ref32);
1848 ax_simple (expr, aop_ref64);
1851 /* Note that dwarf_stack_op_name will never return
1853 error (_("Unsupported size %d in %s"),
1854 size, dwarf_stack_op_name (op));
1860 /* Sign extend the operand. */
1861 ax_ext (expr, addr_size_bits);
1862 ax_simple (expr, aop_dup);
1863 ax_const_l (expr, 0);
1864 ax_simple (expr, aop_less_signed);
1865 ax_simple (expr, aop_log_not);
1866 i = ax_goto (expr, aop_if_goto);
1867 /* We have to emit 0 - X. */
1868 ax_const_l (expr, 0);
1869 ax_simple (expr, aop_swap);
1870 ax_simple (expr, aop_sub);
1871 ax_label (expr, i, expr->len);
1875 /* No need to sign extend here. */
1876 ax_const_l (expr, 0);
1877 ax_simple (expr, aop_swap);
1878 ax_simple (expr, aop_sub);
1882 /* Sign extend the operand. */
1883 ax_ext (expr, addr_size_bits);
1884 ax_simple (expr, aop_bit_not);
1887 case DW_OP_plus_uconst:
1888 op_ptr = read_uleb128 (op_ptr, op_end, ®);
1889 /* It would be really weird to emit `DW_OP_plus_uconst 0',
1890 but we micro-optimize anyhow. */
1893 ax_const_l (expr, reg);
1894 ax_simple (expr, aop_add);
1899 ax_simple (expr, aop_bit_and);
1903 /* Sign extend the operands. */
1904 ax_ext (expr, addr_size_bits);
1905 ax_simple (expr, aop_swap);
1906 ax_ext (expr, addr_size_bits);
1907 ax_simple (expr, aop_swap);
1908 ax_simple (expr, aop_div_signed);
1912 ax_simple (expr, aop_sub);
1916 ax_simple (expr, aop_rem_unsigned);
1920 ax_simple (expr, aop_mul);
1924 ax_simple (expr, aop_bit_or);
1928 ax_simple (expr, aop_add);
1932 ax_simple (expr, aop_lsh);
1936 ax_simple (expr, aop_rsh_unsigned);
1940 ax_simple (expr, aop_rsh_signed);
1944 ax_simple (expr, aop_bit_xor);
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 /* Note no swap here: A <= B is !(B < A). */
1953 ax_simple (expr, aop_less_signed);
1954 ax_simple (expr, aop_log_not);
1958 /* Sign extend the operands. */
1959 ax_ext (expr, addr_size_bits);
1960 ax_simple (expr, aop_swap);
1961 ax_ext (expr, addr_size_bits);
1962 ax_simple (expr, aop_swap);
1963 /* A >= B is !(A < B). */
1964 ax_simple (expr, aop_less_signed);
1965 ax_simple (expr, aop_log_not);
1969 /* Sign extend the operands. */
1970 ax_ext (expr, addr_size_bits);
1971 ax_simple (expr, aop_swap);
1972 ax_ext (expr, addr_size_bits);
1973 /* No need for a second swap here. */
1974 ax_simple (expr, aop_equal);
1978 /* Sign extend the operands. */
1979 ax_ext (expr, addr_size_bits);
1980 ax_simple (expr, aop_swap);
1981 ax_ext (expr, addr_size_bits);
1982 ax_simple (expr, aop_swap);
1983 ax_simple (expr, aop_less_signed);
1987 /* Sign extend the operands. */
1988 ax_ext (expr, addr_size_bits);
1989 ax_simple (expr, aop_swap);
1990 ax_ext (expr, addr_size_bits);
1991 /* Note no swap here: A > B is B < A. */
1992 ax_simple (expr, aop_less_signed);
1996 /* Sign extend the operands. */
1997 ax_ext (expr, addr_size_bits);
1998 ax_simple (expr, aop_swap);
1999 ax_ext (expr, addr_size_bits);
2000 /* No need for a swap here. */
2001 ax_simple (expr, aop_equal);
2002 ax_simple (expr, aop_log_not);
2005 case DW_OP_call_frame_cfa:
2006 dwarf2_compile_cfa_to_ax (expr, loc, arch, expr->scope, per_cu);
2007 loc->kind = axs_lvalue_memory;
2010 case DW_OP_GNU_push_tls_address:
2015 offset = extract_signed_integer (op_ptr, 2, byte_order);
2017 i = ax_goto (expr, aop_goto);
2018 VEC_safe_push (int, dw_labels, op_ptr + offset - base);
2019 VEC_safe_push (int, patches, i);
2023 offset = extract_signed_integer (op_ptr, 2, byte_order);
2025 /* Zero extend the operand. */
2026 ax_zero_ext (expr, addr_size_bits);
2027 i = ax_goto (expr, aop_if_goto);
2028 VEC_safe_push (int, dw_labels, op_ptr + offset - base);
2029 VEC_safe_push (int, patches, i);
2036 case DW_OP_bit_piece:
2038 ULONGEST size, offset;
2040 if (op_ptr - 1 == previous_piece)
2041 error (_("Cannot translate empty pieces to agent expressions"));
2042 previous_piece = op_ptr - 1;
2044 op_ptr = read_uleb128 (op_ptr, op_end, &size);
2045 if (op == DW_OP_piece)
2051 op_ptr = read_uleb128 (op_ptr, op_end, &offset);
2053 if (bits_collected + size > 8 * sizeof (LONGEST))
2054 error (_("Expression pieces exceed word size"));
2056 /* Access the bits. */
2059 case axs_lvalue_register:
2060 ax_reg (expr, loc->u.reg);
2063 case axs_lvalue_memory:
2064 /* Offset the pointer, if needed. */
2067 ax_const_l (expr, offset / 8);
2068 ax_simple (expr, aop_add);
2071 access_memory (arch, expr, size);
2075 /* For a bits-big-endian target, shift up what we already
2076 have. For a bits-little-endian target, shift up the
2077 new data. Note that there is a potential bug here if
2078 the DWARF expression leaves multiple values on the
2080 if (bits_collected > 0)
2082 if (bits_big_endian)
2084 ax_simple (expr, aop_swap);
2085 ax_const_l (expr, size);
2086 ax_simple (expr, aop_lsh);
2087 /* We don't need a second swap here, because
2088 aop_bit_or is symmetric. */
2092 ax_const_l (expr, size);
2093 ax_simple (expr, aop_lsh);
2095 ax_simple (expr, aop_bit_or);
2098 bits_collected += size;
2099 loc->kind = axs_rvalue;
2103 case DW_OP_GNU_uninit:
2109 struct dwarf2_locexpr_baton block;
2110 int size = (op == DW_OP_call2 ? 2 : 4);
2112 uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
2115 block = dwarf2_fetch_die_location_block (uoffset, per_cu,
2118 /* DW_OP_call_ref is currently not supported. */
2119 gdb_assert (block.per_cu == per_cu);
2121 dwarf2_compile_expr_to_ax (expr, loc, arch, addr_size,
2122 block.data, block.data + block.size,
2127 case DW_OP_call_ref:
2135 /* Patch all the branches we emitted. */
2136 for (i = 0; i < VEC_length (int, patches); ++i)
2138 int targ = offsets[VEC_index (int, dw_labels, i)];
2140 internal_error (__FILE__, __LINE__, _("invalid label"));
2141 ax_label (expr, VEC_index (int, patches, i), targ);
2144 do_cleanups (cleanups);
2148 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
2149 evaluator to calculate the location. */
2150 static struct value *
2151 locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
2153 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2156 val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
2157 dlbaton->size, dlbaton->per_cu);
2162 /* Return non-zero iff we need a frame to evaluate SYMBOL. */
2164 locexpr_read_needs_frame (struct symbol *symbol)
2166 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2168 return dwarf2_loc_desc_needs_frame (dlbaton->data, dlbaton->size,
2172 /* Return true if DATA points to the end of a piece. END is one past
2173 the last byte in the expression. */
2176 piece_end_p (const gdb_byte *data, const gdb_byte *end)
2178 return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece;
2181 /* Helper for locexpr_describe_location_piece that finds the name of a
2185 locexpr_regname (struct gdbarch *gdbarch, int dwarf_regnum)
2189 regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, dwarf_regnum);
2190 return gdbarch_register_name (gdbarch, regnum);
2193 /* Nicely describe a single piece of a location, returning an updated
2194 position in the bytecode sequence. This function cannot recognize
2195 all locations; if a location is not recognized, it simply returns
2198 static const gdb_byte *
2199 locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
2200 CORE_ADDR addr, struct objfile *objfile,
2201 const gdb_byte *data, const gdb_byte *end,
2202 unsigned int addr_size)
2204 struct gdbarch *gdbarch = get_objfile_arch (objfile);
2206 if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
2208 fprintf_filtered (stream, _("a variable in $%s"),
2209 locexpr_regname (gdbarch, data[0] - DW_OP_reg0));
2212 else if (data[0] == DW_OP_regx)
2216 data = read_uleb128 (data + 1, end, ®);
2217 fprintf_filtered (stream, _("a variable in $%s"),
2218 locexpr_regname (gdbarch, reg));
2220 else if (data[0] == DW_OP_fbreg)
2223 struct symbol *framefunc;
2225 LONGEST frame_offset;
2226 const gdb_byte *base_data, *new_data, *save_data = data;
2228 LONGEST base_offset = 0;
2230 new_data = read_sleb128 (data + 1, end, &frame_offset);
2231 if (!piece_end_p (new_data, end))
2235 b = block_for_pc (addr);
2238 error (_("No block found for address for symbol \"%s\"."),
2239 SYMBOL_PRINT_NAME (symbol));
2241 framefunc = block_linkage_function (b);
2244 error (_("No function found for block for symbol \"%s\"."),
2245 SYMBOL_PRINT_NAME (symbol));
2247 dwarf_expr_frame_base_1 (framefunc, addr, &base_data, &base_size);
2249 if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
2251 const gdb_byte *buf_end;
2253 frame_reg = base_data[0] - DW_OP_breg0;
2254 buf_end = read_sleb128 (base_data + 1,
2255 base_data + base_size, &base_offset);
2256 if (buf_end != base_data + base_size)
2257 error (_("Unexpected opcode after "
2258 "DW_OP_breg%u for symbol \"%s\"."),
2259 frame_reg, SYMBOL_PRINT_NAME (symbol));
2261 else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
2263 /* The frame base is just the register, with no offset. */
2264 frame_reg = base_data[0] - DW_OP_reg0;
2269 /* We don't know what to do with the frame base expression,
2270 so we can't trace this variable; give up. */
2274 fprintf_filtered (stream,
2275 _("a variable at frame base reg $%s offset %s+%s"),
2276 locexpr_regname (gdbarch, frame_reg),
2277 plongest (base_offset), plongest (frame_offset));
2279 else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
2280 && piece_end_p (data, end))
2284 data = read_sleb128 (data + 1, end, &offset);
2286 fprintf_filtered (stream,
2287 _("a variable at offset %s from base reg $%s"),
2289 locexpr_regname (gdbarch, data[0] - DW_OP_breg0));
2292 /* The location expression for a TLS variable looks like this (on a
2295 DW_AT_location : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
2296 (DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
2298 0x3 is the encoding for DW_OP_addr, which has an operand as long
2299 as the size of an address on the target machine (here is 8
2300 bytes). Note that more recent version of GCC emit DW_OP_const4u
2301 or DW_OP_const8u, depending on address size, rather than
2302 DW_OP_addr. 0xe0 is the encoding for DW_OP_GNU_push_tls_address.
2303 The operand represents the offset at which the variable is within
2304 the thread local storage. */
2306 else if (data + 1 + addr_size < end
2307 && (data[0] == DW_OP_addr
2308 || (addr_size == 4 && data[0] == DW_OP_const4u)
2309 || (addr_size == 8 && data[0] == DW_OP_const8u))
2310 && data[1 + addr_size] == DW_OP_GNU_push_tls_address
2311 && piece_end_p (data + 2 + addr_size, end))
2314 offset = extract_unsigned_integer (data + 1, addr_size,
2315 gdbarch_byte_order (gdbarch));
2317 fprintf_filtered (stream,
2318 _("a thread-local variable at offset 0x%s "
2319 "in the thread-local storage for `%s'"),
2320 phex_nz (offset, addr_size), objfile->name);
2322 data += 1 + addr_size + 1;
2324 else if (data[0] >= DW_OP_lit0
2325 && data[0] <= DW_OP_lit31
2327 && data[1] == DW_OP_stack_value)
2329 fprintf_filtered (stream, _("the constant %d"), data[0] - DW_OP_lit0);
2336 /* Disassemble an expression, stopping at the end of a piece or at the
2337 end of the expression. Returns a pointer to the next unread byte
2338 in the input expression. If ALL is nonzero, then this function
2339 will keep going until it reaches the end of the expression. */
2341 static const gdb_byte *
2342 disassemble_dwarf_expression (struct ui_file *stream,
2343 struct gdbarch *arch, unsigned int addr_size,
2345 const gdb_byte *data, const gdb_byte *end,
2347 struct dwarf2_per_cu_data *per_cu)
2349 const gdb_byte *start = data;
2351 fprintf_filtered (stream, _("a complex DWARF expression:\n"));
2355 || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
2357 enum dwarf_location_atom op = *data++;
2362 name = dwarf_stack_op_name (op);
2365 error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
2366 op, (long) (data - 1 - start));
2367 fprintf_filtered (stream, " % 4ld: %s", (long) (data - 1 - start), name);
2372 ul = extract_unsigned_integer (data, addr_size,
2373 gdbarch_byte_order (arch));
2375 fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
2379 ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch));
2381 fprintf_filtered (stream, " %s", pulongest (ul));
2384 l = extract_signed_integer (data, 1, gdbarch_byte_order (arch));
2386 fprintf_filtered (stream, " %s", plongest (l));
2389 ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
2391 fprintf_filtered (stream, " %s", pulongest (ul));
2394 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
2396 fprintf_filtered (stream, " %s", plongest (l));
2399 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
2401 fprintf_filtered (stream, " %s", pulongest (ul));
2404 l = extract_signed_integer (data, 4, gdbarch_byte_order (arch));
2406 fprintf_filtered (stream, " %s", plongest (l));
2409 ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch));
2411 fprintf_filtered (stream, " %s", pulongest (ul));
2414 l = extract_signed_integer (data, 8, gdbarch_byte_order (arch));
2416 fprintf_filtered (stream, " %s", plongest (l));
2419 data = read_uleb128 (data, end, &ul);
2420 fprintf_filtered (stream, " %s", pulongest (ul));
2423 data = read_sleb128 (data, end, &l);
2424 fprintf_filtered (stream, " %s", plongest (l));
2459 fprintf_filtered (stream, " [$%s]",
2460 locexpr_regname (arch, op - DW_OP_reg0));
2464 data = read_uleb128 (data, end, &ul);
2465 fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
2466 locexpr_regname (arch, (int) ul));
2469 case DW_OP_implicit_value:
2470 data = read_uleb128 (data, end, &ul);
2472 fprintf_filtered (stream, " %s", pulongest (ul));
2507 data = read_sleb128 (data, end, &l);
2508 fprintf_filtered (stream, " %s [$%s]", plongest (l),
2509 locexpr_regname (arch, op - DW_OP_breg0));
2513 data = read_uleb128 (data, end, &ul);
2514 data = read_sleb128 (data, end, &l);
2515 fprintf_filtered (stream, " register %s [$%s] offset %s",
2517 locexpr_regname (arch, (int) ul),
2522 data = read_sleb128 (data, end, &l);
2523 fprintf_filtered (stream, " %s", plongest (l));
2526 case DW_OP_xderef_size:
2527 case DW_OP_deref_size:
2529 fprintf_filtered (stream, " %d", *data);
2533 case DW_OP_plus_uconst:
2534 data = read_uleb128 (data, end, &ul);
2535 fprintf_filtered (stream, " %s", pulongest (ul));
2539 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
2541 fprintf_filtered (stream, " to %ld",
2542 (long) (data + l - start));
2546 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
2548 fprintf_filtered (stream, " %ld",
2549 (long) (data + l - start));
2553 ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
2555 fprintf_filtered (stream, " offset %s", phex_nz (ul, 2));
2559 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
2561 fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
2564 case DW_OP_call_ref:
2565 ul = extract_unsigned_integer (data, offset_size,
2566 gdbarch_byte_order (arch));
2567 data += offset_size;
2568 fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
2572 data = read_uleb128 (data, end, &ul);
2573 fprintf_filtered (stream, " %s (bytes)", pulongest (ul));
2576 case DW_OP_bit_piece:
2580 data = read_uleb128 (data, end, &ul);
2581 data = read_uleb128 (data, end, &offset);
2582 fprintf_filtered (stream, " size %s offset %s (bits)",
2583 pulongest (ul), pulongest (offset));
2587 case DW_OP_GNU_implicit_pointer:
2589 ul = extract_unsigned_integer (data, offset_size,
2590 gdbarch_byte_order (arch));
2591 data += offset_size;
2593 data = read_sleb128 (data, end, &l);
2595 fprintf_filtered (stream, " DIE %s offset %s",
2596 phex_nz (ul, offset_size),
2601 case DW_OP_GNU_deref_type:
2603 int addr_size = *data++;
2607 data = read_uleb128 (data, end, &offset);
2608 type = dwarf2_get_die_type (offset, per_cu);
2609 fprintf_filtered (stream, "<");
2610 type_print (type, "", stream, -1);
2611 fprintf_filtered (stream, " [0x%s]> %d", phex_nz (offset, 0),
2616 case DW_OP_GNU_const_type:
2621 data = read_uleb128 (data, end, &type_die);
2622 type = dwarf2_get_die_type (type_die, per_cu);
2623 fprintf_filtered (stream, "<");
2624 type_print (type, "", stream, -1);
2625 fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die, 0));
2629 case DW_OP_GNU_regval_type:
2631 ULONGEST type_die, reg;
2634 data = read_uleb128 (data, end, ®);
2635 data = read_uleb128 (data, end, &type_die);
2637 type = dwarf2_get_die_type (type_die, per_cu);
2638 fprintf_filtered (stream, "<");
2639 type_print (type, "", stream, -1);
2640 fprintf_filtered (stream, " [0x%s]> [$%s]", phex_nz (type_die, 0),
2641 locexpr_regname (arch, reg));
2645 case DW_OP_GNU_convert:
2646 case DW_OP_GNU_reinterpret:
2650 data = read_uleb128 (data, end, &type_die);
2653 fprintf_filtered (stream, "<0>");
2658 type = dwarf2_get_die_type (type_die, per_cu);
2659 fprintf_filtered (stream, "<");
2660 type_print (type, "", stream, -1);
2661 fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die, 0));
2667 fprintf_filtered (stream, "\n");
2673 /* Describe a single location, which may in turn consist of multiple
2677 locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
2678 struct ui_file *stream,
2679 const gdb_byte *data, int size,
2680 struct objfile *objfile, unsigned int addr_size,
2681 int offset_size, struct dwarf2_per_cu_data *per_cu)
2683 const gdb_byte *end = data + size;
2684 int first_piece = 1, bad = 0;
2688 const gdb_byte *here = data;
2689 int disassemble = 1;
2694 fprintf_filtered (stream, _(", and "));
2696 if (!dwarf2_always_disassemble)
2698 data = locexpr_describe_location_piece (symbol, stream,
2700 data, end, addr_size);
2701 /* If we printed anything, or if we have an empty piece,
2702 then don't disassemble. */
2704 || data[0] == DW_OP_piece
2705 || data[0] == DW_OP_bit_piece)
2709 data = disassemble_dwarf_expression (stream,
2710 get_objfile_arch (objfile),
2711 addr_size, offset_size, data, end,
2712 dwarf2_always_disassemble,
2717 int empty = data == here;
2720 fprintf_filtered (stream, " ");
2721 if (data[0] == DW_OP_piece)
2725 data = read_uleb128 (data + 1, end, &bytes);
2728 fprintf_filtered (stream, _("an empty %s-byte piece"),
2731 fprintf_filtered (stream, _(" [%s-byte piece]"),
2734 else if (data[0] == DW_OP_bit_piece)
2736 ULONGEST bits, offset;
2738 data = read_uleb128 (data + 1, end, &bits);
2739 data = read_uleb128 (data, end, &offset);
2742 fprintf_filtered (stream,
2743 _("an empty %s-bit piece"),
2746 fprintf_filtered (stream,
2747 _(" [%s-bit piece, offset %s bits]"),
2748 pulongest (bits), pulongest (offset));
2758 if (bad || data > end)
2759 error (_("Corrupted DWARF2 expression for \"%s\"."),
2760 SYMBOL_PRINT_NAME (symbol));
2763 /* Print a natural-language description of SYMBOL to STREAM. This
2764 version is for a symbol with a single location. */
2767 locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
2768 struct ui_file *stream)
2770 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2771 struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
2772 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2773 int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
2775 locexpr_describe_location_1 (symbol, addr, stream,
2776 dlbaton->data, dlbaton->size,
2777 objfile, addr_size, offset_size,
2781 /* Describe the location of SYMBOL as an agent value in VALUE, generating
2782 any necessary bytecode in AX. */
2785 locexpr_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
2786 struct agent_expr *ax, struct axs_value *value)
2788 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2789 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2791 if (dlbaton->data == NULL || dlbaton->size == 0)
2792 value->optimized_out = 1;
2794 dwarf2_compile_expr_to_ax (ax, value, gdbarch, addr_size,
2795 dlbaton->data, dlbaton->data + dlbaton->size,
2799 /* The set of location functions used with the DWARF-2 expression
2801 const struct symbol_computed_ops dwarf2_locexpr_funcs = {
2802 locexpr_read_variable,
2803 locexpr_read_needs_frame,
2804 locexpr_describe_location,
2805 locexpr_tracepoint_var_ref
2809 /* Wrapper functions for location lists. These generally find
2810 the appropriate location expression and call something above. */
2812 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
2813 evaluator to calculate the location. */
2814 static struct value *
2815 loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
2817 struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2819 const gdb_byte *data;
2821 CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0;
2823 data = dwarf2_find_location_expression (dlbaton, &size, pc);
2825 val = allocate_optimized_out_value (SYMBOL_TYPE (symbol));
2827 val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size,
2833 /* Return non-zero iff we need a frame to evaluate SYMBOL. */
2835 loclist_read_needs_frame (struct symbol *symbol)
2837 /* If there's a location list, then assume we need to have a frame
2838 to choose the appropriate location expression. With tracking of
2839 global variables this is not necessarily true, but such tracking
2840 is disabled in GCC at the moment until we figure out how to
2846 /* Print a natural-language description of SYMBOL to STREAM. This
2847 version applies when there is a list of different locations, each
2848 with a specified address range. */
2851 loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
2852 struct ui_file *stream)
2854 struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2855 CORE_ADDR low, high;
2856 const gdb_byte *loc_ptr, *buf_end;
2857 int length, first = 1;
2858 struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
2859 struct gdbarch *gdbarch = get_objfile_arch (objfile);
2860 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2861 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2862 int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
2863 int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
2864 CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
2865 /* Adjust base_address for relocatable objects. */
2866 CORE_ADDR base_offset = dwarf2_per_cu_text_offset (dlbaton->per_cu);
2867 CORE_ADDR base_address = dlbaton->base_address + base_offset;
2869 loc_ptr = dlbaton->data;
2870 buf_end = dlbaton->data + dlbaton->size;
2872 fprintf_filtered (stream, _("multi-location:\n"));
2874 /* Iterate through locations until we run out. */
2877 if (buf_end - loc_ptr < 2 * addr_size)
2878 error (_("Corrupted DWARF expression for symbol \"%s\"."),
2879 SYMBOL_PRINT_NAME (symbol));
2882 low = extract_signed_integer (loc_ptr, addr_size, byte_order);
2884 low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
2885 loc_ptr += addr_size;
2888 high = extract_signed_integer (loc_ptr, addr_size, byte_order);
2890 high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
2891 loc_ptr += addr_size;
2893 /* A base-address-selection entry. */
2894 if ((low & base_mask) == base_mask)
2896 base_address = high + base_offset;
2897 fprintf_filtered (stream, _(" Base address %s"),
2898 paddress (gdbarch, base_address));
2902 /* An end-of-list entry. */
2903 if (low == 0 && high == 0)
2906 /* Otherwise, a location expression entry. */
2907 low += base_address;
2908 high += base_address;
2910 length = extract_unsigned_integer (loc_ptr, 2, byte_order);
2913 /* (It would improve readability to print only the minimum
2914 necessary digits of the second number of the range.) */
2915 fprintf_filtered (stream, _(" Range %s-%s: "),
2916 paddress (gdbarch, low), paddress (gdbarch, high));
2918 /* Now describe this particular location. */
2919 locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
2920 objfile, addr_size, offset_size,
2923 fprintf_filtered (stream, "\n");
2929 /* Describe the location of SYMBOL as an agent value in VALUE, generating
2930 any necessary bytecode in AX. */
2932 loclist_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
2933 struct agent_expr *ax, struct axs_value *value)
2935 struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2936 const gdb_byte *data;
2938 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2940 data = dwarf2_find_location_expression (dlbaton, &size, ax->scope);
2941 if (data == NULL || size == 0)
2942 value->optimized_out = 1;
2944 dwarf2_compile_expr_to_ax (ax, value, gdbarch, addr_size, data, data + size,
2948 /* The set of location functions used with the DWARF-2 expression
2949 evaluator and location lists. */
2950 const struct symbol_computed_ops dwarf2_loclist_funcs = {
2951 loclist_read_variable,
2952 loclist_read_needs_frame,
2953 loclist_describe_location,
2954 loclist_tracepoint_var_ref