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;
268 struct cleanup *back_to;
270 block = dwarf2_fetch_die_location_block (die_offset, per_cu,
271 get_frame_pc, baton);
273 back_to = make_cleanup (xfree, (void *) block.data);
275 /* DW_OP_call_ref is currently not supported. */
276 gdb_assert (block.per_cu == per_cu);
278 dwarf_expr_eval (ctx, block.data, block.size);
280 do_cleanups (back_to);
283 /* Helper interface of per_cu_dwarf_call for dwarf2_evaluate_loc_desc. */
286 dwarf_expr_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
288 struct dwarf_expr_baton *debaton = ctx->baton;
290 per_cu_dwarf_call (ctx, die_offset, debaton->per_cu,
291 ctx->funcs->get_frame_pc, ctx->baton);
294 /* Callback function for dwarf2_evaluate_loc_desc. */
297 dwarf_expr_get_base_type (struct dwarf_expr_context *ctx, size_t die_offset)
299 struct dwarf_expr_baton *debaton = ctx->baton;
301 return dwarf2_get_die_type (die_offset, debaton->per_cu);
306 /* Reference count. */
309 /* The CU from which this closure's expression came. */
310 struct dwarf2_per_cu_data *per_cu;
312 /* The number of pieces used to describe this variable. */
315 /* The target address size, used only for DWARF_VALUE_STACK. */
318 /* The pieces themselves. */
319 struct dwarf_expr_piece *pieces;
322 /* Allocate a closure for a value formed from separately-described
325 static struct piece_closure *
326 allocate_piece_closure (struct dwarf2_per_cu_data *per_cu,
327 int n_pieces, struct dwarf_expr_piece *pieces,
330 struct piece_closure *c = XZALLOC (struct piece_closure);
335 c->n_pieces = n_pieces;
336 c->addr_size = addr_size;
337 c->pieces = XCALLOC (n_pieces, struct dwarf_expr_piece);
339 memcpy (c->pieces, pieces, n_pieces * sizeof (struct dwarf_expr_piece));
340 for (i = 0; i < n_pieces; ++i)
341 if (c->pieces[i].location == DWARF_VALUE_STACK)
342 value_incref (c->pieces[i].v.value);
347 /* The lowest-level function to extract bits from a byte buffer.
348 SOURCE is the buffer. It is updated if we read to the end of a
350 SOURCE_OFFSET_BITS is the offset of the first bit to read. It is
351 updated to reflect the number of bits actually read.
352 NBITS is the number of bits we want to read. It is updated to
353 reflect the number of bits actually read. This function may read
355 BITS_BIG_ENDIAN is taken directly from gdbarch.
356 This function returns the extracted bits. */
359 extract_bits_primitive (const gdb_byte **source,
360 unsigned int *source_offset_bits,
361 int *nbits, int bits_big_endian)
363 unsigned int avail, mask, datum;
365 gdb_assert (*source_offset_bits < 8);
367 avail = 8 - *source_offset_bits;
371 mask = (1 << avail) - 1;
374 datum >>= 8 - (*source_offset_bits + *nbits);
376 datum >>= *source_offset_bits;
380 *source_offset_bits += avail;
381 if (*source_offset_bits >= 8)
383 *source_offset_bits -= 8;
390 /* Extract some bits from a source buffer and move forward in the
393 SOURCE is the source buffer. It is updated as bytes are read.
394 SOURCE_OFFSET_BITS is the offset into SOURCE. It is updated as
396 NBITS is the number of bits to read.
397 BITS_BIG_ENDIAN is taken directly from gdbarch.
399 This function returns the bits that were read. */
402 extract_bits (const gdb_byte **source, unsigned int *source_offset_bits,
403 int nbits, int bits_big_endian)
407 gdb_assert (nbits > 0 && nbits <= 8);
409 datum = extract_bits_primitive (source, source_offset_bits, &nbits,
415 more = extract_bits_primitive (source, source_offset_bits, &nbits,
427 /* Write some bits into a buffer and move forward in the buffer.
429 DATUM is the bits to write. The low-order bits of DATUM are used.
430 DEST is the destination buffer. It is updated as bytes are
432 DEST_OFFSET_BITS is the bit offset in DEST at which writing is
434 NBITS is the number of valid bits in DATUM.
435 BITS_BIG_ENDIAN is taken directly from gdbarch. */
438 insert_bits (unsigned int datum,
439 gdb_byte *dest, unsigned int dest_offset_bits,
440 int nbits, int bits_big_endian)
444 gdb_assert (dest_offset_bits + nbits <= 8);
446 mask = (1 << nbits) - 1;
449 datum <<= 8 - (dest_offset_bits + nbits);
450 mask <<= 8 - (dest_offset_bits + nbits);
454 datum <<= dest_offset_bits;
455 mask <<= dest_offset_bits;
458 gdb_assert ((datum & ~mask) == 0);
460 *dest = (*dest & ~mask) | datum;
463 /* Copy bits from a source to a destination.
465 DEST is where the bits should be written.
466 DEST_OFFSET_BITS is the bit offset into DEST.
467 SOURCE is the source of bits.
468 SOURCE_OFFSET_BITS is the bit offset into SOURCE.
469 BIT_COUNT is the number of bits to copy.
470 BITS_BIG_ENDIAN is taken directly from gdbarch. */
473 copy_bitwise (gdb_byte *dest, unsigned int dest_offset_bits,
474 const gdb_byte *source, unsigned int source_offset_bits,
475 unsigned int bit_count,
478 unsigned int dest_avail;
481 /* Reduce everything to byte-size pieces. */
482 dest += dest_offset_bits / 8;
483 dest_offset_bits %= 8;
484 source += source_offset_bits / 8;
485 source_offset_bits %= 8;
487 dest_avail = 8 - dest_offset_bits % 8;
489 /* See if we can fill the first destination byte. */
490 if (dest_avail < bit_count)
492 datum = extract_bits (&source, &source_offset_bits, dest_avail,
494 insert_bits (datum, dest, dest_offset_bits, dest_avail, bits_big_endian);
496 dest_offset_bits = 0;
497 bit_count -= dest_avail;
500 /* Now, either DEST_OFFSET_BITS is byte-aligned, or we have fewer
501 than 8 bits remaining. */
502 gdb_assert (dest_offset_bits % 8 == 0 || bit_count < 8);
503 for (; bit_count >= 8; bit_count -= 8)
505 datum = extract_bits (&source, &source_offset_bits, 8, bits_big_endian);
506 *dest++ = (gdb_byte) datum;
509 /* Finally, we may have a few leftover bits. */
510 gdb_assert (bit_count <= 8 - dest_offset_bits % 8);
513 datum = extract_bits (&source, &source_offset_bits, bit_count,
515 insert_bits (datum, dest, dest_offset_bits, bit_count, bits_big_endian);
520 read_pieced_value (struct value *v)
524 ULONGEST bits_to_skip;
526 struct piece_closure *c
527 = (struct piece_closure *) value_computed_closure (v);
528 struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (v));
530 size_t buffer_size = 0;
532 struct cleanup *cleanup;
534 = gdbarch_bits_big_endian (get_type_arch (value_type (v)));
536 if (value_type (v) != value_enclosing_type (v))
537 internal_error (__FILE__, __LINE__,
538 _("Should not be able to create a lazy value with "
539 "an enclosing type"));
541 cleanup = make_cleanup (free_current_contents, &buffer);
543 contents = value_contents_raw (v);
544 bits_to_skip = 8 * value_offset (v);
545 if (value_bitsize (v))
547 bits_to_skip += value_bitpos (v);
548 type_len = value_bitsize (v);
551 type_len = 8 * TYPE_LENGTH (value_type (v));
553 for (i = 0; i < c->n_pieces && offset < type_len; i++)
555 struct dwarf_expr_piece *p = &c->pieces[i];
556 size_t this_size, this_size_bits;
557 long dest_offset_bits, source_offset_bits, source_offset;
558 const gdb_byte *intermediate_buffer;
560 /* Compute size, source, and destination offsets for copying, in
562 this_size_bits = p->size;
563 if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
565 bits_to_skip -= this_size_bits;
568 if (this_size_bits > type_len - offset)
569 this_size_bits = type_len - offset;
570 if (bits_to_skip > 0)
572 dest_offset_bits = 0;
573 source_offset_bits = bits_to_skip;
574 this_size_bits -= bits_to_skip;
579 dest_offset_bits = offset;
580 source_offset_bits = 0;
583 this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
584 source_offset = source_offset_bits / 8;
585 if (buffer_size < this_size)
587 buffer_size = this_size;
588 buffer = xrealloc (buffer, buffer_size);
590 intermediate_buffer = buffer;
592 /* Copy from the source to DEST_BUFFER. */
595 case DWARF_VALUE_REGISTER:
597 struct gdbarch *arch = get_frame_arch (frame);
598 int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, p->v.regno);
599 int reg_offset = source_offset;
601 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
602 && this_size < register_size (arch, gdb_regnum))
604 /* Big-endian, and we want less than full size. */
605 reg_offset = register_size (arch, gdb_regnum) - this_size;
606 /* We want the lower-order THIS_SIZE_BITS of the bytes
607 we extract from the register. */
608 source_offset_bits += 8 * this_size - this_size_bits;
611 if (gdb_regnum != -1)
615 if (!get_frame_register_bytes (frame, gdb_regnum, reg_offset,
619 /* Just so garbage doesn't ever shine through. */
620 memset (buffer, 0, this_size);
623 set_value_optimized_out (v, 1);
625 mark_value_bytes_unavailable (v, offset, this_size);
630 error (_("Unable to access DWARF register number %s"),
631 paddress (arch, p->v.regno));
636 case DWARF_VALUE_MEMORY:
637 read_value_memory (v, offset,
638 p->v.mem.in_stack_memory,
639 p->v.mem.addr + source_offset,
643 case DWARF_VALUE_STACK:
645 size_t n = this_size;
647 if (n > c->addr_size - source_offset)
648 n = (c->addr_size >= source_offset
649 ? c->addr_size - source_offset
657 const gdb_byte *val_bytes = value_contents_all (p->v.value);
659 intermediate_buffer = val_bytes + source_offset;
664 case DWARF_VALUE_LITERAL:
666 size_t n = this_size;
668 if (n > p->v.literal.length - source_offset)
669 n = (p->v.literal.length >= source_offset
670 ? p->v.literal.length - source_offset
673 intermediate_buffer = p->v.literal.data + source_offset;
677 /* These bits show up as zeros -- but do not cause the value
678 to be considered optimized-out. */
679 case DWARF_VALUE_IMPLICIT_POINTER:
682 case DWARF_VALUE_OPTIMIZED_OUT:
683 set_value_optimized_out (v, 1);
687 internal_error (__FILE__, __LINE__, _("invalid location type"));
690 if (p->location != DWARF_VALUE_OPTIMIZED_OUT
691 && p->location != DWARF_VALUE_IMPLICIT_POINTER)
692 copy_bitwise (contents, dest_offset_bits,
693 intermediate_buffer, source_offset_bits % 8,
694 this_size_bits, bits_big_endian);
696 offset += this_size_bits;
699 do_cleanups (cleanup);
703 write_pieced_value (struct value *to, struct value *from)
707 ULONGEST bits_to_skip;
708 const gdb_byte *contents;
709 struct piece_closure *c
710 = (struct piece_closure *) value_computed_closure (to);
711 struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (to));
713 size_t buffer_size = 0;
715 struct cleanup *cleanup;
717 = gdbarch_bits_big_endian (get_type_arch (value_type (to)));
721 set_value_optimized_out (to, 1);
725 cleanup = make_cleanup (free_current_contents, &buffer);
727 contents = value_contents (from);
728 bits_to_skip = 8 * value_offset (to);
729 if (value_bitsize (to))
731 bits_to_skip += value_bitpos (to);
732 type_len = value_bitsize (to);
735 type_len = 8 * TYPE_LENGTH (value_type (to));
737 for (i = 0; i < c->n_pieces && offset < type_len; i++)
739 struct dwarf_expr_piece *p = &c->pieces[i];
740 size_t this_size_bits, this_size;
741 long dest_offset_bits, source_offset_bits, dest_offset, source_offset;
743 const gdb_byte *source_buffer;
745 this_size_bits = p->size;
746 if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
748 bits_to_skip -= this_size_bits;
751 if (this_size_bits > type_len - offset)
752 this_size_bits = type_len - offset;
753 if (bits_to_skip > 0)
755 dest_offset_bits = bits_to_skip;
756 source_offset_bits = 0;
757 this_size_bits -= bits_to_skip;
762 dest_offset_bits = 0;
763 source_offset_bits = offset;
766 this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
767 source_offset = source_offset_bits / 8;
768 dest_offset = dest_offset_bits / 8;
769 if (dest_offset_bits % 8 == 0 && source_offset_bits % 8 == 0)
771 source_buffer = contents + source_offset;
776 if (buffer_size < this_size)
778 buffer_size = this_size;
779 buffer = xrealloc (buffer, buffer_size);
781 source_buffer = buffer;
787 case DWARF_VALUE_REGISTER:
789 struct gdbarch *arch = get_frame_arch (frame);
790 int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, p->v.regno);
791 int reg_offset = dest_offset;
793 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
794 && this_size <= register_size (arch, gdb_regnum))
795 /* Big-endian, and we want less than full size. */
796 reg_offset = register_size (arch, gdb_regnum) - this_size;
798 if (gdb_regnum != -1)
804 if (!get_frame_register_bytes (frame, gdb_regnum, reg_offset,
809 error (_("Can't do read-modify-write to "
810 "update bitfield; containing word has been "
813 throw_error (NOT_AVAILABLE_ERROR,
814 _("Can't do read-modify-write to update "
815 "bitfield; containing word "
818 copy_bitwise (buffer, dest_offset_bits,
819 contents, source_offset_bits,
824 put_frame_register_bytes (frame, gdb_regnum, reg_offset,
825 this_size, source_buffer);
829 error (_("Unable to write to DWARF register number %s"),
830 paddress (arch, p->v.regno));
834 case DWARF_VALUE_MEMORY:
837 /* Only the first and last bytes can possibly have any
839 read_memory (p->v.mem.addr + dest_offset, buffer, 1);
840 read_memory (p->v.mem.addr + dest_offset + this_size - 1,
841 buffer + this_size - 1, 1);
842 copy_bitwise (buffer, dest_offset_bits,
843 contents, source_offset_bits,
848 write_memory (p->v.mem.addr + dest_offset,
849 source_buffer, this_size);
852 set_value_optimized_out (to, 1);
855 offset += this_size_bits;
858 do_cleanups (cleanup);
861 /* A helper function that checks bit validity in a pieced value.
862 CHECK_FOR indicates the kind of validity checking.
863 DWARF_VALUE_MEMORY means to check whether any bit is valid.
864 DWARF_VALUE_OPTIMIZED_OUT means to check whether any bit is
866 DWARF_VALUE_IMPLICIT_POINTER means to check whether the bits are an
870 check_pieced_value_bits (const struct value *value, int bit_offset,
872 enum dwarf_value_location check_for)
874 struct piece_closure *c
875 = (struct piece_closure *) value_computed_closure (value);
877 int validity = (check_for == DWARF_VALUE_MEMORY
878 || check_for == DWARF_VALUE_IMPLICIT_POINTER);
880 bit_offset += 8 * value_offset (value);
881 if (value_bitsize (value))
882 bit_offset += value_bitpos (value);
884 for (i = 0; i < c->n_pieces && bit_length > 0; i++)
886 struct dwarf_expr_piece *p = &c->pieces[i];
887 size_t this_size_bits = p->size;
891 if (bit_offset >= this_size_bits)
893 bit_offset -= this_size_bits;
897 bit_length -= this_size_bits - bit_offset;
901 bit_length -= this_size_bits;
903 if (check_for == DWARF_VALUE_IMPLICIT_POINTER)
905 if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
908 else if (p->location == DWARF_VALUE_OPTIMIZED_OUT
909 || p->location == DWARF_VALUE_IMPLICIT_POINTER)
925 check_pieced_value_validity (const struct value *value, int bit_offset,
928 return check_pieced_value_bits (value, bit_offset, bit_length,
933 check_pieced_value_invalid (const struct value *value)
935 return check_pieced_value_bits (value, 0,
936 8 * TYPE_LENGTH (value_type (value)),
937 DWARF_VALUE_OPTIMIZED_OUT);
940 /* An implementation of an lval_funcs method to see whether a value is
941 a synthetic pointer. */
944 check_pieced_synthetic_pointer (const struct value *value, int bit_offset,
947 return check_pieced_value_bits (value, bit_offset, bit_length,
948 DWARF_VALUE_IMPLICIT_POINTER);
951 /* A wrapper function for get_frame_address_in_block. */
954 get_frame_address_in_block_wrapper (void *baton)
956 return get_frame_address_in_block (baton);
959 /* An implementation of an lval_funcs method to indirect through a
960 pointer. This handles the synthetic pointer case when needed. */
962 static struct value *
963 indirect_pieced_value (struct value *value)
965 struct piece_closure *c
966 = (struct piece_closure *) value_computed_closure (value);
968 struct frame_info *frame;
969 struct dwarf2_locexpr_baton baton;
970 int i, bit_offset, bit_length;
971 struct dwarf_expr_piece *piece = NULL;
972 struct value *result;
974 struct cleanup *back_to;
976 type = check_typedef (value_type (value));
977 if (TYPE_CODE (type) != TYPE_CODE_PTR)
980 bit_length = 8 * TYPE_LENGTH (type);
981 bit_offset = 8 * value_offset (value);
982 if (value_bitsize (value))
983 bit_offset += value_bitpos (value);
985 for (i = 0; i < c->n_pieces && bit_length > 0; i++)
987 struct dwarf_expr_piece *p = &c->pieces[i];
988 size_t this_size_bits = p->size;
992 if (bit_offset >= this_size_bits)
994 bit_offset -= this_size_bits;
998 bit_length -= this_size_bits - bit_offset;
1002 bit_length -= this_size_bits;
1004 if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
1007 if (bit_length != 0)
1008 error (_("Invalid use of DW_OP_GNU_implicit_pointer"));
1014 frame = get_selected_frame (_("No frame selected."));
1016 /* This is an offset requested by GDB, such as value subcripts. */
1017 byte_offset = value_as_address (value);
1020 baton = dwarf2_fetch_die_location_block (piece->v.ptr.die, c->per_cu,
1021 get_frame_address_in_block_wrapper,
1024 back_to = make_cleanup (xfree, (void *) baton.data);
1026 result = dwarf2_evaluate_loc_desc_full (TYPE_TARGET_TYPE (type), frame,
1027 baton.data, baton.size, baton.per_cu,
1028 piece->v.ptr.offset + byte_offset);
1030 do_cleanups (back_to);
1036 copy_pieced_value_closure (const struct value *v)
1038 struct piece_closure *c
1039 = (struct piece_closure *) value_computed_closure (v);
1046 free_pieced_value_closure (struct value *v)
1048 struct piece_closure *c
1049 = (struct piece_closure *) value_computed_closure (v);
1056 for (i = 0; i < c->n_pieces; ++i)
1057 if (c->pieces[i].location == DWARF_VALUE_STACK)
1058 value_free (c->pieces[i].v.value);
1065 /* Functions for accessing a variable described by DW_OP_piece. */
1066 static const struct lval_funcs pieced_value_funcs = {
1069 check_pieced_value_validity,
1070 check_pieced_value_invalid,
1071 indirect_pieced_value,
1072 check_pieced_synthetic_pointer,
1073 copy_pieced_value_closure,
1074 free_pieced_value_closure
1077 /* Helper function which throws an error if a synthetic pointer is
1081 invalid_synthetic_pointer (void)
1083 error (_("access outside bounds of object "
1084 "referenced via synthetic pointer"));
1087 /* Virtual method table for dwarf2_evaluate_loc_desc_full below. */
1089 static const struct dwarf_expr_context_funcs dwarf_expr_ctx_funcs =
1091 dwarf_expr_read_reg,
1092 dwarf_expr_read_mem,
1093 dwarf_expr_frame_base,
1094 dwarf_expr_frame_cfa,
1095 dwarf_expr_frame_pc,
1096 dwarf_expr_tls_address,
1097 dwarf_expr_dwarf_call,
1098 dwarf_expr_get_base_type
1101 /* Evaluate a location description, starting at DATA and with length
1102 SIZE, to find the current location of variable of TYPE in the
1103 context of FRAME. BYTE_OFFSET is applied after the contents are
1106 static struct value *
1107 dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
1108 const gdb_byte *data, unsigned short size,
1109 struct dwarf2_per_cu_data *per_cu,
1110 LONGEST byte_offset)
1112 struct value *retval;
1113 struct dwarf_expr_baton baton;
1114 struct dwarf_expr_context *ctx;
1115 struct cleanup *old_chain, *value_chain;
1116 struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
1117 volatile struct gdb_exception ex;
1119 if (byte_offset < 0)
1120 invalid_synthetic_pointer ();
1123 return allocate_optimized_out_value (type);
1125 baton.frame = frame;
1126 baton.per_cu = per_cu;
1128 ctx = new_dwarf_expr_context ();
1129 old_chain = make_cleanup_free_dwarf_expr_context (ctx);
1130 value_chain = make_cleanup_value_free_to_mark (value_mark ());
1132 ctx->gdbarch = get_objfile_arch (objfile);
1133 ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
1134 ctx->offset = dwarf2_per_cu_text_offset (per_cu);
1135 ctx->baton = &baton;
1136 ctx->funcs = &dwarf_expr_ctx_funcs;
1138 TRY_CATCH (ex, RETURN_MASK_ERROR)
1140 dwarf_expr_eval (ctx, data, size);
1144 if (ex.error == NOT_AVAILABLE_ERROR)
1146 do_cleanups (old_chain);
1147 retval = allocate_value (type);
1148 mark_value_bytes_unavailable (retval, 0, TYPE_LENGTH (type));
1152 throw_exception (ex);
1155 if (ctx->num_pieces > 0)
1157 struct piece_closure *c;
1158 struct frame_id frame_id = get_frame_id (frame);
1159 ULONGEST bit_size = 0;
1162 for (i = 0; i < ctx->num_pieces; ++i)
1163 bit_size += ctx->pieces[i].size;
1164 if (8 * (byte_offset + TYPE_LENGTH (type)) > bit_size)
1165 invalid_synthetic_pointer ();
1167 c = allocate_piece_closure (per_cu, ctx->num_pieces, ctx->pieces,
1169 /* We must clean up the value chain after creating the piece
1170 closure but before allocating the result. */
1171 do_cleanups (value_chain);
1172 retval = allocate_computed_value (type, &pieced_value_funcs, c);
1173 VALUE_FRAME_ID (retval) = frame_id;
1174 set_value_offset (retval, byte_offset);
1178 switch (ctx->location)
1180 case DWARF_VALUE_REGISTER:
1182 struct gdbarch *arch = get_frame_arch (frame);
1183 ULONGEST dwarf_regnum = value_as_long (dwarf_expr_fetch (ctx, 0));
1184 int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_regnum);
1186 if (byte_offset != 0)
1187 error (_("cannot use offset on synthetic pointer to register"));
1188 do_cleanups (value_chain);
1189 if (gdb_regnum != -1)
1190 retval = value_from_register (type, gdb_regnum, frame);
1192 error (_("Unable to access DWARF register number %s"),
1193 paddress (arch, dwarf_regnum));
1197 case DWARF_VALUE_MEMORY:
1199 CORE_ADDR address = dwarf_expr_fetch_address (ctx, 0);
1200 int in_stack_memory = dwarf_expr_fetch_in_stack_memory (ctx, 0);
1202 do_cleanups (value_chain);
1203 retval = allocate_value_lazy (type);
1204 VALUE_LVAL (retval) = lval_memory;
1205 if (in_stack_memory)
1206 set_value_stack (retval, 1);
1207 set_value_address (retval, address + byte_offset);
1211 case DWARF_VALUE_STACK:
1213 struct value *value = dwarf_expr_fetch (ctx, 0);
1215 const gdb_byte *val_bytes;
1216 size_t n = TYPE_LENGTH (value_type (value));
1218 if (byte_offset + TYPE_LENGTH (type) > n)
1219 invalid_synthetic_pointer ();
1221 val_bytes = value_contents_all (value);
1222 val_bytes += byte_offset;
1225 /* Preserve VALUE because we are going to free values back
1226 to the mark, but we still need the value contents
1228 value_incref (value);
1229 do_cleanups (value_chain);
1230 make_cleanup_value_free (value);
1232 retval = allocate_value (type);
1233 contents = value_contents_raw (retval);
1234 if (n > TYPE_LENGTH (type))
1235 n = TYPE_LENGTH (type);
1236 memcpy (contents, val_bytes, n);
1240 case DWARF_VALUE_LITERAL:
1243 const bfd_byte *ldata;
1244 size_t n = ctx->len;
1246 if (byte_offset + TYPE_LENGTH (type) > n)
1247 invalid_synthetic_pointer ();
1249 do_cleanups (value_chain);
1250 retval = allocate_value (type);
1251 contents = value_contents_raw (retval);
1253 ldata = ctx->data + byte_offset;
1256 if (n > TYPE_LENGTH (type))
1257 n = TYPE_LENGTH (type);
1258 memcpy (contents, ldata, n);
1262 case DWARF_VALUE_OPTIMIZED_OUT:
1263 do_cleanups (value_chain);
1264 retval = allocate_optimized_out_value (type);
1267 /* DWARF_VALUE_IMPLICIT_POINTER was converted to a pieced
1268 operation by execute_stack_op. */
1269 case DWARF_VALUE_IMPLICIT_POINTER:
1270 /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context --
1271 it can only be encountered when making a piece. */
1273 internal_error (__FILE__, __LINE__, _("invalid location type"));
1277 set_value_initialized (retval, ctx->initialized);
1279 do_cleanups (old_chain);
1284 /* The exported interface to dwarf2_evaluate_loc_desc_full; it always
1285 passes 0 as the byte_offset. */
1288 dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame,
1289 const gdb_byte *data, unsigned short size,
1290 struct dwarf2_per_cu_data *per_cu)
1292 return dwarf2_evaluate_loc_desc_full (type, frame, data, size, per_cu, 0);
1296 /* Helper functions and baton for dwarf2_loc_desc_needs_frame. */
1298 struct needs_frame_baton
1301 struct dwarf2_per_cu_data *per_cu;
1304 /* Reads from registers do require a frame. */
1306 needs_frame_read_reg (void *baton, int regnum)
1308 struct needs_frame_baton *nf_baton = baton;
1310 nf_baton->needs_frame = 1;
1314 /* Reads from memory do not require a frame. */
1316 needs_frame_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
1318 memset (buf, 0, len);
1321 /* Frame-relative accesses do require a frame. */
1323 needs_frame_frame_base (void *baton, const gdb_byte **start, size_t * length)
1325 static gdb_byte lit0 = DW_OP_lit0;
1326 struct needs_frame_baton *nf_baton = baton;
1331 nf_baton->needs_frame = 1;
1334 /* CFA accesses require a frame. */
1337 needs_frame_frame_cfa (void *baton)
1339 struct needs_frame_baton *nf_baton = baton;
1341 nf_baton->needs_frame = 1;
1345 /* Thread-local accesses do require a frame. */
1347 needs_frame_tls_address (void *baton, CORE_ADDR offset)
1349 struct needs_frame_baton *nf_baton = baton;
1351 nf_baton->needs_frame = 1;
1355 /* Helper interface of per_cu_dwarf_call for dwarf2_loc_desc_needs_frame. */
1358 needs_frame_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
1360 struct needs_frame_baton *nf_baton = ctx->baton;
1362 per_cu_dwarf_call (ctx, die_offset, nf_baton->per_cu,
1363 ctx->funcs->get_frame_pc, ctx->baton);
1366 /* Virtual method table for dwarf2_loc_desc_needs_frame below. */
1368 static const struct dwarf_expr_context_funcs needs_frame_ctx_funcs =
1370 needs_frame_read_reg,
1371 needs_frame_read_mem,
1372 needs_frame_frame_base,
1373 needs_frame_frame_cfa,
1374 needs_frame_frame_cfa, /* get_frame_pc */
1375 needs_frame_tls_address,
1376 needs_frame_dwarf_call,
1377 NULL /* get_base_type */
1380 /* Return non-zero iff the location expression at DATA (length SIZE)
1381 requires a frame to evaluate. */
1384 dwarf2_loc_desc_needs_frame (const gdb_byte *data, unsigned short size,
1385 struct dwarf2_per_cu_data *per_cu)
1387 struct needs_frame_baton baton;
1388 struct dwarf_expr_context *ctx;
1390 struct cleanup *old_chain;
1391 struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
1393 baton.needs_frame = 0;
1394 baton.per_cu = per_cu;
1396 ctx = new_dwarf_expr_context ();
1397 old_chain = make_cleanup_free_dwarf_expr_context (ctx);
1398 make_cleanup_value_free_to_mark (value_mark ());
1400 ctx->gdbarch = get_objfile_arch (objfile);
1401 ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
1402 ctx->offset = dwarf2_per_cu_text_offset (per_cu);
1403 ctx->baton = &baton;
1404 ctx->funcs = &needs_frame_ctx_funcs;
1406 dwarf_expr_eval (ctx, data, size);
1408 in_reg = ctx->location == DWARF_VALUE_REGISTER;
1410 if (ctx->num_pieces > 0)
1414 /* If the location has several pieces, and any of them are in
1415 registers, then we will need a frame to fetch them from. */
1416 for (i = 0; i < ctx->num_pieces; i++)
1417 if (ctx->pieces[i].location == DWARF_VALUE_REGISTER)
1421 do_cleanups (old_chain);
1423 return baton.needs_frame || in_reg;
1426 /* A helper function that throws an unimplemented error mentioning a
1427 given DWARF operator. */
1430 unimplemented (unsigned int op)
1432 const char *name = dwarf_stack_op_name (op);
1435 error (_("DWARF operator %s cannot be translated to an agent expression"),
1438 error (_("Unknown DWARF operator 0x%02x cannot be translated "
1439 "to an agent expression"),
1443 /* A helper function to convert a DWARF register to an arch register.
1444 ARCH is the architecture.
1445 DWARF_REG is the register.
1446 This will throw an exception if the DWARF register cannot be
1447 translated to an architecture register. */
1450 translate_register (struct gdbarch *arch, int dwarf_reg)
1452 int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg);
1454 error (_("Unable to access DWARF register number %d"), dwarf_reg);
1458 /* A helper function that emits an access to memory. ARCH is the
1459 target architecture. EXPR is the expression which we are building.
1460 NBITS is the number of bits we want to read. This emits the
1461 opcodes needed to read the memory and then extract the desired
1465 access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits)
1467 ULONGEST nbytes = (nbits + 7) / 8;
1469 gdb_assert (nbits > 0 && nbits <= sizeof (LONGEST));
1472 ax_trace_quick (expr, nbytes);
1475 ax_simple (expr, aop_ref8);
1476 else if (nbits <= 16)
1477 ax_simple (expr, aop_ref16);
1478 else if (nbits <= 32)
1479 ax_simple (expr, aop_ref32);
1481 ax_simple (expr, aop_ref64);
1483 /* If we read exactly the number of bytes we wanted, we're done. */
1484 if (8 * nbytes == nbits)
1487 if (gdbarch_bits_big_endian (arch))
1489 /* On a bits-big-endian machine, we want the high-order
1491 ax_const_l (expr, 8 * nbytes - nbits);
1492 ax_simple (expr, aop_rsh_unsigned);
1496 /* On a bits-little-endian box, we want the low-order NBITS. */
1497 ax_zero_ext (expr, nbits);
1501 /* A helper function to return the frame's PC. */
1504 get_ax_pc (void *baton)
1506 struct agent_expr *expr = baton;
1511 /* Compile a DWARF location expression to an agent expression.
1513 EXPR is the agent expression we are building.
1514 LOC is the agent value we modify.
1515 ARCH is the architecture.
1516 ADDR_SIZE is the size of addresses, in bytes.
1517 OP_PTR is the start of the location expression.
1518 OP_END is one past the last byte of the location expression.
1520 This will throw an exception for various kinds of errors -- for
1521 example, if the expression cannot be compiled, or if the expression
1525 dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
1526 struct gdbarch *arch, unsigned int addr_size,
1527 const gdb_byte *op_ptr, const gdb_byte *op_end,
1528 struct dwarf2_per_cu_data *per_cu)
1530 struct cleanup *cleanups;
1532 VEC(int) *dw_labels = NULL, *patches = NULL;
1533 const gdb_byte * const base = op_ptr;
1534 const gdb_byte *previous_piece = op_ptr;
1535 enum bfd_endian byte_order = gdbarch_byte_order (arch);
1536 ULONGEST bits_collected = 0;
1537 unsigned int addr_size_bits = 8 * addr_size;
1538 int bits_big_endian = gdbarch_bits_big_endian (arch);
1540 offsets = xmalloc ((op_end - op_ptr) * sizeof (int));
1541 cleanups = make_cleanup (xfree, offsets);
1543 for (i = 0; i < op_end - op_ptr; ++i)
1546 make_cleanup (VEC_cleanup (int), &dw_labels);
1547 make_cleanup (VEC_cleanup (int), &patches);
1549 /* By default we are making an address. */
1550 loc->kind = axs_lvalue_memory;
1552 while (op_ptr < op_end)
1554 enum dwarf_location_atom op = *op_ptr;
1555 ULONGEST uoffset, reg;
1559 offsets[op_ptr - base] = expr->len;
1562 /* Our basic approach to code generation is to map DWARF
1563 operations directly to AX operations. However, there are
1566 First, DWARF works on address-sized units, but AX always uses
1567 LONGEST. For most operations we simply ignore this
1568 difference; instead we generate sign extensions as needed
1569 before division and comparison operations. It would be nice
1570 to omit the sign extensions, but there is no way to determine
1571 the size of the target's LONGEST. (This code uses the size
1572 of the host LONGEST in some cases -- that is a bug but it is
1575 Second, some DWARF operations cannot be translated to AX.
1576 For these we simply fail. See
1577 http://sourceware.org/bugzilla/show_bug.cgi?id=11662. */
1612 ax_const_l (expr, op - DW_OP_lit0);
1616 uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order);
1617 op_ptr += addr_size;
1618 /* Some versions of GCC emit DW_OP_addr before
1619 DW_OP_GNU_push_tls_address. In this case the value is an
1620 index, not an address. We don't support things like
1621 branching between the address and the TLS op. */
1622 if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
1623 uoffset += dwarf2_per_cu_text_offset (per_cu);
1624 ax_const_l (expr, uoffset);
1628 ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order));
1632 ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order));
1636 ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order));
1640 ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order));
1644 ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order));
1648 ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order));
1652 ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order));
1656 ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order));
1660 op_ptr = read_uleb128 (op_ptr, op_end, &uoffset);
1661 ax_const_l (expr, uoffset);
1664 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1665 ax_const_l (expr, offset);
1700 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
1701 loc->u.reg = translate_register (arch, op - DW_OP_reg0);
1702 loc->kind = axs_lvalue_register;
1706 op_ptr = read_uleb128 (op_ptr, op_end, ®);
1707 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
1708 loc->u.reg = translate_register (arch, reg);
1709 loc->kind = axs_lvalue_register;
1712 case DW_OP_implicit_value:
1716 op_ptr = read_uleb128 (op_ptr, op_end, &len);
1717 if (op_ptr + len > op_end)
1718 error (_("DW_OP_implicit_value: too few bytes available."));
1719 if (len > sizeof (ULONGEST))
1720 error (_("Cannot translate DW_OP_implicit_value of %d bytes"),
1723 ax_const_l (expr, extract_unsigned_integer (op_ptr, len,
1726 dwarf_expr_require_composition (op_ptr, op_end,
1727 "DW_OP_implicit_value");
1729 loc->kind = axs_rvalue;
1733 case DW_OP_stack_value:
1734 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
1735 loc->kind = axs_rvalue;
1770 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1771 i = translate_register (arch, op - DW_OP_breg0);
1775 ax_const_l (expr, offset);
1776 ax_simple (expr, aop_add);
1781 op_ptr = read_uleb128 (op_ptr, op_end, ®);
1782 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1783 i = translate_register (arch, reg);
1787 ax_const_l (expr, offset);
1788 ax_simple (expr, aop_add);
1794 const gdb_byte *datastart;
1796 unsigned int before_stack_len;
1798 struct symbol *framefunc;
1799 LONGEST base_offset = 0;
1801 b = block_for_pc (expr->scope);
1804 error (_("No block found for address"));
1806 framefunc = block_linkage_function (b);
1809 error (_("No function found for block"));
1811 dwarf_expr_frame_base_1 (framefunc, expr->scope,
1812 &datastart, &datalen);
1814 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1815 dwarf2_compile_expr_to_ax (expr, loc, arch, addr_size, datastart,
1816 datastart + datalen, per_cu);
1820 ax_const_l (expr, offset);
1821 ax_simple (expr, aop_add);
1824 loc->kind = axs_lvalue_memory;
1829 ax_simple (expr, aop_dup);
1833 ax_simple (expr, aop_pop);
1838 ax_pick (expr, offset);
1842 ax_simple (expr, aop_swap);
1850 ax_simple (expr, aop_rot);
1854 case DW_OP_deref_size:
1858 if (op == DW_OP_deref_size)
1866 ax_simple (expr, aop_ref8);
1869 ax_simple (expr, aop_ref16);
1872 ax_simple (expr, aop_ref32);
1875 ax_simple (expr, aop_ref64);
1878 /* Note that dwarf_stack_op_name will never return
1880 error (_("Unsupported size %d in %s"),
1881 size, dwarf_stack_op_name (op));
1887 /* Sign extend the operand. */
1888 ax_ext (expr, addr_size_bits);
1889 ax_simple (expr, aop_dup);
1890 ax_const_l (expr, 0);
1891 ax_simple (expr, aop_less_signed);
1892 ax_simple (expr, aop_log_not);
1893 i = ax_goto (expr, aop_if_goto);
1894 /* We have to emit 0 - X. */
1895 ax_const_l (expr, 0);
1896 ax_simple (expr, aop_swap);
1897 ax_simple (expr, aop_sub);
1898 ax_label (expr, i, expr->len);
1902 /* No need to sign extend here. */
1903 ax_const_l (expr, 0);
1904 ax_simple (expr, aop_swap);
1905 ax_simple (expr, aop_sub);
1909 /* Sign extend the operand. */
1910 ax_ext (expr, addr_size_bits);
1911 ax_simple (expr, aop_bit_not);
1914 case DW_OP_plus_uconst:
1915 op_ptr = read_uleb128 (op_ptr, op_end, ®);
1916 /* It would be really weird to emit `DW_OP_plus_uconst 0',
1917 but we micro-optimize anyhow. */
1920 ax_const_l (expr, reg);
1921 ax_simple (expr, aop_add);
1926 ax_simple (expr, aop_bit_and);
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_div_signed);
1939 ax_simple (expr, aop_sub);
1943 ax_simple (expr, aop_rem_unsigned);
1947 ax_simple (expr, aop_mul);
1951 ax_simple (expr, aop_bit_or);
1955 ax_simple (expr, aop_add);
1959 ax_simple (expr, aop_lsh);
1963 ax_simple (expr, aop_rsh_unsigned);
1967 ax_simple (expr, aop_rsh_signed);
1971 ax_simple (expr, aop_bit_xor);
1975 /* Sign extend the operands. */
1976 ax_ext (expr, addr_size_bits);
1977 ax_simple (expr, aop_swap);
1978 ax_ext (expr, addr_size_bits);
1979 /* Note no swap here: A <= B is !(B < A). */
1980 ax_simple (expr, aop_less_signed);
1981 ax_simple (expr, aop_log_not);
1985 /* Sign extend the operands. */
1986 ax_ext (expr, addr_size_bits);
1987 ax_simple (expr, aop_swap);
1988 ax_ext (expr, addr_size_bits);
1989 ax_simple (expr, aop_swap);
1990 /* A >= B is !(A < B). */
1991 ax_simple (expr, aop_less_signed);
1992 ax_simple (expr, aop_log_not);
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 second swap here. */
2001 ax_simple (expr, aop_equal);
2005 /* Sign extend the operands. */
2006 ax_ext (expr, addr_size_bits);
2007 ax_simple (expr, aop_swap);
2008 ax_ext (expr, addr_size_bits);
2009 ax_simple (expr, aop_swap);
2010 ax_simple (expr, aop_less_signed);
2014 /* Sign extend the operands. */
2015 ax_ext (expr, addr_size_bits);
2016 ax_simple (expr, aop_swap);
2017 ax_ext (expr, addr_size_bits);
2018 /* Note no swap here: A > B is B < A. */
2019 ax_simple (expr, aop_less_signed);
2023 /* Sign extend the operands. */
2024 ax_ext (expr, addr_size_bits);
2025 ax_simple (expr, aop_swap);
2026 ax_ext (expr, addr_size_bits);
2027 /* No need for a swap here. */
2028 ax_simple (expr, aop_equal);
2029 ax_simple (expr, aop_log_not);
2032 case DW_OP_call_frame_cfa:
2033 dwarf2_compile_cfa_to_ax (expr, loc, arch, expr->scope, per_cu);
2034 loc->kind = axs_lvalue_memory;
2037 case DW_OP_GNU_push_tls_address:
2042 offset = extract_signed_integer (op_ptr, 2, byte_order);
2044 i = ax_goto (expr, aop_goto);
2045 VEC_safe_push (int, dw_labels, op_ptr + offset - base);
2046 VEC_safe_push (int, patches, i);
2050 offset = extract_signed_integer (op_ptr, 2, byte_order);
2052 /* Zero extend the operand. */
2053 ax_zero_ext (expr, addr_size_bits);
2054 i = ax_goto (expr, aop_if_goto);
2055 VEC_safe_push (int, dw_labels, op_ptr + offset - base);
2056 VEC_safe_push (int, patches, i);
2063 case DW_OP_bit_piece:
2065 ULONGEST size, offset;
2067 if (op_ptr - 1 == previous_piece)
2068 error (_("Cannot translate empty pieces to agent expressions"));
2069 previous_piece = op_ptr - 1;
2071 op_ptr = read_uleb128 (op_ptr, op_end, &size);
2072 if (op == DW_OP_piece)
2078 op_ptr = read_uleb128 (op_ptr, op_end, &offset);
2080 if (bits_collected + size > 8 * sizeof (LONGEST))
2081 error (_("Expression pieces exceed word size"));
2083 /* Access the bits. */
2086 case axs_lvalue_register:
2087 ax_reg (expr, loc->u.reg);
2090 case axs_lvalue_memory:
2091 /* Offset the pointer, if needed. */
2094 ax_const_l (expr, offset / 8);
2095 ax_simple (expr, aop_add);
2098 access_memory (arch, expr, size);
2102 /* For a bits-big-endian target, shift up what we already
2103 have. For a bits-little-endian target, shift up the
2104 new data. Note that there is a potential bug here if
2105 the DWARF expression leaves multiple values on the
2107 if (bits_collected > 0)
2109 if (bits_big_endian)
2111 ax_simple (expr, aop_swap);
2112 ax_const_l (expr, size);
2113 ax_simple (expr, aop_lsh);
2114 /* We don't need a second swap here, because
2115 aop_bit_or is symmetric. */
2119 ax_const_l (expr, size);
2120 ax_simple (expr, aop_lsh);
2122 ax_simple (expr, aop_bit_or);
2125 bits_collected += size;
2126 loc->kind = axs_rvalue;
2130 case DW_OP_GNU_uninit:
2136 struct dwarf2_locexpr_baton block;
2137 int size = (op == DW_OP_call2 ? 2 : 4);
2138 struct cleanup *back_to;
2140 uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
2143 block = dwarf2_fetch_die_location_block (uoffset, per_cu,
2145 back_to = make_cleanup (xfree, (void *) block.data);
2147 /* DW_OP_call_ref is currently not supported. */
2148 gdb_assert (block.per_cu == per_cu);
2150 dwarf2_compile_expr_to_ax (expr, loc, arch, addr_size,
2151 block.data, block.data + block.size,
2154 do_cleanups (back_to);
2158 case DW_OP_call_ref:
2166 /* Patch all the branches we emitted. */
2167 for (i = 0; i < VEC_length (int, patches); ++i)
2169 int targ = offsets[VEC_index (int, dw_labels, i)];
2171 internal_error (__FILE__, __LINE__, _("invalid label"));
2172 ax_label (expr, VEC_index (int, patches, i), targ);
2175 do_cleanups (cleanups);
2179 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
2180 evaluator to calculate the location. */
2181 static struct value *
2182 locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
2184 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2187 val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
2188 dlbaton->size, dlbaton->per_cu);
2193 /* Return non-zero iff we need a frame to evaluate SYMBOL. */
2195 locexpr_read_needs_frame (struct symbol *symbol)
2197 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2199 return dwarf2_loc_desc_needs_frame (dlbaton->data, dlbaton->size,
2203 /* Return true if DATA points to the end of a piece. END is one past
2204 the last byte in the expression. */
2207 piece_end_p (const gdb_byte *data, const gdb_byte *end)
2209 return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece;
2212 /* Helper for locexpr_describe_location_piece that finds the name of a
2216 locexpr_regname (struct gdbarch *gdbarch, int dwarf_regnum)
2220 regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, dwarf_regnum);
2221 return gdbarch_register_name (gdbarch, regnum);
2224 /* Nicely describe a single piece of a location, returning an updated
2225 position in the bytecode sequence. This function cannot recognize
2226 all locations; if a location is not recognized, it simply returns
2229 static const gdb_byte *
2230 locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
2231 CORE_ADDR addr, struct objfile *objfile,
2232 const gdb_byte *data, const gdb_byte *end,
2233 unsigned int addr_size)
2235 struct gdbarch *gdbarch = get_objfile_arch (objfile);
2237 if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
2239 fprintf_filtered (stream, _("a variable in $%s"),
2240 locexpr_regname (gdbarch, data[0] - DW_OP_reg0));
2243 else if (data[0] == DW_OP_regx)
2247 data = read_uleb128 (data + 1, end, ®);
2248 fprintf_filtered (stream, _("a variable in $%s"),
2249 locexpr_regname (gdbarch, reg));
2251 else if (data[0] == DW_OP_fbreg)
2254 struct symbol *framefunc;
2256 LONGEST frame_offset;
2257 const gdb_byte *base_data, *new_data, *save_data = data;
2259 LONGEST base_offset = 0;
2261 new_data = read_sleb128 (data + 1, end, &frame_offset);
2262 if (!piece_end_p (new_data, end))
2266 b = block_for_pc (addr);
2269 error (_("No block found for address for symbol \"%s\"."),
2270 SYMBOL_PRINT_NAME (symbol));
2272 framefunc = block_linkage_function (b);
2275 error (_("No function found for block for symbol \"%s\"."),
2276 SYMBOL_PRINT_NAME (symbol));
2278 dwarf_expr_frame_base_1 (framefunc, addr, &base_data, &base_size);
2280 if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
2282 const gdb_byte *buf_end;
2284 frame_reg = base_data[0] - DW_OP_breg0;
2285 buf_end = read_sleb128 (base_data + 1,
2286 base_data + base_size, &base_offset);
2287 if (buf_end != base_data + base_size)
2288 error (_("Unexpected opcode after "
2289 "DW_OP_breg%u for symbol \"%s\"."),
2290 frame_reg, SYMBOL_PRINT_NAME (symbol));
2292 else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
2294 /* The frame base is just the register, with no offset. */
2295 frame_reg = base_data[0] - DW_OP_reg0;
2300 /* We don't know what to do with the frame base expression,
2301 so we can't trace this variable; give up. */
2305 fprintf_filtered (stream,
2306 _("a variable at frame base reg $%s offset %s+%s"),
2307 locexpr_regname (gdbarch, frame_reg),
2308 plongest (base_offset), plongest (frame_offset));
2310 else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
2311 && piece_end_p (data, end))
2315 data = read_sleb128 (data + 1, end, &offset);
2317 fprintf_filtered (stream,
2318 _("a variable at offset %s from base reg $%s"),
2320 locexpr_regname (gdbarch, data[0] - DW_OP_breg0));
2323 /* The location expression for a TLS variable looks like this (on a
2326 DW_AT_location : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
2327 (DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
2329 0x3 is the encoding for DW_OP_addr, which has an operand as long
2330 as the size of an address on the target machine (here is 8
2331 bytes). Note that more recent version of GCC emit DW_OP_const4u
2332 or DW_OP_const8u, depending on address size, rather than
2333 DW_OP_addr. 0xe0 is the encoding for DW_OP_GNU_push_tls_address.
2334 The operand represents the offset at which the variable is within
2335 the thread local storage. */
2337 else if (data + 1 + addr_size < end
2338 && (data[0] == DW_OP_addr
2339 || (addr_size == 4 && data[0] == DW_OP_const4u)
2340 || (addr_size == 8 && data[0] == DW_OP_const8u))
2341 && data[1 + addr_size] == DW_OP_GNU_push_tls_address
2342 && piece_end_p (data + 2 + addr_size, end))
2345 offset = extract_unsigned_integer (data + 1, addr_size,
2346 gdbarch_byte_order (gdbarch));
2348 fprintf_filtered (stream,
2349 _("a thread-local variable at offset 0x%s "
2350 "in the thread-local storage for `%s'"),
2351 phex_nz (offset, addr_size), objfile->name);
2353 data += 1 + addr_size + 1;
2355 else if (data[0] >= DW_OP_lit0
2356 && data[0] <= DW_OP_lit31
2358 && data[1] == DW_OP_stack_value)
2360 fprintf_filtered (stream, _("the constant %d"), data[0] - DW_OP_lit0);
2367 /* Disassemble an expression, stopping at the end of a piece or at the
2368 end of the expression. Returns a pointer to the next unread byte
2369 in the input expression. If ALL is nonzero, then this function
2370 will keep going until it reaches the end of the expression. */
2372 static const gdb_byte *
2373 disassemble_dwarf_expression (struct ui_file *stream,
2374 struct gdbarch *arch, unsigned int addr_size,
2376 const gdb_byte *data, const gdb_byte *end,
2378 struct dwarf2_per_cu_data *per_cu)
2380 const gdb_byte *start = data;
2382 fprintf_filtered (stream, _("a complex DWARF expression:\n"));
2386 || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
2388 enum dwarf_location_atom op = *data++;
2393 name = dwarf_stack_op_name (op);
2396 error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
2397 op, (long) (data - 1 - start));
2398 fprintf_filtered (stream, " % 4ld: %s", (long) (data - 1 - start), name);
2403 ul = extract_unsigned_integer (data, addr_size,
2404 gdbarch_byte_order (arch));
2406 fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
2410 ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch));
2412 fprintf_filtered (stream, " %s", pulongest (ul));
2415 l = extract_signed_integer (data, 1, gdbarch_byte_order (arch));
2417 fprintf_filtered (stream, " %s", plongest (l));
2420 ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
2422 fprintf_filtered (stream, " %s", pulongest (ul));
2425 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
2427 fprintf_filtered (stream, " %s", plongest (l));
2430 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
2432 fprintf_filtered (stream, " %s", pulongest (ul));
2435 l = extract_signed_integer (data, 4, gdbarch_byte_order (arch));
2437 fprintf_filtered (stream, " %s", plongest (l));
2440 ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch));
2442 fprintf_filtered (stream, " %s", pulongest (ul));
2445 l = extract_signed_integer (data, 8, gdbarch_byte_order (arch));
2447 fprintf_filtered (stream, " %s", plongest (l));
2450 data = read_uleb128 (data, end, &ul);
2451 fprintf_filtered (stream, " %s", pulongest (ul));
2454 data = read_sleb128 (data, end, &l);
2455 fprintf_filtered (stream, " %s", plongest (l));
2490 fprintf_filtered (stream, " [$%s]",
2491 locexpr_regname (arch, op - DW_OP_reg0));
2495 data = read_uleb128 (data, end, &ul);
2496 fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
2497 locexpr_regname (arch, (int) ul));
2500 case DW_OP_implicit_value:
2501 data = read_uleb128 (data, end, &ul);
2503 fprintf_filtered (stream, " %s", pulongest (ul));
2538 data = read_sleb128 (data, end, &l);
2539 fprintf_filtered (stream, " %s [$%s]", plongest (l),
2540 locexpr_regname (arch, op - DW_OP_breg0));
2544 data = read_uleb128 (data, end, &ul);
2545 data = read_sleb128 (data, end, &l);
2546 fprintf_filtered (stream, " register %s [$%s] offset %s",
2548 locexpr_regname (arch, (int) ul),
2553 data = read_sleb128 (data, end, &l);
2554 fprintf_filtered (stream, " %s", plongest (l));
2557 case DW_OP_xderef_size:
2558 case DW_OP_deref_size:
2560 fprintf_filtered (stream, " %d", *data);
2564 case DW_OP_plus_uconst:
2565 data = read_uleb128 (data, end, &ul);
2566 fprintf_filtered (stream, " %s", pulongest (ul));
2570 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
2572 fprintf_filtered (stream, " to %ld",
2573 (long) (data + l - start));
2577 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
2579 fprintf_filtered (stream, " %ld",
2580 (long) (data + l - start));
2584 ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
2586 fprintf_filtered (stream, " offset %s", phex_nz (ul, 2));
2590 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
2592 fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
2595 case DW_OP_call_ref:
2596 ul = extract_unsigned_integer (data, offset_size,
2597 gdbarch_byte_order (arch));
2598 data += offset_size;
2599 fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
2603 data = read_uleb128 (data, end, &ul);
2604 fprintf_filtered (stream, " %s (bytes)", pulongest (ul));
2607 case DW_OP_bit_piece:
2611 data = read_uleb128 (data, end, &ul);
2612 data = read_uleb128 (data, end, &offset);
2613 fprintf_filtered (stream, " size %s offset %s (bits)",
2614 pulongest (ul), pulongest (offset));
2618 case DW_OP_GNU_implicit_pointer:
2620 ul = extract_unsigned_integer (data, offset_size,
2621 gdbarch_byte_order (arch));
2622 data += offset_size;
2624 data = read_sleb128 (data, end, &l);
2626 fprintf_filtered (stream, " DIE %s offset %s",
2627 phex_nz (ul, offset_size),
2632 case DW_OP_GNU_deref_type:
2634 int addr_size = *data++;
2638 data = read_uleb128 (data, end, &offset);
2639 type = dwarf2_get_die_type (offset, per_cu);
2640 fprintf_filtered (stream, "<");
2641 type_print (type, "", stream, -1);
2642 fprintf_filtered (stream, " [0x%s]> %d", phex_nz (offset, 0),
2647 case DW_OP_GNU_const_type:
2652 data = read_uleb128 (data, end, &type_die);
2653 type = dwarf2_get_die_type (type_die, per_cu);
2654 fprintf_filtered (stream, "<");
2655 type_print (type, "", stream, -1);
2656 fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die, 0));
2660 case DW_OP_GNU_regval_type:
2662 ULONGEST type_die, reg;
2665 data = read_uleb128 (data, end, ®);
2666 data = read_uleb128 (data, end, &type_die);
2668 type = dwarf2_get_die_type (type_die, per_cu);
2669 fprintf_filtered (stream, "<");
2670 type_print (type, "", stream, -1);
2671 fprintf_filtered (stream, " [0x%s]> [$%s]", phex_nz (type_die, 0),
2672 locexpr_regname (arch, reg));
2676 case DW_OP_GNU_convert:
2677 case DW_OP_GNU_reinterpret:
2681 data = read_uleb128 (data, end, &type_die);
2684 fprintf_filtered (stream, "<0>");
2689 type = dwarf2_get_die_type (type_die, per_cu);
2690 fprintf_filtered (stream, "<");
2691 type_print (type, "", stream, -1);
2692 fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die, 0));
2698 fprintf_filtered (stream, "\n");
2704 /* Describe a single location, which may in turn consist of multiple
2708 locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
2709 struct ui_file *stream,
2710 const gdb_byte *data, int size,
2711 struct objfile *objfile, unsigned int addr_size,
2712 int offset_size, struct dwarf2_per_cu_data *per_cu)
2714 const gdb_byte *end = data + size;
2715 int first_piece = 1, bad = 0;
2719 const gdb_byte *here = data;
2720 int disassemble = 1;
2725 fprintf_filtered (stream, _(", and "));
2727 if (!dwarf2_always_disassemble)
2729 data = locexpr_describe_location_piece (symbol, stream,
2731 data, end, addr_size);
2732 /* If we printed anything, or if we have an empty piece,
2733 then don't disassemble. */
2735 || data[0] == DW_OP_piece
2736 || data[0] == DW_OP_bit_piece)
2740 data = disassemble_dwarf_expression (stream,
2741 get_objfile_arch (objfile),
2742 addr_size, offset_size, data, end,
2743 dwarf2_always_disassemble,
2748 int empty = data == here;
2751 fprintf_filtered (stream, " ");
2752 if (data[0] == DW_OP_piece)
2756 data = read_uleb128 (data + 1, end, &bytes);
2759 fprintf_filtered (stream, _("an empty %s-byte piece"),
2762 fprintf_filtered (stream, _(" [%s-byte piece]"),
2765 else if (data[0] == DW_OP_bit_piece)
2767 ULONGEST bits, offset;
2769 data = read_uleb128 (data + 1, end, &bits);
2770 data = read_uleb128 (data, end, &offset);
2773 fprintf_filtered (stream,
2774 _("an empty %s-bit piece"),
2777 fprintf_filtered (stream,
2778 _(" [%s-bit piece, offset %s bits]"),
2779 pulongest (bits), pulongest (offset));
2789 if (bad || data > end)
2790 error (_("Corrupted DWARF2 expression for \"%s\"."),
2791 SYMBOL_PRINT_NAME (symbol));
2794 /* Print a natural-language description of SYMBOL to STREAM. This
2795 version is for a symbol with a single location. */
2798 locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
2799 struct ui_file *stream)
2801 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2802 struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
2803 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2804 int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
2806 locexpr_describe_location_1 (symbol, addr, stream,
2807 dlbaton->data, dlbaton->size,
2808 objfile, addr_size, offset_size,
2812 /* Describe the location of SYMBOL as an agent value in VALUE, generating
2813 any necessary bytecode in AX. */
2816 locexpr_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
2817 struct agent_expr *ax, struct axs_value *value)
2819 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2820 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2822 if (dlbaton->data == NULL || dlbaton->size == 0)
2823 value->optimized_out = 1;
2825 dwarf2_compile_expr_to_ax (ax, value, gdbarch, addr_size,
2826 dlbaton->data, dlbaton->data + dlbaton->size,
2830 /* The set of location functions used with the DWARF-2 expression
2832 const struct symbol_computed_ops dwarf2_locexpr_funcs = {
2833 locexpr_read_variable,
2834 locexpr_read_needs_frame,
2835 locexpr_describe_location,
2836 locexpr_tracepoint_var_ref
2840 /* Wrapper functions for location lists. These generally find
2841 the appropriate location expression and call something above. */
2843 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
2844 evaluator to calculate the location. */
2845 static struct value *
2846 loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
2848 struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2850 const gdb_byte *data;
2852 CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0;
2854 data = dwarf2_find_location_expression (dlbaton, &size, pc);
2856 val = allocate_optimized_out_value (SYMBOL_TYPE (symbol));
2858 val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size,
2864 /* Return non-zero iff we need a frame to evaluate SYMBOL. */
2866 loclist_read_needs_frame (struct symbol *symbol)
2868 /* If there's a location list, then assume we need to have a frame
2869 to choose the appropriate location expression. With tracking of
2870 global variables this is not necessarily true, but such tracking
2871 is disabled in GCC at the moment until we figure out how to
2877 /* Print a natural-language description of SYMBOL to STREAM. This
2878 version applies when there is a list of different locations, each
2879 with a specified address range. */
2882 loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
2883 struct ui_file *stream)
2885 struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2886 CORE_ADDR low, high;
2887 const gdb_byte *loc_ptr, *buf_end;
2888 int length, first = 1;
2889 struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
2890 struct gdbarch *gdbarch = get_objfile_arch (objfile);
2891 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2892 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2893 int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
2894 int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
2895 CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
2896 /* Adjust base_address for relocatable objects. */
2897 CORE_ADDR base_offset = dwarf2_per_cu_text_offset (dlbaton->per_cu);
2898 CORE_ADDR base_address = dlbaton->base_address + base_offset;
2900 loc_ptr = dlbaton->data;
2901 buf_end = dlbaton->data + dlbaton->size;
2903 fprintf_filtered (stream, _("multi-location:\n"));
2905 /* Iterate through locations until we run out. */
2908 if (buf_end - loc_ptr < 2 * addr_size)
2909 error (_("Corrupted DWARF expression for symbol \"%s\"."),
2910 SYMBOL_PRINT_NAME (symbol));
2913 low = extract_signed_integer (loc_ptr, addr_size, byte_order);
2915 low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
2916 loc_ptr += addr_size;
2919 high = extract_signed_integer (loc_ptr, addr_size, byte_order);
2921 high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
2922 loc_ptr += addr_size;
2924 /* A base-address-selection entry. */
2925 if ((low & base_mask) == base_mask)
2927 base_address = high + base_offset;
2928 fprintf_filtered (stream, _(" Base address %s"),
2929 paddress (gdbarch, base_address));
2933 /* An end-of-list entry. */
2934 if (low == 0 && high == 0)
2937 /* Otherwise, a location expression entry. */
2938 low += base_address;
2939 high += base_address;
2941 length = extract_unsigned_integer (loc_ptr, 2, byte_order);
2944 /* (It would improve readability to print only the minimum
2945 necessary digits of the second number of the range.) */
2946 fprintf_filtered (stream, _(" Range %s-%s: "),
2947 paddress (gdbarch, low), paddress (gdbarch, high));
2949 /* Now describe this particular location. */
2950 locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
2951 objfile, addr_size, offset_size,
2954 fprintf_filtered (stream, "\n");
2960 /* Describe the location of SYMBOL as an agent value in VALUE, generating
2961 any necessary bytecode in AX. */
2963 loclist_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
2964 struct agent_expr *ax, struct axs_value *value)
2966 struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2967 const gdb_byte *data;
2969 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2971 data = dwarf2_find_location_expression (dlbaton, &size, ax->scope);
2972 if (data == NULL || size == 0)
2973 value->optimized_out = 1;
2975 dwarf2_compile_expr_to_ax (ax, value, gdbarch, addr_size, data, data + size,
2979 /* The set of location functions used with the DWARF-2 expression
2980 evaluator and location lists. */
2981 const struct symbol_computed_ops dwarf2_loclist_funcs = {
2982 loclist_read_variable,
2983 loclist_read_needs_frame,
2984 loclist_describe_location,
2985 loclist_tracepoint_var_ref