1 /* DWARF 2 location expression support for GDB.
3 Copyright (C) 2003, 2005, 2007, 2008, 2009, 2010
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"
46 dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc,
47 const gdb_byte **start, size_t *length);
49 /* A helper function for dealing with location lists. Given a
50 symbol baton (BATON) and a pc value (PC), find the appropriate
51 location expression, set *LOCEXPR_LENGTH, and return a pointer
52 to the beginning of the expression. Returns NULL on failure.
54 For now, only return the first matching location expression; there
55 can be more than one in the list. */
58 find_location_expression (struct dwarf2_loclist_baton *baton,
59 size_t *locexpr_length, CORE_ADDR pc)
62 gdb_byte *loc_ptr, *buf_end;
64 struct objfile *objfile = dwarf2_per_cu_objfile (baton->per_cu);
65 struct gdbarch *gdbarch = get_objfile_arch (objfile);
66 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
67 unsigned int addr_size = dwarf2_per_cu_addr_size (baton->per_cu);
68 CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
69 /* Adjust base_address for relocatable objects. */
70 CORE_ADDR base_offset = ANOFFSET (objfile->section_offsets,
71 SECT_OFF_TEXT (objfile));
72 CORE_ADDR base_address = baton->base_address + base_offset;
74 loc_ptr = baton->data;
75 buf_end = baton->data + baton->size;
79 if (buf_end - loc_ptr < 2 * addr_size)
80 error (_("find_location_expression: Corrupted DWARF expression."));
82 low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
85 /* A base-address-selection entry. */
88 base_address = dwarf2_read_address (gdbarch,
89 loc_ptr, buf_end, addr_size);
94 high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
97 /* An end-of-list entry. */
98 if (low == 0 && high == 0)
101 /* Otherwise, a location expression entry. */
103 high += base_address;
105 length = extract_unsigned_integer (loc_ptr, 2, byte_order);
108 if (pc >= low && pc < high)
110 *locexpr_length = length;
118 /* This is the baton used when performing dwarf2 expression
120 struct dwarf_expr_baton
122 struct frame_info *frame;
123 struct objfile *objfile;
126 /* Helper functions for dwarf2_evaluate_loc_desc. */
128 /* Using the frame specified in BATON, return the value of register
129 REGNUM, treated as a pointer. */
131 dwarf_expr_read_reg (void *baton, int dwarf_regnum)
133 struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
134 struct gdbarch *gdbarch = get_frame_arch (debaton->frame);
138 regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, dwarf_regnum);
139 result = address_from_register (builtin_type (gdbarch)->builtin_data_ptr,
140 regnum, debaton->frame);
144 /* Read memory at ADDR (length LEN) into BUF. */
147 dwarf_expr_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
149 read_memory (addr, buf, len);
152 /* Using the frame specified in BATON, find the location expression
153 describing the frame base. Return a pointer to it in START and
154 its length in LENGTH. */
156 dwarf_expr_frame_base (void *baton, const gdb_byte **start, size_t * length)
158 /* FIXME: cagney/2003-03-26: This code should be using
159 get_frame_base_address(), and then implement a dwarf2 specific
161 struct symbol *framefunc;
162 struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
164 /* Use block_linkage_function, which returns a real (not inlined)
165 function, instead of get_frame_function, which may return an
167 framefunc = block_linkage_function (get_frame_block (debaton->frame, NULL));
169 /* If we found a frame-relative symbol then it was certainly within
170 some function associated with a frame. If we can't find the frame,
171 something has gone wrong. */
172 gdb_assert (framefunc != NULL);
174 dwarf_expr_frame_base_1 (framefunc,
175 get_frame_address_in_block (debaton->frame),
180 dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc,
181 const gdb_byte **start, size_t *length)
183 if (SYMBOL_LOCATION_BATON (framefunc) == NULL)
185 else if (SYMBOL_COMPUTED_OPS (framefunc) == &dwarf2_loclist_funcs)
187 struct dwarf2_loclist_baton *symbaton;
189 symbaton = SYMBOL_LOCATION_BATON (framefunc);
190 *start = find_location_expression (symbaton, length, pc);
194 struct dwarf2_locexpr_baton *symbaton;
196 symbaton = SYMBOL_LOCATION_BATON (framefunc);
197 if (symbaton != NULL)
199 *length = symbaton->size;
200 *start = symbaton->data;
207 error (_("Could not find the frame base for \"%s\"."),
208 SYMBOL_NATURAL_NAME (framefunc));
211 /* Helper function for dwarf2_evaluate_loc_desc. Computes the CFA for
212 the frame in BATON. */
215 dwarf_expr_frame_cfa (void *baton)
217 struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
219 return dwarf2_frame_cfa (debaton->frame);
222 /* Using the objfile specified in BATON, find the address for the
223 current thread's thread-local storage with offset OFFSET. */
225 dwarf_expr_tls_address (void *baton, CORE_ADDR offset)
227 struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
229 return target_translate_tls_address (debaton->objfile, offset);
234 /* The number of pieces used to describe this variable. */
237 /* The target address size, used only for DWARF_VALUE_STACK. */
240 /* The pieces themselves. */
241 struct dwarf_expr_piece *pieces;
244 /* Allocate a closure for a value formed from separately-described
247 static struct piece_closure *
248 allocate_piece_closure (int n_pieces, struct dwarf_expr_piece *pieces,
251 struct piece_closure *c = XZALLOC (struct piece_closure);
253 c->n_pieces = n_pieces;
254 c->addr_size = addr_size;
255 c->pieces = XCALLOC (n_pieces, struct dwarf_expr_piece);
257 memcpy (c->pieces, pieces, n_pieces * sizeof (struct dwarf_expr_piece));
262 /* The lowest-level function to extract bits from a byte buffer.
263 SOURCE is the buffer. It is updated if we read to the end of a
265 SOURCE_OFFSET_BITS is the offset of the first bit to read. It is
266 updated to reflect the number of bits actually read.
267 NBITS is the number of bits we want to read. It is updated to
268 reflect the number of bits actually read. This function may read
270 BITS_BIG_ENDIAN is taken directly from gdbarch.
271 This function returns the extracted bits. */
274 extract_bits_primitive (const gdb_byte **source,
275 unsigned int *source_offset_bits,
276 int *nbits, int bits_big_endian)
278 unsigned int avail, mask, datum;
280 gdb_assert (*source_offset_bits < 8);
282 avail = 8 - *source_offset_bits;
286 mask = (1 << avail) - 1;
289 datum >>= 8 - (*source_offset_bits + *nbits);
291 datum >>= *source_offset_bits;
295 *source_offset_bits += avail;
296 if (*source_offset_bits >= 8)
298 *source_offset_bits -= 8;
305 /* Extract some bits from a source buffer and move forward in the
308 SOURCE is the source buffer. It is updated as bytes are read.
309 SOURCE_OFFSET_BITS is the offset into SOURCE. It is updated as
311 NBITS is the number of bits to read.
312 BITS_BIG_ENDIAN is taken directly from gdbarch.
314 This function returns the bits that were read. */
317 extract_bits (const gdb_byte **source, unsigned int *source_offset_bits,
318 int nbits, int bits_big_endian)
322 gdb_assert (nbits > 0 && nbits <= 8);
324 datum = extract_bits_primitive (source, source_offset_bits, &nbits,
330 more = extract_bits_primitive (source, source_offset_bits, &nbits,
342 /* Write some bits into a buffer and move forward in the buffer.
344 DATUM is the bits to write. The low-order bits of DATUM are used.
345 DEST is the destination buffer. It is updated as bytes are
347 DEST_OFFSET_BITS is the bit offset in DEST at which writing is
349 NBITS is the number of valid bits in DATUM.
350 BITS_BIG_ENDIAN is taken directly from gdbarch. */
353 insert_bits (unsigned int datum,
354 gdb_byte *dest, unsigned int dest_offset_bits,
355 int nbits, int bits_big_endian)
359 gdb_assert (dest_offset_bits >= 0 && dest_offset_bits + nbits <= 8);
361 mask = (1 << nbits) - 1;
364 datum <<= 8 - (dest_offset_bits + nbits);
365 mask <<= 8 - (dest_offset_bits + nbits);
369 datum <<= dest_offset_bits;
370 mask <<= dest_offset_bits;
373 gdb_assert ((datum & ~mask) == 0);
375 *dest = (*dest & ~mask) | datum;
378 /* Copy bits from a source to a destination.
380 DEST is where the bits should be written.
381 DEST_OFFSET_BITS is the bit offset into DEST.
382 SOURCE is the source of bits.
383 SOURCE_OFFSET_BITS is the bit offset into SOURCE.
384 BIT_COUNT is the number of bits to copy.
385 BITS_BIG_ENDIAN is taken directly from gdbarch. */
388 copy_bitwise (gdb_byte *dest, unsigned int dest_offset_bits,
389 const gdb_byte *source, unsigned int source_offset_bits,
390 unsigned int bit_count,
393 unsigned int dest_avail;
396 /* Reduce everything to byte-size pieces. */
397 dest += dest_offset_bits / 8;
398 dest_offset_bits %= 8;
399 source += source_offset_bits / 8;
400 source_offset_bits %= 8;
402 dest_avail = 8 - dest_offset_bits % 8;
404 /* See if we can fill the first destination byte. */
405 if (dest_avail < bit_count)
407 datum = extract_bits (&source, &source_offset_bits, dest_avail,
409 insert_bits (datum, dest, dest_offset_bits, dest_avail, bits_big_endian);
411 dest_offset_bits = 0;
412 bit_count -= dest_avail;
415 /* Now, either DEST_OFFSET_BITS is byte-aligned, or we have fewer
416 than 8 bits remaining. */
417 gdb_assert (dest_offset_bits % 8 == 0 || bit_count < 8);
418 for (; bit_count >= 8; bit_count -= 8)
420 datum = extract_bits (&source, &source_offset_bits, 8, bits_big_endian);
421 *dest++ = (gdb_byte) datum;
424 /* Finally, we may have a few leftover bits. */
425 gdb_assert (bit_count <= 8 - dest_offset_bits % 8);
428 datum = extract_bits (&source, &source_offset_bits, bit_count,
430 insert_bits (datum, dest, dest_offset_bits, bit_count, bits_big_endian);
435 read_pieced_value (struct value *v)
439 ULONGEST bits_to_skip;
441 struct piece_closure *c = (struct piece_closure *) value_computed_closure (v);
442 struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (v));
444 size_t buffer_size = 0;
446 struct cleanup *cleanup;
448 = gdbarch_bits_big_endian (get_type_arch (value_type (v)));
450 if (value_type (v) != value_enclosing_type (v))
451 internal_error (__FILE__, __LINE__,
452 _("Should not be able to create a lazy value with "
453 "an enclosing type"));
455 cleanup = make_cleanup (free_current_contents, &buffer);
457 contents = value_contents_raw (v);
458 bits_to_skip = 8 * value_offset (v);
459 type_len = 8 * TYPE_LENGTH (value_type (v));
461 for (i = 0; i < c->n_pieces && offset < type_len; i++)
463 struct dwarf_expr_piece *p = &c->pieces[i];
464 size_t this_size, this_size_bits;
465 long dest_offset_bits, source_offset_bits, source_offset;
466 const gdb_byte *intermediate_buffer;
468 /* Compute size, source, and destination offsets for copying, in
470 this_size_bits = p->size;
471 if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
473 bits_to_skip -= this_size_bits;
476 if (this_size_bits > type_len - offset)
477 this_size_bits = type_len - offset;
478 if (bits_to_skip > 0)
480 dest_offset_bits = 0;
481 source_offset_bits = bits_to_skip;
482 this_size_bits -= bits_to_skip;
487 dest_offset_bits = offset;
488 source_offset_bits = 0;
491 this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
492 source_offset = source_offset_bits / 8;
493 if (buffer_size < this_size)
495 buffer_size = this_size;
496 buffer = xrealloc (buffer, buffer_size);
498 intermediate_buffer = buffer;
500 /* Copy from the source to DEST_BUFFER. */
503 case DWARF_VALUE_REGISTER:
505 struct gdbarch *arch = get_frame_arch (frame);
506 int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch,
508 int reg_offset = source_offset;
510 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
511 && this_size < register_size (arch, gdb_regnum))
513 /* Big-endian, and we want less than full size. */
514 reg_offset = register_size (arch, gdb_regnum) - this_size;
515 /* We want the lower-order THIS_SIZE_BITS of the bytes
516 we extract from the register. */
517 source_offset_bits += 8 * this_size - this_size_bits;
520 if (gdb_regnum != -1)
522 get_frame_register_bytes (frame, gdb_regnum, reg_offset,
527 error (_("Unable to access DWARF register number %s"),
528 paddress (arch, p->v.expr.value));
533 case DWARF_VALUE_MEMORY:
534 if (p->v.expr.in_stack_memory)
535 read_stack (p->v.expr.value + source_offset, buffer, this_size);
537 read_memory (p->v.expr.value + source_offset, buffer, this_size);
540 case DWARF_VALUE_STACK:
542 struct gdbarch *gdbarch = get_type_arch (value_type (v));
543 size_t n = this_size;
545 if (n > c->addr_size - source_offset)
546 n = (c->addr_size >= source_offset
547 ? c->addr_size - source_offset
553 else if (source_offset == 0)
554 store_unsigned_integer (buffer, n,
555 gdbarch_byte_order (gdbarch),
559 gdb_byte bytes[sizeof (ULONGEST)];
561 store_unsigned_integer (bytes, n + source_offset,
562 gdbarch_byte_order (gdbarch),
564 memcpy (buffer, bytes + source_offset, n);
569 case DWARF_VALUE_LITERAL:
571 size_t n = this_size;
573 if (n > p->v.literal.length - source_offset)
574 n = (p->v.literal.length >= source_offset
575 ? p->v.literal.length - source_offset
578 intermediate_buffer = p->v.literal.data + source_offset;
582 case DWARF_VALUE_OPTIMIZED_OUT:
583 /* We just leave the bits empty for now. This is not ideal
584 but gdb currently does not have a nice way to represent
585 optimized-out pieces. */
586 warning (_("bits %ld-%ld in computed object were optimized out; "
587 "replacing with zeroes"),
589 offset + (long) this_size_bits);
593 internal_error (__FILE__, __LINE__, _("invalid location type"));
596 if (p->location != DWARF_VALUE_OPTIMIZED_OUT)
597 copy_bitwise (contents, dest_offset_bits,
598 intermediate_buffer, source_offset_bits % 8,
599 this_size_bits, bits_big_endian);
601 offset += this_size_bits;
604 do_cleanups (cleanup);
608 write_pieced_value (struct value *to, struct value *from)
612 ULONGEST bits_to_skip;
613 const gdb_byte *contents;
614 struct piece_closure *c = (struct piece_closure *) value_computed_closure (to);
615 struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (to));
617 size_t buffer_size = 0;
619 struct cleanup *cleanup;
621 = gdbarch_bits_big_endian (get_type_arch (value_type (to)));
625 set_value_optimized_out (to, 1);
629 cleanup = make_cleanup (free_current_contents, &buffer);
631 contents = value_contents (from);
632 bits_to_skip = 8 * value_offset (to);
633 type_len = 8 * TYPE_LENGTH (value_type (to));
634 for (i = 0; i < c->n_pieces && offset < type_len; i++)
636 struct dwarf_expr_piece *p = &c->pieces[i];
637 size_t this_size_bits, this_size;
638 long dest_offset_bits, source_offset_bits, dest_offset, source_offset;
640 const gdb_byte *source_buffer;
642 this_size_bits = p->size;
643 if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
645 bits_to_skip -= this_size_bits;
648 if (this_size_bits > type_len - offset)
649 this_size_bits = type_len - offset;
650 if (bits_to_skip > 0)
652 dest_offset_bits = bits_to_skip;
653 source_offset_bits = 0;
654 this_size_bits -= bits_to_skip;
659 dest_offset_bits = 0;
660 source_offset_bits = offset;
663 this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
664 source_offset = source_offset_bits / 8;
665 dest_offset = dest_offset_bits / 8;
666 if (dest_offset_bits % 8 == 0 && source_offset_bits % 8 == 0)
668 source_buffer = contents + source_offset;
673 if (buffer_size < this_size)
675 buffer_size = this_size;
676 buffer = xrealloc (buffer, buffer_size);
678 source_buffer = buffer;
684 case DWARF_VALUE_REGISTER:
686 struct gdbarch *arch = get_frame_arch (frame);
687 int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, p->v.expr.value);
688 int reg_offset = dest_offset;
690 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
691 && this_size <= register_size (arch, gdb_regnum))
692 /* Big-endian, and we want less than full size. */
693 reg_offset = register_size (arch, gdb_regnum) - this_size;
695 if (gdb_regnum != -1)
699 get_frame_register_bytes (frame, gdb_regnum, reg_offset,
701 copy_bitwise (buffer, dest_offset_bits,
702 contents, source_offset_bits,
707 put_frame_register_bytes (frame, gdb_regnum, reg_offset,
708 this_size, source_buffer);
712 error (_("Unable to write to DWARF register number %s"),
713 paddress (arch, p->v.expr.value));
717 case DWARF_VALUE_MEMORY:
720 /* Only the first and last bytes can possibly have any
722 read_memory (p->v.expr.value + dest_offset, buffer, 1);
723 read_memory (p->v.expr.value + dest_offset + this_size - 1,
724 buffer + this_size - 1, 1);
725 copy_bitwise (buffer, dest_offset_bits,
726 contents, source_offset_bits,
731 write_memory (p->v.expr.value + dest_offset,
732 source_buffer, this_size);
735 set_value_optimized_out (to, 1);
738 offset += this_size_bits;
742 do_cleanups (cleanup);
746 copy_pieced_value_closure (struct value *v)
748 struct piece_closure *c = (struct piece_closure *) value_computed_closure (v);
750 return allocate_piece_closure (c->n_pieces, c->pieces, c->addr_size);
754 free_pieced_value_closure (struct value *v)
756 struct piece_closure *c = (struct piece_closure *) value_computed_closure (v);
762 /* Functions for accessing a variable described by DW_OP_piece. */
763 static struct lval_funcs pieced_value_funcs = {
766 copy_pieced_value_closure,
767 free_pieced_value_closure
770 /* Evaluate a location description, starting at DATA and with length
771 SIZE, to find the current location of variable of TYPE in the context
774 static struct value *
775 dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame,
776 gdb_byte *data, unsigned short size,
777 struct dwarf2_per_cu_data *per_cu)
779 struct value *retval;
780 struct dwarf_expr_baton baton;
781 struct dwarf_expr_context *ctx;
782 struct cleanup *old_chain;
786 retval = allocate_value (type);
787 VALUE_LVAL (retval) = not_lval;
788 set_value_optimized_out (retval, 1);
793 baton.objfile = dwarf2_per_cu_objfile (per_cu);
795 ctx = new_dwarf_expr_context ();
796 old_chain = make_cleanup_free_dwarf_expr_context (ctx);
798 ctx->gdbarch = get_objfile_arch (baton.objfile);
799 ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
801 ctx->read_reg = dwarf_expr_read_reg;
802 ctx->read_mem = dwarf_expr_read_mem;
803 ctx->get_frame_base = dwarf_expr_frame_base;
804 ctx->get_frame_cfa = dwarf_expr_frame_cfa;
805 ctx->get_tls_address = dwarf_expr_tls_address;
807 dwarf_expr_eval (ctx, data, size);
808 if (ctx->num_pieces > 0)
810 struct piece_closure *c;
811 struct frame_id frame_id = get_frame_id (frame);
813 c = allocate_piece_closure (ctx->num_pieces, ctx->pieces,
815 retval = allocate_computed_value (type, &pieced_value_funcs, c);
816 VALUE_FRAME_ID (retval) = frame_id;
820 switch (ctx->location)
822 case DWARF_VALUE_REGISTER:
824 struct gdbarch *arch = get_frame_arch (frame);
825 CORE_ADDR dwarf_regnum = dwarf_expr_fetch (ctx, 0);
826 int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_regnum);
828 if (gdb_regnum != -1)
829 retval = value_from_register (type, gdb_regnum, frame);
831 error (_("Unable to access DWARF register number %s"),
832 paddress (arch, dwarf_regnum));
836 case DWARF_VALUE_MEMORY:
838 CORE_ADDR address = dwarf_expr_fetch (ctx, 0);
839 int in_stack_memory = dwarf_expr_fetch_in_stack_memory (ctx, 0);
841 retval = allocate_value (type);
842 VALUE_LVAL (retval) = lval_memory;
843 set_value_lazy (retval, 1);
845 set_value_stack (retval, 1);
846 set_value_address (retval, address);
850 case DWARF_VALUE_STACK:
852 ULONGEST value = (ULONGEST) dwarf_expr_fetch (ctx, 0);
854 size_t n = ctx->addr_size;
856 retval = allocate_value (type);
857 contents = value_contents_raw (retval);
858 if (n > TYPE_LENGTH (type))
859 n = TYPE_LENGTH (type);
860 store_unsigned_integer (contents, n,
861 gdbarch_byte_order (ctx->gdbarch),
866 case DWARF_VALUE_LITERAL:
871 retval = allocate_value (type);
872 contents = value_contents_raw (retval);
873 if (n > TYPE_LENGTH (type))
874 n = TYPE_LENGTH (type);
875 memcpy (contents, ctx->data, n);
879 /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context --
880 it can only be encountered when making a piece. */
881 case DWARF_VALUE_OPTIMIZED_OUT:
883 internal_error (__FILE__, __LINE__, _("invalid location type"));
887 set_value_initialized (retval, ctx->initialized);
889 do_cleanups (old_chain);
894 /* Helper functions and baton for dwarf2_loc_desc_needs_frame. */
896 struct needs_frame_baton
901 /* Reads from registers do require a frame. */
903 needs_frame_read_reg (void *baton, int regnum)
905 struct needs_frame_baton *nf_baton = baton;
907 nf_baton->needs_frame = 1;
911 /* Reads from memory do not require a frame. */
913 needs_frame_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
915 memset (buf, 0, len);
918 /* Frame-relative accesses do require a frame. */
920 needs_frame_frame_base (void *baton, const gdb_byte **start, size_t * length)
922 static gdb_byte lit0 = DW_OP_lit0;
923 struct needs_frame_baton *nf_baton = baton;
928 nf_baton->needs_frame = 1;
931 /* CFA accesses require a frame. */
934 needs_frame_frame_cfa (void *baton)
936 struct needs_frame_baton *nf_baton = baton;
938 nf_baton->needs_frame = 1;
942 /* Thread-local accesses do require a frame. */
944 needs_frame_tls_address (void *baton, CORE_ADDR offset)
946 struct needs_frame_baton *nf_baton = baton;
948 nf_baton->needs_frame = 1;
952 /* Return non-zero iff the location expression at DATA (length SIZE)
953 requires a frame to evaluate. */
956 dwarf2_loc_desc_needs_frame (gdb_byte *data, unsigned short size,
957 struct dwarf2_per_cu_data *per_cu)
959 struct needs_frame_baton baton;
960 struct dwarf_expr_context *ctx;
962 struct cleanup *old_chain;
964 baton.needs_frame = 0;
966 ctx = new_dwarf_expr_context ();
967 old_chain = make_cleanup_free_dwarf_expr_context (ctx);
969 ctx->gdbarch = get_objfile_arch (dwarf2_per_cu_objfile (per_cu));
970 ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
972 ctx->read_reg = needs_frame_read_reg;
973 ctx->read_mem = needs_frame_read_mem;
974 ctx->get_frame_base = needs_frame_frame_base;
975 ctx->get_frame_cfa = needs_frame_frame_cfa;
976 ctx->get_tls_address = needs_frame_tls_address;
978 dwarf_expr_eval (ctx, data, size);
980 in_reg = ctx->location == DWARF_VALUE_REGISTER;
982 if (ctx->num_pieces > 0)
986 /* If the location has several pieces, and any of them are in
987 registers, then we will need a frame to fetch them from. */
988 for (i = 0; i < ctx->num_pieces; i++)
989 if (ctx->pieces[i].location == DWARF_VALUE_REGISTER)
993 do_cleanups (old_chain);
995 return baton.needs_frame || in_reg;
998 /* This struct keeps track of the pieces that make up a multi-location
999 object, for use in agent expression generation. It is
1000 superficially similar to struct dwarf_expr_piece, but
1001 dwarf_expr_piece is designed for use in immediate evaluation, and
1002 does not, for example, have a way to record both base register and
1007 /* Memory vs register, etc */
1008 enum axs_lvalue_kind kind;
1010 /* If non-zero, number of bytes in this fragment */
1013 /* (GDB-numbered) reg, or base reg if >= 0 */
1016 /* offset from reg */
1020 static const gdb_byte *
1021 dwarf2_tracepoint_var_loc (struct symbol *symbol,
1022 struct agent_expr *ax,
1023 struct axs_var_loc *loc,
1024 struct gdbarch *gdbarch,
1025 const gdb_byte *data, const gdb_byte *end)
1027 if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
1029 loc->kind = axs_lvalue_register;
1030 loc->reg = gdbarch_dwarf2_reg_to_regnum (gdbarch, data[0] - DW_OP_reg0);
1033 else if (data[0] == DW_OP_regx)
1037 data = read_uleb128 (data + 1, end, ®);
1038 loc->kind = axs_lvalue_register;
1039 loc->reg = gdbarch_dwarf2_reg_to_regnum (gdbarch, reg);
1041 else if (data[0] == DW_OP_fbreg)
1044 struct symbol *framefunc;
1046 LONGEST frame_offset;
1047 const gdb_byte *base_data;
1049 LONGEST base_offset = 0;
1051 b = block_for_pc (ax->scope);
1054 error (_("No block found for address"));
1056 framefunc = block_linkage_function (b);
1059 error (_("No function found for block"));
1061 dwarf_expr_frame_base_1 (framefunc, ax->scope,
1062 &base_data, &base_size);
1064 if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
1066 const gdb_byte *buf_end;
1068 frame_reg = base_data[0] - DW_OP_breg0;
1069 buf_end = read_sleb128 (base_data + 1,
1070 base_data + base_size, &base_offset);
1071 if (buf_end != base_data + base_size)
1072 error (_("Unexpected opcode after DW_OP_breg%u for symbol \"%s\"."),
1073 frame_reg, SYMBOL_PRINT_NAME (symbol));
1075 else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
1077 /* The frame base is just the register, with no offset. */
1078 frame_reg = base_data[0] - DW_OP_reg0;
1083 /* We don't know what to do with the frame base expression,
1084 so we can't trace this variable; give up. */
1085 error (_("Cannot generate expression to collect symbol \"%s\"; DWARF 2 encoding not handled, first opcode in base data is 0x%x."),
1086 SYMBOL_PRINT_NAME (symbol), base_data[0]);
1089 data = read_sleb128 (data + 1, end, &frame_offset);
1091 loc->kind = axs_lvalue_memory;
1092 loc->reg = gdbarch_dwarf2_reg_to_regnum (gdbarch, frame_reg);
1093 loc->offset = base_offset + frame_offset;
1095 else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31)
1100 reg = data[0] - DW_OP_breg0;
1101 data = read_sleb128 (data + 1, end, &offset);
1103 loc->kind = axs_lvalue_memory;
1104 loc->reg = gdbarch_dwarf2_reg_to_regnum (gdbarch, reg);
1105 loc->offset = offset;
1108 error (_("Unsupported DWARF opcode 0x%x in the location of \"%s\"."),
1109 data[0], SYMBOL_PRINT_NAME (symbol));
1114 /* Given the location of a piece, issue bytecodes that will access it. */
1117 dwarf2_tracepoint_var_access (struct agent_expr *ax,
1118 struct axs_value *value,
1119 struct axs_var_loc *loc)
1121 value->kind = loc->kind;
1125 case axs_lvalue_register:
1126 value->u.reg = loc->reg;
1129 case axs_lvalue_memory:
1130 ax_reg (ax, loc->reg);
1133 ax_const_l (ax, loc->offset);
1134 ax_simple (ax, aop_add);
1139 internal_error (__FILE__, __LINE__, _("Unhandled value kind in dwarf2_tracepoint_var_access"));
1144 dwarf2_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
1145 struct agent_expr *ax, struct axs_value *value,
1146 const gdb_byte *data, int size)
1148 const gdb_byte *end = data + size;
1149 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1150 /* In practice, a variable is not going to be spread across
1151 dozens of registers or memory locations. If someone comes up
1152 with a real-world example, revisit this. */
1153 #define MAX_FRAGS 16
1154 struct axs_var_loc fragments[MAX_FRAGS];
1155 int nfrags = 0, frag;
1161 if (!data || size == 0)
1163 value->optimized_out = 1;
1171 if (nfrags == MAX_FRAGS)
1172 error (_("Too many pieces in location for \"%s\"."),
1173 SYMBOL_PRINT_NAME (symbol));
1175 fragments[nfrags].bytes = 0;
1176 data = dwarf2_tracepoint_var_loc (symbol, ax, &fragments[nfrags],
1177 gdbarch, data, end);
1181 else if (data[0] == DW_OP_piece)
1185 data = read_uleb128 (data + 1, end, &bytes);
1186 /* Only deal with 4 byte fragments for now. */
1188 error (_("DW_OP_piece %s not supported in location for \"%s\"."),
1189 pulongest (bytes), SYMBOL_PRINT_NAME (symbol));
1190 fragments[nfrags - 1].bytes = bytes;
1201 if (bad || data > end)
1202 error (_("Corrupted DWARF expression for \"%s\"."),
1203 SYMBOL_PRINT_NAME (symbol));
1205 /* If single expression, no pieces, convert to external format. */
1208 dwarf2_tracepoint_var_access (ax, value, &fragments[0]);
1212 if (length != TYPE_LENGTH (value->type))
1213 error (_("Inconsistent piece information for \"%s\"."),
1214 SYMBOL_PRINT_NAME (symbol));
1216 /* Emit bytecodes to assemble the pieces into a single stack entry. */
1218 for ((frag = (byte_order == BFD_ENDIAN_BIG ? 0 : nfrags - 1));
1220 (frag += (byte_order == BFD_ENDIAN_BIG ? 1 : -1)))
1224 /* shift the previous fragment up 32 bits */
1225 ax_const_l (ax, 32);
1226 ax_simple (ax, aop_lsh);
1229 dwarf2_tracepoint_var_access (ax, value, &fragments[frag]);
1231 switch (value->kind)
1233 case axs_lvalue_register:
1234 ax_reg (ax, value->u.reg);
1237 case axs_lvalue_memory:
1239 extern int trace_kludge; /* Ugh. */
1241 gdb_assert (fragments[frag].bytes == 4);
1243 ax_trace_quick (ax, 4);
1244 ax_simple (ax, aop_ref32);
1251 /* or the new fragment into the previous */
1252 ax_zero_ext (ax, 32);
1253 ax_simple (ax, aop_bit_or);
1257 value->kind = axs_rvalue;
1261 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
1262 evaluator to calculate the location. */
1263 static struct value *
1264 locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
1266 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
1269 val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
1270 dlbaton->size, dlbaton->per_cu);
1275 /* Return non-zero iff we need a frame to evaluate SYMBOL. */
1277 locexpr_read_needs_frame (struct symbol *symbol)
1279 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
1281 return dwarf2_loc_desc_needs_frame (dlbaton->data, dlbaton->size,
1285 /* Describe a single piece of a location, returning an updated
1286 position in the bytecode sequence. */
1288 static const gdb_byte *
1289 locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
1290 CORE_ADDR addr, struct objfile *objfile,
1291 const gdb_byte *data, int size,
1292 unsigned int addr_size)
1294 struct gdbarch *gdbarch = get_objfile_arch (objfile);
1297 if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
1299 regno = gdbarch_dwarf2_reg_to_regnum (gdbarch, data[0] - DW_OP_reg0);
1300 fprintf_filtered (stream, _("a variable in $%s"),
1301 gdbarch_register_name (gdbarch, regno));
1304 else if (data[0] == DW_OP_regx)
1308 data = read_uleb128 (data + 1, data + size, ®);
1309 regno = gdbarch_dwarf2_reg_to_regnum (gdbarch, reg);
1310 fprintf_filtered (stream, _("a variable in $%s"),
1311 gdbarch_register_name (gdbarch, regno));
1313 else if (data[0] == DW_OP_fbreg)
1316 struct symbol *framefunc;
1318 LONGEST frame_offset;
1319 const gdb_byte *base_data;
1321 LONGEST base_offset = 0;
1323 b = block_for_pc (addr);
1326 error (_("No block found for address for symbol \"%s\"."),
1327 SYMBOL_PRINT_NAME (symbol));
1329 framefunc = block_linkage_function (b);
1332 error (_("No function found for block for symbol \"%s\"."),
1333 SYMBOL_PRINT_NAME (symbol));
1335 dwarf_expr_frame_base_1 (framefunc, addr, &base_data, &base_size);
1337 if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
1339 const gdb_byte *buf_end;
1341 frame_reg = base_data[0] - DW_OP_breg0;
1342 buf_end = read_sleb128 (base_data + 1,
1343 base_data + base_size, &base_offset);
1344 if (buf_end != base_data + base_size)
1345 error (_("Unexpected opcode after DW_OP_breg%u for symbol \"%s\"."),
1346 frame_reg, SYMBOL_PRINT_NAME (symbol));
1348 else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
1350 /* The frame base is just the register, with no offset. */
1351 frame_reg = base_data[0] - DW_OP_reg0;
1356 /* We don't know what to do with the frame base expression,
1357 so we can't trace this variable; give up. */
1358 error (_("Cannot describe location of symbol \"%s\"; "
1359 "DWARF 2 encoding not handled, "
1360 "first opcode in base data is 0x%x."),
1361 SYMBOL_PRINT_NAME (symbol), base_data[0]);
1364 regno = gdbarch_dwarf2_reg_to_regnum (gdbarch, frame_reg);
1366 data = read_sleb128 (data + 1, data + size, &frame_offset);
1368 fprintf_filtered (stream, _("a variable at frame base reg $%s offset %s+%s"),
1369 gdbarch_register_name (gdbarch, regno),
1370 plongest (base_offset), plongest (frame_offset));
1372 else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31)
1376 regno = gdbarch_dwarf2_reg_to_regnum (gdbarch, data[0] - DW_OP_breg0);
1378 data = read_sleb128 (data + 1, data + size, &offset);
1380 fprintf_filtered (stream,
1381 _("a variable at offset %s from base reg $%s"),
1383 gdbarch_register_name (gdbarch, regno));
1386 /* The location expression for a TLS variable looks like this (on a
1389 DW_AT_location : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
1390 (DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
1392 0x3 is the encoding for DW_OP_addr, which has an operand as long
1393 as the size of an address on the target machine (here is 8
1394 bytes). 0xe0 is the encoding for DW_OP_GNU_push_tls_address.
1395 The operand represents the offset at which the variable is within
1396 the thread local storage. */
1399 && data[size - 1] == DW_OP_GNU_push_tls_address
1400 && data[0] == DW_OP_addr)
1402 CORE_ADDR offset = dwarf2_read_address (gdbarch,
1407 fprintf_filtered (stream,
1408 _("a thread-local variable at offset %s "
1409 "in the thread-local storage for `%s'"),
1410 paddress (gdbarch, offset), objfile->name);
1412 data += 1 + addr_size + 1;
1415 fprintf_filtered (stream,
1416 _("a variable with complex or multiple locations (DWARF2)"));
1421 /* Describe a single location, which may in turn consist of multiple
1425 locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
1426 struct ui_file *stream,
1427 const gdb_byte *data, int size,
1428 struct objfile *objfile, unsigned int addr_size)
1430 const gdb_byte *end = data + size;
1431 int piece_done = 0, first_piece = 1, bad = 0;
1433 /* A multi-piece description consists of multiple sequences of bytes
1434 each followed by DW_OP_piece + length of piece. */
1442 fprintf_filtered (stream, _(", and "));
1444 data = locexpr_describe_location_piece (symbol, stream, addr, objfile,
1445 data, size, addr_size);
1448 else if (data[0] == DW_OP_piece)
1452 data = read_uleb128 (data + 1, end, &bytes);
1454 fprintf_filtered (stream, _(" [%s-byte piece]"), pulongest (bytes));
1465 if (bad || data > end)
1466 error (_("Corrupted DWARF2 expression for \"%s\"."),
1467 SYMBOL_PRINT_NAME (symbol));
1470 /* Print a natural-language description of SYMBOL to STREAM. This
1471 version is for a symbol with a single location. */
1474 locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
1475 struct ui_file *stream)
1477 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
1478 struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
1479 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
1481 locexpr_describe_location_1 (symbol, addr, stream, dlbaton->data, dlbaton->size,
1482 objfile, addr_size);
1485 /* Describe the location of SYMBOL as an agent value in VALUE, generating
1486 any necessary bytecode in AX. */
1489 locexpr_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
1490 struct agent_expr *ax, struct axs_value *value)
1492 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
1494 dwarf2_tracepoint_var_ref (symbol, gdbarch, ax, value,
1495 dlbaton->data, dlbaton->size);
1498 /* The set of location functions used with the DWARF-2 expression
1500 const struct symbol_computed_ops dwarf2_locexpr_funcs = {
1501 locexpr_read_variable,
1502 locexpr_read_needs_frame,
1503 locexpr_describe_location,
1504 locexpr_tracepoint_var_ref
1508 /* Wrapper functions for location lists. These generally find
1509 the appropriate location expression and call something above. */
1511 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
1512 evaluator to calculate the location. */
1513 static struct value *
1514 loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
1516 struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
1521 data = find_location_expression (dlbaton, &size,
1522 frame ? get_frame_address_in_block (frame)
1526 val = allocate_value (SYMBOL_TYPE (symbol));
1527 VALUE_LVAL (val) = not_lval;
1528 set_value_optimized_out (val, 1);
1531 val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size,
1537 /* Return non-zero iff we need a frame to evaluate SYMBOL. */
1539 loclist_read_needs_frame (struct symbol *symbol)
1541 /* If there's a location list, then assume we need to have a frame
1542 to choose the appropriate location expression. With tracking of
1543 global variables this is not necessarily true, but such tracking
1544 is disabled in GCC at the moment until we figure out how to
1550 /* Print a natural-language description of SYMBOL to STREAM. This
1551 version applies when there is a list of different locations, each
1552 with a specified address range. */
1555 loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
1556 struct ui_file *stream)
1558 struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
1559 CORE_ADDR low, high;
1560 gdb_byte *loc_ptr, *buf_end;
1561 int length, first = 1;
1562 struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
1563 struct gdbarch *gdbarch = get_objfile_arch (objfile);
1564 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1565 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
1566 CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
1567 /* Adjust base_address for relocatable objects. */
1568 CORE_ADDR base_offset = ANOFFSET (objfile->section_offsets,
1569 SECT_OFF_TEXT (objfile));
1570 CORE_ADDR base_address = dlbaton->base_address + base_offset;
1572 loc_ptr = dlbaton->data;
1573 buf_end = dlbaton->data + dlbaton->size;
1575 fprintf_filtered (stream, _("multi-location ("));
1577 /* Iterate through locations until we run out. */
1580 if (buf_end - loc_ptr < 2 * addr_size)
1581 error (_("Corrupted DWARF expression for symbol \"%s\"."),
1582 SYMBOL_PRINT_NAME (symbol));
1584 low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
1585 loc_ptr += addr_size;
1587 /* A base-address-selection entry. */
1588 if (low == base_mask)
1590 base_address = dwarf2_read_address (gdbarch,
1591 loc_ptr, buf_end, addr_size);
1592 fprintf_filtered (stream, _("[base address %s]"),
1593 paddress (gdbarch, base_address));
1594 loc_ptr += addr_size;
1598 high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
1599 loc_ptr += addr_size;
1601 /* An end-of-list entry. */
1602 if (low == 0 && high == 0)
1604 /* Indicate the end of the list, for readability. */
1605 fprintf_filtered (stream, _(")"));
1609 /* Otherwise, a location expression entry. */
1610 low += base_address;
1611 high += base_address;
1613 length = extract_unsigned_integer (loc_ptr, 2, byte_order);
1616 /* Separate the different locations with a semicolon. */
1620 fprintf_filtered (stream, _("; "));
1622 /* (It would improve readability to print only the minimum
1623 necessary digits of the second number of the range.) */
1624 fprintf_filtered (stream, _("range %s-%s, "),
1625 paddress (gdbarch, low), paddress (gdbarch, high));
1627 /* Now describe this particular location. */
1628 locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
1629 objfile, addr_size);
1635 /* Describe the location of SYMBOL as an agent value in VALUE, generating
1636 any necessary bytecode in AX. */
1638 loclist_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
1639 struct agent_expr *ax, struct axs_value *value)
1641 struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
1645 data = find_location_expression (dlbaton, &size, ax->scope);
1647 dwarf2_tracepoint_var_ref (symbol, gdbarch, ax, value, data, size);
1650 /* The set of location functions used with the DWARF-2 expression
1651 evaluator and location lists. */
1652 const struct symbol_computed_ops dwarf2_loclist_funcs = {
1653 loclist_read_variable,
1654 loclist_read_needs_frame,
1655 loclist_describe_location,
1656 loclist_tracepoint_var_ref