2011-07-25 Pedro Alves <pedro@codesourcery.com>
[deliverable/binutils-gdb.git] / gdb / dwarf2loc.c
1 /* DWARF 2 location expression support for GDB.
2
3 Copyright (C) 2003, 2005, 2007, 2008, 2009, 2010, 2011
4 Free Software Foundation, Inc.
5
6 Contributed by Daniel Jacobowitz, MontaVista Software, Inc.
7
8 This file is part of GDB.
9
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.
14
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.
19
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/>. */
22
23 #include "defs.h"
24 #include "ui-out.h"
25 #include "value.h"
26 #include "frame.h"
27 #include "gdbcore.h"
28 #include "target.h"
29 #include "inferior.h"
30 #include "ax.h"
31 #include "ax-gdb.h"
32 #include "regcache.h"
33 #include "objfiles.h"
34 #include "exceptions.h"
35 #include "block.h"
36
37 #include "dwarf2.h"
38 #include "dwarf2expr.h"
39 #include "dwarf2loc.h"
40 #include "dwarf2-frame.h"
41
42 #include "gdb_string.h"
43 #include "gdb_assert.h"
44
45 extern int dwarf2_always_disassemble;
46
47 static void dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc,
48 const gdb_byte **start, size_t *length);
49
50 static struct value *dwarf2_evaluate_loc_desc_full (struct type *type,
51 struct frame_info *frame,
52 const gdb_byte *data,
53 unsigned short size,
54 struct dwarf2_per_cu_data *per_cu,
55 LONGEST byte_offset);
56
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.
61
62 For now, only return the first matching location expression; there
63 can be more than one in the list. */
64
65 const gdb_byte *
66 dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton,
67 size_t *locexpr_length, CORE_ADDR pc)
68 {
69 CORE_ADDR low, high;
70 const gdb_byte *loc_ptr, *buf_end;
71 int length;
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;
81
82 loc_ptr = baton->data;
83 buf_end = baton->data + baton->size;
84
85 while (1)
86 {
87 if (buf_end - loc_ptr < 2 * addr_size)
88 error (_("dwarf2_find_location_expression: "
89 "Corrupted DWARF expression."));
90
91 if (signed_addr_p)
92 low = extract_signed_integer (loc_ptr, addr_size, byte_order);
93 else
94 low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
95 loc_ptr += addr_size;
96
97 if (signed_addr_p)
98 high = extract_signed_integer (loc_ptr, addr_size, byte_order);
99 else
100 high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
101 loc_ptr += addr_size;
102
103 /* A base-address-selection entry. */
104 if ((low & base_mask) == base_mask)
105 {
106 base_address = high + base_offset;
107 continue;
108 }
109
110 /* An end-of-list entry. */
111 if (low == 0 && high == 0)
112 return NULL;
113
114 /* Otherwise, a location expression entry. */
115 low += base_address;
116 high += base_address;
117
118 length = extract_unsigned_integer (loc_ptr, 2, byte_order);
119 loc_ptr += 2;
120
121 if (pc >= low && pc < high)
122 {
123 *locexpr_length = length;
124 return loc_ptr;
125 }
126
127 loc_ptr += length;
128 }
129 }
130
131 /* This is the baton used when performing dwarf2 expression
132 evaluation. */
133 struct dwarf_expr_baton
134 {
135 struct frame_info *frame;
136 struct dwarf2_per_cu_data *per_cu;
137 };
138
139 /* Helper functions for dwarf2_evaluate_loc_desc. */
140
141 /* Using the frame specified in BATON, return the value of register
142 REGNUM, treated as a pointer. */
143 static CORE_ADDR
144 dwarf_expr_read_reg (void *baton, int dwarf_regnum)
145 {
146 struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
147 struct gdbarch *gdbarch = get_frame_arch (debaton->frame);
148 CORE_ADDR result;
149 int regnum;
150
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);
154 return result;
155 }
156
157 /* Read memory at ADDR (length LEN) into BUF. */
158
159 static void
160 dwarf_expr_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
161 {
162 read_memory (addr, buf, len);
163 }
164
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. */
168 static void
169 dwarf_expr_frame_base (void *baton, const gdb_byte **start, size_t * length)
170 {
171 /* FIXME: cagney/2003-03-26: This code should be using
172 get_frame_base_address(), and then implement a dwarf2 specific
173 this_base method. */
174 struct symbol *framefunc;
175 struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
176
177 /* Use block_linkage_function, which returns a real (not inlined)
178 function, instead of get_frame_function, which may return an
179 inlined function. */
180 framefunc = block_linkage_function (get_frame_block (debaton->frame, NULL));
181
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);
186
187 dwarf_expr_frame_base_1 (framefunc,
188 get_frame_address_in_block (debaton->frame),
189 start, length);
190 }
191
192 static void
193 dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc,
194 const gdb_byte **start, size_t *length)
195 {
196 if (SYMBOL_LOCATION_BATON (framefunc) == NULL)
197 *start = NULL;
198 else if (SYMBOL_COMPUTED_OPS (framefunc) == &dwarf2_loclist_funcs)
199 {
200 struct dwarf2_loclist_baton *symbaton;
201
202 symbaton = SYMBOL_LOCATION_BATON (framefunc);
203 *start = dwarf2_find_location_expression (symbaton, length, pc);
204 }
205 else
206 {
207 struct dwarf2_locexpr_baton *symbaton;
208
209 symbaton = SYMBOL_LOCATION_BATON (framefunc);
210 if (symbaton != NULL)
211 {
212 *length = symbaton->size;
213 *start = symbaton->data;
214 }
215 else
216 *start = NULL;
217 }
218
219 if (*start == NULL)
220 error (_("Could not find the frame base for \"%s\"."),
221 SYMBOL_NATURAL_NAME (framefunc));
222 }
223
224 /* Helper function for dwarf2_evaluate_loc_desc. Computes the CFA for
225 the frame in BATON. */
226
227 static CORE_ADDR
228 dwarf_expr_frame_cfa (void *baton)
229 {
230 struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
231
232 return dwarf2_frame_cfa (debaton->frame);
233 }
234
235 /* Helper function for dwarf2_evaluate_loc_desc. Computes the PC for
236 the frame in BATON. */
237
238 static CORE_ADDR
239 dwarf_expr_frame_pc (void *baton)
240 {
241 struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
242
243 return get_frame_address_in_block (debaton->frame);
244 }
245
246 /* Using the objfile specified in BATON, find the address for the
247 current thread's thread-local storage with offset OFFSET. */
248 static CORE_ADDR
249 dwarf_expr_tls_address (void *baton, CORE_ADDR offset)
250 {
251 struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
252 struct objfile *objfile = dwarf2_per_cu_objfile (debaton->per_cu);
253
254 return target_translate_tls_address (objfile, offset);
255 }
256
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
259 call and return. */
260
261 static void
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),
265 void *baton)
266 {
267 struct dwarf2_locexpr_baton block;
268 struct cleanup *back_to;
269
270 block = dwarf2_fetch_die_location_block (die_offset, per_cu,
271 get_frame_pc, baton);
272
273 back_to = make_cleanup (xfree, (void *) block.data);
274
275 /* DW_OP_call_ref is currently not supported. */
276 gdb_assert (block.per_cu == per_cu);
277
278 dwarf_expr_eval (ctx, block.data, block.size);
279
280 do_cleanups (back_to);
281 }
282
283 /* Helper interface of per_cu_dwarf_call for dwarf2_evaluate_loc_desc. */
284
285 static void
286 dwarf_expr_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
287 {
288 struct dwarf_expr_baton *debaton = ctx->baton;
289
290 per_cu_dwarf_call (ctx, die_offset, debaton->per_cu,
291 ctx->funcs->get_frame_pc, ctx->baton);
292 }
293
294 /* Callback function for dwarf2_evaluate_loc_desc. */
295
296 static struct type *
297 dwarf_expr_get_base_type (struct dwarf_expr_context *ctx, size_t die_offset)
298 {
299 struct dwarf_expr_baton *debaton = ctx->baton;
300
301 return dwarf2_get_die_type (die_offset, debaton->per_cu);
302 }
303
304 struct piece_closure
305 {
306 /* Reference count. */
307 int refc;
308
309 /* The CU from which this closure's expression came. */
310 struct dwarf2_per_cu_data *per_cu;
311
312 /* The number of pieces used to describe this variable. */
313 int n_pieces;
314
315 /* The target address size, used only for DWARF_VALUE_STACK. */
316 int addr_size;
317
318 /* The pieces themselves. */
319 struct dwarf_expr_piece *pieces;
320 };
321
322 /* Allocate a closure for a value formed from separately-described
323 PIECES. */
324
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,
328 int addr_size)
329 {
330 struct piece_closure *c = XZALLOC (struct piece_closure);
331 int i;
332
333 c->refc = 1;
334 c->per_cu = per_cu;
335 c->n_pieces = n_pieces;
336 c->addr_size = addr_size;
337 c->pieces = XCALLOC (n_pieces, struct dwarf_expr_piece);
338
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);
343
344 return c;
345 }
346
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
349 byte.
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
354 fewer bits.
355 BITS_BIG_ENDIAN is taken directly from gdbarch.
356 This function returns the extracted bits. */
357
358 static unsigned int
359 extract_bits_primitive (const gdb_byte **source,
360 unsigned int *source_offset_bits,
361 int *nbits, int bits_big_endian)
362 {
363 unsigned int avail, mask, datum;
364
365 gdb_assert (*source_offset_bits < 8);
366
367 avail = 8 - *source_offset_bits;
368 if (avail > *nbits)
369 avail = *nbits;
370
371 mask = (1 << avail) - 1;
372 datum = **source;
373 if (bits_big_endian)
374 datum >>= 8 - (*source_offset_bits + *nbits);
375 else
376 datum >>= *source_offset_bits;
377 datum &= mask;
378
379 *nbits -= avail;
380 *source_offset_bits += avail;
381 if (*source_offset_bits >= 8)
382 {
383 *source_offset_bits -= 8;
384 ++*source;
385 }
386
387 return datum;
388 }
389
390 /* Extract some bits from a source buffer and move forward in the
391 buffer.
392
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
395 bits are read.
396 NBITS is the number of bits to read.
397 BITS_BIG_ENDIAN is taken directly from gdbarch.
398
399 This function returns the bits that were read. */
400
401 static unsigned int
402 extract_bits (const gdb_byte **source, unsigned int *source_offset_bits,
403 int nbits, int bits_big_endian)
404 {
405 unsigned int datum;
406
407 gdb_assert (nbits > 0 && nbits <= 8);
408
409 datum = extract_bits_primitive (source, source_offset_bits, &nbits,
410 bits_big_endian);
411 if (nbits > 0)
412 {
413 unsigned int more;
414
415 more = extract_bits_primitive (source, source_offset_bits, &nbits,
416 bits_big_endian);
417 if (bits_big_endian)
418 datum <<= nbits;
419 else
420 more <<= nbits;
421 datum |= more;
422 }
423
424 return datum;
425 }
426
427 /* Write some bits into a buffer and move forward in the buffer.
428
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
431 written.
432 DEST_OFFSET_BITS is the bit offset in DEST at which writing is
433 done.
434 NBITS is the number of valid bits in DATUM.
435 BITS_BIG_ENDIAN is taken directly from gdbarch. */
436
437 static void
438 insert_bits (unsigned int datum,
439 gdb_byte *dest, unsigned int dest_offset_bits,
440 int nbits, int bits_big_endian)
441 {
442 unsigned int mask;
443
444 gdb_assert (dest_offset_bits + nbits <= 8);
445
446 mask = (1 << nbits) - 1;
447 if (bits_big_endian)
448 {
449 datum <<= 8 - (dest_offset_bits + nbits);
450 mask <<= 8 - (dest_offset_bits + nbits);
451 }
452 else
453 {
454 datum <<= dest_offset_bits;
455 mask <<= dest_offset_bits;
456 }
457
458 gdb_assert ((datum & ~mask) == 0);
459
460 *dest = (*dest & ~mask) | datum;
461 }
462
463 /* Copy bits from a source to a destination.
464
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. */
471
472 static void
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,
476 int bits_big_endian)
477 {
478 unsigned int dest_avail;
479 int datum;
480
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;
486
487 dest_avail = 8 - dest_offset_bits % 8;
488
489 /* See if we can fill the first destination byte. */
490 if (dest_avail < bit_count)
491 {
492 datum = extract_bits (&source, &source_offset_bits, dest_avail,
493 bits_big_endian);
494 insert_bits (datum, dest, dest_offset_bits, dest_avail, bits_big_endian);
495 ++dest;
496 dest_offset_bits = 0;
497 bit_count -= dest_avail;
498 }
499
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)
504 {
505 datum = extract_bits (&source, &source_offset_bits, 8, bits_big_endian);
506 *dest++ = (gdb_byte) datum;
507 }
508
509 /* Finally, we may have a few leftover bits. */
510 gdb_assert (bit_count <= 8 - dest_offset_bits % 8);
511 if (bit_count > 0)
512 {
513 datum = extract_bits (&source, &source_offset_bits, bit_count,
514 bits_big_endian);
515 insert_bits (datum, dest, dest_offset_bits, bit_count, bits_big_endian);
516 }
517 }
518
519 static void
520 read_pieced_value (struct value *v)
521 {
522 int i;
523 long offset = 0;
524 ULONGEST bits_to_skip;
525 gdb_byte *contents;
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));
529 size_t type_len;
530 size_t buffer_size = 0;
531 char *buffer = NULL;
532 struct cleanup *cleanup;
533 int bits_big_endian
534 = gdbarch_bits_big_endian (get_type_arch (value_type (v)));
535
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"));
540
541 cleanup = make_cleanup (free_current_contents, &buffer);
542
543 contents = value_contents_raw (v);
544 bits_to_skip = 8 * value_offset (v);
545 if (value_bitsize (v))
546 {
547 bits_to_skip += value_bitpos (v);
548 type_len = value_bitsize (v);
549 }
550 else
551 type_len = 8 * TYPE_LENGTH (value_type (v));
552
553 for (i = 0; i < c->n_pieces && offset < type_len; i++)
554 {
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;
559
560 /* Compute size, source, and destination offsets for copying, in
561 bits. */
562 this_size_bits = p->size;
563 if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
564 {
565 bits_to_skip -= this_size_bits;
566 continue;
567 }
568 if (this_size_bits > type_len - offset)
569 this_size_bits = type_len - offset;
570 if (bits_to_skip > 0)
571 {
572 dest_offset_bits = 0;
573 source_offset_bits = bits_to_skip;
574 this_size_bits -= bits_to_skip;
575 bits_to_skip = 0;
576 }
577 else
578 {
579 dest_offset_bits = offset;
580 source_offset_bits = 0;
581 }
582
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)
586 {
587 buffer_size = this_size;
588 buffer = xrealloc (buffer, buffer_size);
589 }
590 intermediate_buffer = buffer;
591
592 /* Copy from the source to DEST_BUFFER. */
593 switch (p->location)
594 {
595 case DWARF_VALUE_REGISTER:
596 {
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;
600
601 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
602 && this_size < register_size (arch, gdb_regnum))
603 {
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;
609 }
610
611 if (gdb_regnum != -1)
612 {
613 int optim, unavail;
614
615 if (!get_frame_register_bytes (frame, gdb_regnum, reg_offset,
616 this_size, buffer,
617 &optim, &unavail))
618 {
619 /* Just so garbage doesn't ever shine through. */
620 memset (buffer, 0, this_size);
621
622 if (optim)
623 set_value_optimized_out (v, 1);
624 if (unavail)
625 mark_value_bytes_unavailable (v, offset, this_size);
626 }
627 }
628 else
629 {
630 error (_("Unable to access DWARF register number %s"),
631 paddress (arch, p->v.regno));
632 }
633 }
634 break;
635
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,
640 buffer, this_size);
641 break;
642
643 case DWARF_VALUE_STACK:
644 {
645 size_t n = this_size;
646
647 if (n > c->addr_size - source_offset)
648 n = (c->addr_size >= source_offset
649 ? c->addr_size - source_offset
650 : 0);
651 if (n == 0)
652 {
653 /* Nothing. */
654 }
655 else
656 {
657 const gdb_byte *val_bytes = value_contents_all (p->v.value);
658
659 intermediate_buffer = val_bytes + source_offset;
660 }
661 }
662 break;
663
664 case DWARF_VALUE_LITERAL:
665 {
666 size_t n = this_size;
667
668 if (n > p->v.literal.length - source_offset)
669 n = (p->v.literal.length >= source_offset
670 ? p->v.literal.length - source_offset
671 : 0);
672 if (n != 0)
673 intermediate_buffer = p->v.literal.data + source_offset;
674 }
675 break;
676
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:
680 break;
681
682 case DWARF_VALUE_OPTIMIZED_OUT:
683 set_value_optimized_out (v, 1);
684 break;
685
686 default:
687 internal_error (__FILE__, __LINE__, _("invalid location type"));
688 }
689
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);
695
696 offset += this_size_bits;
697 }
698
699 do_cleanups (cleanup);
700 }
701
702 static void
703 write_pieced_value (struct value *to, struct value *from)
704 {
705 int i;
706 long offset = 0;
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));
712 size_t type_len;
713 size_t buffer_size = 0;
714 char *buffer = NULL;
715 struct cleanup *cleanup;
716 int bits_big_endian
717 = gdbarch_bits_big_endian (get_type_arch (value_type (to)));
718
719 if (frame == NULL)
720 {
721 set_value_optimized_out (to, 1);
722 return;
723 }
724
725 cleanup = make_cleanup (free_current_contents, &buffer);
726
727 contents = value_contents (from);
728 bits_to_skip = 8 * value_offset (to);
729 if (value_bitsize (to))
730 {
731 bits_to_skip += value_bitpos (to);
732 type_len = value_bitsize (to);
733 }
734 else
735 type_len = 8 * TYPE_LENGTH (value_type (to));
736
737 for (i = 0; i < c->n_pieces && offset < type_len; i++)
738 {
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;
742 int need_bitwise;
743 const gdb_byte *source_buffer;
744
745 this_size_bits = p->size;
746 if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
747 {
748 bits_to_skip -= this_size_bits;
749 continue;
750 }
751 if (this_size_bits > type_len - offset)
752 this_size_bits = type_len - offset;
753 if (bits_to_skip > 0)
754 {
755 dest_offset_bits = bits_to_skip;
756 source_offset_bits = 0;
757 this_size_bits -= bits_to_skip;
758 bits_to_skip = 0;
759 }
760 else
761 {
762 dest_offset_bits = 0;
763 source_offset_bits = offset;
764 }
765
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)
770 {
771 source_buffer = contents + source_offset;
772 need_bitwise = 0;
773 }
774 else
775 {
776 if (buffer_size < this_size)
777 {
778 buffer_size = this_size;
779 buffer = xrealloc (buffer, buffer_size);
780 }
781 source_buffer = buffer;
782 need_bitwise = 1;
783 }
784
785 switch (p->location)
786 {
787 case DWARF_VALUE_REGISTER:
788 {
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;
792
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;
797
798 if (gdb_regnum != -1)
799 {
800 if (need_bitwise)
801 {
802 int optim, unavail;
803
804 if (!get_frame_register_bytes (frame, gdb_regnum, reg_offset,
805 this_size, buffer,
806 &optim, &unavail))
807 {
808 if (optim)
809 error (_("Can't do read-modify-write to "
810 "update bitfield; containing word has been "
811 "optimized out"));
812 if (unavail)
813 throw_error (NOT_AVAILABLE_ERROR,
814 _("Can't do read-modify-write to update "
815 "bitfield; containing word "
816 "is unavailable"));
817 }
818 copy_bitwise (buffer, dest_offset_bits,
819 contents, source_offset_bits,
820 this_size_bits,
821 bits_big_endian);
822 }
823
824 put_frame_register_bytes (frame, gdb_regnum, reg_offset,
825 this_size, source_buffer);
826 }
827 else
828 {
829 error (_("Unable to write to DWARF register number %s"),
830 paddress (arch, p->v.regno));
831 }
832 }
833 break;
834 case DWARF_VALUE_MEMORY:
835 if (need_bitwise)
836 {
837 /* Only the first and last bytes can possibly have any
838 bits reused. */
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,
844 this_size_bits,
845 bits_big_endian);
846 }
847
848 write_memory (p->v.mem.addr + dest_offset,
849 source_buffer, this_size);
850 break;
851 default:
852 set_value_optimized_out (to, 1);
853 break;
854 }
855 offset += this_size_bits;
856 }
857
858 do_cleanups (cleanup);
859 }
860
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
865 optimized out.
866 DWARF_VALUE_IMPLICIT_POINTER means to check whether the bits are an
867 implicit pointer. */
868
869 static int
870 check_pieced_value_bits (const struct value *value, int bit_offset,
871 int bit_length,
872 enum dwarf_value_location check_for)
873 {
874 struct piece_closure *c
875 = (struct piece_closure *) value_computed_closure (value);
876 int i;
877 int validity = (check_for == DWARF_VALUE_MEMORY
878 || check_for == DWARF_VALUE_IMPLICIT_POINTER);
879
880 bit_offset += 8 * value_offset (value);
881 if (value_bitsize (value))
882 bit_offset += value_bitpos (value);
883
884 for (i = 0; i < c->n_pieces && bit_length > 0; i++)
885 {
886 struct dwarf_expr_piece *p = &c->pieces[i];
887 size_t this_size_bits = p->size;
888
889 if (bit_offset > 0)
890 {
891 if (bit_offset >= this_size_bits)
892 {
893 bit_offset -= this_size_bits;
894 continue;
895 }
896
897 bit_length -= this_size_bits - bit_offset;
898 bit_offset = 0;
899 }
900 else
901 bit_length -= this_size_bits;
902
903 if (check_for == DWARF_VALUE_IMPLICIT_POINTER)
904 {
905 if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
906 return 0;
907 }
908 else if (p->location == DWARF_VALUE_OPTIMIZED_OUT
909 || p->location == DWARF_VALUE_IMPLICIT_POINTER)
910 {
911 if (validity)
912 return 0;
913 }
914 else
915 {
916 if (!validity)
917 return 1;
918 }
919 }
920
921 return validity;
922 }
923
924 static int
925 check_pieced_value_validity (const struct value *value, int bit_offset,
926 int bit_length)
927 {
928 return check_pieced_value_bits (value, bit_offset, bit_length,
929 DWARF_VALUE_MEMORY);
930 }
931
932 static int
933 check_pieced_value_invalid (const struct value *value)
934 {
935 return check_pieced_value_bits (value, 0,
936 8 * TYPE_LENGTH (value_type (value)),
937 DWARF_VALUE_OPTIMIZED_OUT);
938 }
939
940 /* An implementation of an lval_funcs method to see whether a value is
941 a synthetic pointer. */
942
943 static int
944 check_pieced_synthetic_pointer (const struct value *value, int bit_offset,
945 int bit_length)
946 {
947 return check_pieced_value_bits (value, bit_offset, bit_length,
948 DWARF_VALUE_IMPLICIT_POINTER);
949 }
950
951 /* A wrapper function for get_frame_address_in_block. */
952
953 static CORE_ADDR
954 get_frame_address_in_block_wrapper (void *baton)
955 {
956 return get_frame_address_in_block (baton);
957 }
958
959 /* An implementation of an lval_funcs method to indirect through a
960 pointer. This handles the synthetic pointer case when needed. */
961
962 static struct value *
963 indirect_pieced_value (struct value *value)
964 {
965 struct piece_closure *c
966 = (struct piece_closure *) value_computed_closure (value);
967 struct type *type;
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;
973 LONGEST byte_offset;
974 struct cleanup *back_to;
975
976 type = check_typedef (value_type (value));
977 if (TYPE_CODE (type) != TYPE_CODE_PTR)
978 return NULL;
979
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);
984
985 for (i = 0; i < c->n_pieces && bit_length > 0; i++)
986 {
987 struct dwarf_expr_piece *p = &c->pieces[i];
988 size_t this_size_bits = p->size;
989
990 if (bit_offset > 0)
991 {
992 if (bit_offset >= this_size_bits)
993 {
994 bit_offset -= this_size_bits;
995 continue;
996 }
997
998 bit_length -= this_size_bits - bit_offset;
999 bit_offset = 0;
1000 }
1001 else
1002 bit_length -= this_size_bits;
1003
1004 if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
1005 return NULL;
1006
1007 if (bit_length != 0)
1008 error (_("Invalid use of DW_OP_GNU_implicit_pointer"));
1009
1010 piece = p;
1011 break;
1012 }
1013
1014 frame = get_selected_frame (_("No frame selected."));
1015 byte_offset = value_as_address (value);
1016
1017 gdb_assert (piece);
1018 baton = dwarf2_fetch_die_location_block (piece->v.ptr.die, c->per_cu,
1019 get_frame_address_in_block_wrapper,
1020 frame);
1021
1022 back_to = make_cleanup (xfree, (void *) baton.data);
1023
1024 result = dwarf2_evaluate_loc_desc_full (TYPE_TARGET_TYPE (type), frame,
1025 baton.data, baton.size, baton.per_cu,
1026 byte_offset);
1027
1028 do_cleanups (back_to);
1029
1030 return result;
1031 }
1032
1033 static void *
1034 copy_pieced_value_closure (const struct value *v)
1035 {
1036 struct piece_closure *c
1037 = (struct piece_closure *) value_computed_closure (v);
1038
1039 ++c->refc;
1040 return c;
1041 }
1042
1043 static void
1044 free_pieced_value_closure (struct value *v)
1045 {
1046 struct piece_closure *c
1047 = (struct piece_closure *) value_computed_closure (v);
1048
1049 --c->refc;
1050 if (c->refc == 0)
1051 {
1052 int i;
1053
1054 for (i = 0; i < c->n_pieces; ++i)
1055 if (c->pieces[i].location == DWARF_VALUE_STACK)
1056 value_free (c->pieces[i].v.value);
1057
1058 xfree (c->pieces);
1059 xfree (c);
1060 }
1061 }
1062
1063 /* Functions for accessing a variable described by DW_OP_piece. */
1064 static const struct lval_funcs pieced_value_funcs = {
1065 read_pieced_value,
1066 write_pieced_value,
1067 check_pieced_value_validity,
1068 check_pieced_value_invalid,
1069 indirect_pieced_value,
1070 check_pieced_synthetic_pointer,
1071 copy_pieced_value_closure,
1072 free_pieced_value_closure
1073 };
1074
1075 /* Helper function which throws an error if a synthetic pointer is
1076 invalid. */
1077
1078 static void
1079 invalid_synthetic_pointer (void)
1080 {
1081 error (_("access outside bounds of object "
1082 "referenced via synthetic pointer"));
1083 }
1084
1085 /* Virtual method table for dwarf2_evaluate_loc_desc_full below. */
1086
1087 static const struct dwarf_expr_context_funcs dwarf_expr_ctx_funcs =
1088 {
1089 dwarf_expr_read_reg,
1090 dwarf_expr_read_mem,
1091 dwarf_expr_frame_base,
1092 dwarf_expr_frame_cfa,
1093 dwarf_expr_frame_pc,
1094 dwarf_expr_tls_address,
1095 dwarf_expr_dwarf_call,
1096 dwarf_expr_get_base_type
1097 };
1098
1099 /* Evaluate a location description, starting at DATA and with length
1100 SIZE, to find the current location of variable of TYPE in the
1101 context of FRAME. BYTE_OFFSET is applied after the contents are
1102 computed. */
1103
1104 static struct value *
1105 dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
1106 const gdb_byte *data, unsigned short size,
1107 struct dwarf2_per_cu_data *per_cu,
1108 LONGEST byte_offset)
1109 {
1110 struct value *retval;
1111 struct dwarf_expr_baton baton;
1112 struct dwarf_expr_context *ctx;
1113 struct cleanup *old_chain, *value_chain;
1114 struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
1115 volatile struct gdb_exception ex;
1116
1117 if (byte_offset < 0)
1118 invalid_synthetic_pointer ();
1119
1120 if (size == 0)
1121 return allocate_optimized_out_value (type);
1122
1123 baton.frame = frame;
1124 baton.per_cu = per_cu;
1125
1126 ctx = new_dwarf_expr_context ();
1127 old_chain = make_cleanup_free_dwarf_expr_context (ctx);
1128 value_chain = make_cleanup_value_free_to_mark (value_mark ());
1129
1130 ctx->gdbarch = get_objfile_arch (objfile);
1131 ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
1132 ctx->offset = dwarf2_per_cu_text_offset (per_cu);
1133 ctx->baton = &baton;
1134 ctx->funcs = &dwarf_expr_ctx_funcs;
1135
1136 TRY_CATCH (ex, RETURN_MASK_ERROR)
1137 {
1138 dwarf_expr_eval (ctx, data, size);
1139 }
1140 if (ex.reason < 0)
1141 {
1142 if (ex.error == NOT_AVAILABLE_ERROR)
1143 {
1144 do_cleanups (old_chain);
1145 retval = allocate_value (type);
1146 mark_value_bytes_unavailable (retval, 0, TYPE_LENGTH (type));
1147 return retval;
1148 }
1149 else
1150 throw_exception (ex);
1151 }
1152
1153 if (ctx->num_pieces > 0)
1154 {
1155 struct piece_closure *c;
1156 struct frame_id frame_id = get_frame_id (frame);
1157 ULONGEST bit_size = 0;
1158 int i;
1159
1160 for (i = 0; i < ctx->num_pieces; ++i)
1161 bit_size += ctx->pieces[i].size;
1162 if (8 * (byte_offset + TYPE_LENGTH (type)) > bit_size)
1163 invalid_synthetic_pointer ();
1164
1165 c = allocate_piece_closure (per_cu, ctx->num_pieces, ctx->pieces,
1166 ctx->addr_size);
1167 /* We must clean up the value chain after creating the piece
1168 closure but before allocating the result. */
1169 do_cleanups (value_chain);
1170 retval = allocate_computed_value (type, &pieced_value_funcs, c);
1171 VALUE_FRAME_ID (retval) = frame_id;
1172 set_value_offset (retval, byte_offset);
1173 }
1174 else
1175 {
1176 switch (ctx->location)
1177 {
1178 case DWARF_VALUE_REGISTER:
1179 {
1180 struct gdbarch *arch = get_frame_arch (frame);
1181 ULONGEST dwarf_regnum = value_as_long (dwarf_expr_fetch (ctx, 0));
1182 int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_regnum);
1183
1184 if (byte_offset != 0)
1185 error (_("cannot use offset on synthetic pointer to register"));
1186 do_cleanups (value_chain);
1187 if (gdb_regnum != -1)
1188 retval = value_from_register (type, gdb_regnum, frame);
1189 else
1190 error (_("Unable to access DWARF register number %s"),
1191 paddress (arch, dwarf_regnum));
1192 }
1193 break;
1194
1195 case DWARF_VALUE_MEMORY:
1196 {
1197 CORE_ADDR address = dwarf_expr_fetch_address (ctx, 0);
1198 int in_stack_memory = dwarf_expr_fetch_in_stack_memory (ctx, 0);
1199
1200 do_cleanups (value_chain);
1201 retval = allocate_value_lazy (type);
1202 VALUE_LVAL (retval) = lval_memory;
1203 if (in_stack_memory)
1204 set_value_stack (retval, 1);
1205 set_value_address (retval, address + byte_offset);
1206 }
1207 break;
1208
1209 case DWARF_VALUE_STACK:
1210 {
1211 struct value *value = dwarf_expr_fetch (ctx, 0);
1212 gdb_byte *contents;
1213 const gdb_byte *val_bytes;
1214 size_t n = TYPE_LENGTH (value_type (value));
1215
1216 if (byte_offset + TYPE_LENGTH (type) > n)
1217 invalid_synthetic_pointer ();
1218
1219 val_bytes = value_contents_all (value);
1220 val_bytes += byte_offset;
1221 n -= byte_offset;
1222
1223 /* Preserve VALUE because we are going to free values back
1224 to the mark, but we still need the value contents
1225 below. */
1226 value_incref (value);
1227 do_cleanups (value_chain);
1228 make_cleanup_value_free (value);
1229
1230 retval = allocate_value (type);
1231 contents = value_contents_raw (retval);
1232 if (n > TYPE_LENGTH (type))
1233 n = TYPE_LENGTH (type);
1234 memcpy (contents, val_bytes, n);
1235 }
1236 break;
1237
1238 case DWARF_VALUE_LITERAL:
1239 {
1240 bfd_byte *contents;
1241 const bfd_byte *ldata;
1242 size_t n = ctx->len;
1243
1244 if (byte_offset + TYPE_LENGTH (type) > n)
1245 invalid_synthetic_pointer ();
1246
1247 do_cleanups (value_chain);
1248 retval = allocate_value (type);
1249 contents = value_contents_raw (retval);
1250
1251 ldata = ctx->data + byte_offset;
1252 n -= byte_offset;
1253
1254 if (n > TYPE_LENGTH (type))
1255 n = TYPE_LENGTH (type);
1256 memcpy (contents, ldata, n);
1257 }
1258 break;
1259
1260 case DWARF_VALUE_OPTIMIZED_OUT:
1261 do_cleanups (value_chain);
1262 retval = allocate_optimized_out_value (type);
1263 break;
1264
1265 /* DWARF_VALUE_IMPLICIT_POINTER was converted to a pieced
1266 operation by execute_stack_op. */
1267 case DWARF_VALUE_IMPLICIT_POINTER:
1268 /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context --
1269 it can only be encountered when making a piece. */
1270 default:
1271 internal_error (__FILE__, __LINE__, _("invalid location type"));
1272 }
1273 }
1274
1275 set_value_initialized (retval, ctx->initialized);
1276
1277 do_cleanups (old_chain);
1278
1279 return retval;
1280 }
1281
1282 /* The exported interface to dwarf2_evaluate_loc_desc_full; it always
1283 passes 0 as the byte_offset. */
1284
1285 struct value *
1286 dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame,
1287 const gdb_byte *data, unsigned short size,
1288 struct dwarf2_per_cu_data *per_cu)
1289 {
1290 return dwarf2_evaluate_loc_desc_full (type, frame, data, size, per_cu, 0);
1291 }
1292
1293 \f
1294 /* Helper functions and baton for dwarf2_loc_desc_needs_frame. */
1295
1296 struct needs_frame_baton
1297 {
1298 int needs_frame;
1299 struct dwarf2_per_cu_data *per_cu;
1300 };
1301
1302 /* Reads from registers do require a frame. */
1303 static CORE_ADDR
1304 needs_frame_read_reg (void *baton, int regnum)
1305 {
1306 struct needs_frame_baton *nf_baton = baton;
1307
1308 nf_baton->needs_frame = 1;
1309 return 1;
1310 }
1311
1312 /* Reads from memory do not require a frame. */
1313 static void
1314 needs_frame_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
1315 {
1316 memset (buf, 0, len);
1317 }
1318
1319 /* Frame-relative accesses do require a frame. */
1320 static void
1321 needs_frame_frame_base (void *baton, const gdb_byte **start, size_t * length)
1322 {
1323 static gdb_byte lit0 = DW_OP_lit0;
1324 struct needs_frame_baton *nf_baton = baton;
1325
1326 *start = &lit0;
1327 *length = 1;
1328
1329 nf_baton->needs_frame = 1;
1330 }
1331
1332 /* CFA accesses require a frame. */
1333
1334 static CORE_ADDR
1335 needs_frame_frame_cfa (void *baton)
1336 {
1337 struct needs_frame_baton *nf_baton = baton;
1338
1339 nf_baton->needs_frame = 1;
1340 return 1;
1341 }
1342
1343 /* Thread-local accesses do require a frame. */
1344 static CORE_ADDR
1345 needs_frame_tls_address (void *baton, CORE_ADDR offset)
1346 {
1347 struct needs_frame_baton *nf_baton = baton;
1348
1349 nf_baton->needs_frame = 1;
1350 return 1;
1351 }
1352
1353 /* Helper interface of per_cu_dwarf_call for dwarf2_loc_desc_needs_frame. */
1354
1355 static void
1356 needs_frame_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
1357 {
1358 struct needs_frame_baton *nf_baton = ctx->baton;
1359
1360 per_cu_dwarf_call (ctx, die_offset, nf_baton->per_cu,
1361 ctx->funcs->get_frame_pc, ctx->baton);
1362 }
1363
1364 /* Virtual method table for dwarf2_loc_desc_needs_frame below. */
1365
1366 static const struct dwarf_expr_context_funcs needs_frame_ctx_funcs =
1367 {
1368 needs_frame_read_reg,
1369 needs_frame_read_mem,
1370 needs_frame_frame_base,
1371 needs_frame_frame_cfa,
1372 needs_frame_frame_cfa, /* get_frame_pc */
1373 needs_frame_tls_address,
1374 needs_frame_dwarf_call,
1375 NULL /* get_base_type */
1376 };
1377
1378 /* Return non-zero iff the location expression at DATA (length SIZE)
1379 requires a frame to evaluate. */
1380
1381 static int
1382 dwarf2_loc_desc_needs_frame (const gdb_byte *data, unsigned short size,
1383 struct dwarf2_per_cu_data *per_cu)
1384 {
1385 struct needs_frame_baton baton;
1386 struct dwarf_expr_context *ctx;
1387 int in_reg;
1388 struct cleanup *old_chain;
1389 struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
1390
1391 baton.needs_frame = 0;
1392 baton.per_cu = per_cu;
1393
1394 ctx = new_dwarf_expr_context ();
1395 old_chain = make_cleanup_free_dwarf_expr_context (ctx);
1396 make_cleanup_value_free_to_mark (value_mark ());
1397
1398 ctx->gdbarch = get_objfile_arch (objfile);
1399 ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
1400 ctx->offset = dwarf2_per_cu_text_offset (per_cu);
1401 ctx->baton = &baton;
1402 ctx->funcs = &needs_frame_ctx_funcs;
1403
1404 dwarf_expr_eval (ctx, data, size);
1405
1406 in_reg = ctx->location == DWARF_VALUE_REGISTER;
1407
1408 if (ctx->num_pieces > 0)
1409 {
1410 int i;
1411
1412 /* If the location has several pieces, and any of them are in
1413 registers, then we will need a frame to fetch them from. */
1414 for (i = 0; i < ctx->num_pieces; i++)
1415 if (ctx->pieces[i].location == DWARF_VALUE_REGISTER)
1416 in_reg = 1;
1417 }
1418
1419 do_cleanups (old_chain);
1420
1421 return baton.needs_frame || in_reg;
1422 }
1423
1424 /* A helper function that throws an unimplemented error mentioning a
1425 given DWARF operator. */
1426
1427 static void
1428 unimplemented (unsigned int op)
1429 {
1430 const char *name = dwarf_stack_op_name (op);
1431
1432 if (name)
1433 error (_("DWARF operator %s cannot be translated to an agent expression"),
1434 name);
1435 else
1436 error (_("Unknown DWARF operator 0x%02x cannot be translated "
1437 "to an agent expression"),
1438 op);
1439 }
1440
1441 /* A helper function to convert a DWARF register to an arch register.
1442 ARCH is the architecture.
1443 DWARF_REG is the register.
1444 This will throw an exception if the DWARF register cannot be
1445 translated to an architecture register. */
1446
1447 static int
1448 translate_register (struct gdbarch *arch, int dwarf_reg)
1449 {
1450 int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg);
1451 if (reg == -1)
1452 error (_("Unable to access DWARF register number %d"), dwarf_reg);
1453 return reg;
1454 }
1455
1456 /* A helper function that emits an access to memory. ARCH is the
1457 target architecture. EXPR is the expression which we are building.
1458 NBITS is the number of bits we want to read. This emits the
1459 opcodes needed to read the memory and then extract the desired
1460 bits. */
1461
1462 static void
1463 access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits)
1464 {
1465 ULONGEST nbytes = (nbits + 7) / 8;
1466
1467 gdb_assert (nbits > 0 && nbits <= sizeof (LONGEST));
1468
1469 if (trace_kludge)
1470 ax_trace_quick (expr, nbytes);
1471
1472 if (nbits <= 8)
1473 ax_simple (expr, aop_ref8);
1474 else if (nbits <= 16)
1475 ax_simple (expr, aop_ref16);
1476 else if (nbits <= 32)
1477 ax_simple (expr, aop_ref32);
1478 else
1479 ax_simple (expr, aop_ref64);
1480
1481 /* If we read exactly the number of bytes we wanted, we're done. */
1482 if (8 * nbytes == nbits)
1483 return;
1484
1485 if (gdbarch_bits_big_endian (arch))
1486 {
1487 /* On a bits-big-endian machine, we want the high-order
1488 NBITS. */
1489 ax_const_l (expr, 8 * nbytes - nbits);
1490 ax_simple (expr, aop_rsh_unsigned);
1491 }
1492 else
1493 {
1494 /* On a bits-little-endian box, we want the low-order NBITS. */
1495 ax_zero_ext (expr, nbits);
1496 }
1497 }
1498
1499 /* A helper function to return the frame's PC. */
1500
1501 static CORE_ADDR
1502 get_ax_pc (void *baton)
1503 {
1504 struct agent_expr *expr = baton;
1505
1506 return expr->scope;
1507 }
1508
1509 /* Compile a DWARF location expression to an agent expression.
1510
1511 EXPR is the agent expression we are building.
1512 LOC is the agent value we modify.
1513 ARCH is the architecture.
1514 ADDR_SIZE is the size of addresses, in bytes.
1515 OP_PTR is the start of the location expression.
1516 OP_END is one past the last byte of the location expression.
1517
1518 This will throw an exception for various kinds of errors -- for
1519 example, if the expression cannot be compiled, or if the expression
1520 is invalid. */
1521
1522 void
1523 dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
1524 struct gdbarch *arch, unsigned int addr_size,
1525 const gdb_byte *op_ptr, const gdb_byte *op_end,
1526 struct dwarf2_per_cu_data *per_cu)
1527 {
1528 struct cleanup *cleanups;
1529 int i, *offsets;
1530 VEC(int) *dw_labels = NULL, *patches = NULL;
1531 const gdb_byte * const base = op_ptr;
1532 const gdb_byte *previous_piece = op_ptr;
1533 enum bfd_endian byte_order = gdbarch_byte_order (arch);
1534 ULONGEST bits_collected = 0;
1535 unsigned int addr_size_bits = 8 * addr_size;
1536 int bits_big_endian = gdbarch_bits_big_endian (arch);
1537
1538 offsets = xmalloc ((op_end - op_ptr) * sizeof (int));
1539 cleanups = make_cleanup (xfree, offsets);
1540
1541 for (i = 0; i < op_end - op_ptr; ++i)
1542 offsets[i] = -1;
1543
1544 make_cleanup (VEC_cleanup (int), &dw_labels);
1545 make_cleanup (VEC_cleanup (int), &patches);
1546
1547 /* By default we are making an address. */
1548 loc->kind = axs_lvalue_memory;
1549
1550 while (op_ptr < op_end)
1551 {
1552 enum dwarf_location_atom op = *op_ptr;
1553 ULONGEST uoffset, reg;
1554 LONGEST offset;
1555 int i;
1556
1557 offsets[op_ptr - base] = expr->len;
1558 ++op_ptr;
1559
1560 /* Our basic approach to code generation is to map DWARF
1561 operations directly to AX operations. However, there are
1562 some differences.
1563
1564 First, DWARF works on address-sized units, but AX always uses
1565 LONGEST. For most operations we simply ignore this
1566 difference; instead we generate sign extensions as needed
1567 before division and comparison operations. It would be nice
1568 to omit the sign extensions, but there is no way to determine
1569 the size of the target's LONGEST. (This code uses the size
1570 of the host LONGEST in some cases -- that is a bug but it is
1571 difficult to fix.)
1572
1573 Second, some DWARF operations cannot be translated to AX.
1574 For these we simply fail. See
1575 http://sourceware.org/bugzilla/show_bug.cgi?id=11662. */
1576 switch (op)
1577 {
1578 case DW_OP_lit0:
1579 case DW_OP_lit1:
1580 case DW_OP_lit2:
1581 case DW_OP_lit3:
1582 case DW_OP_lit4:
1583 case DW_OP_lit5:
1584 case DW_OP_lit6:
1585 case DW_OP_lit7:
1586 case DW_OP_lit8:
1587 case DW_OP_lit9:
1588 case DW_OP_lit10:
1589 case DW_OP_lit11:
1590 case DW_OP_lit12:
1591 case DW_OP_lit13:
1592 case DW_OP_lit14:
1593 case DW_OP_lit15:
1594 case DW_OP_lit16:
1595 case DW_OP_lit17:
1596 case DW_OP_lit18:
1597 case DW_OP_lit19:
1598 case DW_OP_lit20:
1599 case DW_OP_lit21:
1600 case DW_OP_lit22:
1601 case DW_OP_lit23:
1602 case DW_OP_lit24:
1603 case DW_OP_lit25:
1604 case DW_OP_lit26:
1605 case DW_OP_lit27:
1606 case DW_OP_lit28:
1607 case DW_OP_lit29:
1608 case DW_OP_lit30:
1609 case DW_OP_lit31:
1610 ax_const_l (expr, op - DW_OP_lit0);
1611 break;
1612
1613 case DW_OP_addr:
1614 uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order);
1615 op_ptr += addr_size;
1616 /* Some versions of GCC emit DW_OP_addr before
1617 DW_OP_GNU_push_tls_address. In this case the value is an
1618 index, not an address. We don't support things like
1619 branching between the address and the TLS op. */
1620 if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
1621 uoffset += dwarf2_per_cu_text_offset (per_cu);
1622 ax_const_l (expr, uoffset);
1623 break;
1624
1625 case DW_OP_const1u:
1626 ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order));
1627 op_ptr += 1;
1628 break;
1629 case DW_OP_const1s:
1630 ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order));
1631 op_ptr += 1;
1632 break;
1633 case DW_OP_const2u:
1634 ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order));
1635 op_ptr += 2;
1636 break;
1637 case DW_OP_const2s:
1638 ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order));
1639 op_ptr += 2;
1640 break;
1641 case DW_OP_const4u:
1642 ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order));
1643 op_ptr += 4;
1644 break;
1645 case DW_OP_const4s:
1646 ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order));
1647 op_ptr += 4;
1648 break;
1649 case DW_OP_const8u:
1650 ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order));
1651 op_ptr += 8;
1652 break;
1653 case DW_OP_const8s:
1654 ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order));
1655 op_ptr += 8;
1656 break;
1657 case DW_OP_constu:
1658 op_ptr = read_uleb128 (op_ptr, op_end, &uoffset);
1659 ax_const_l (expr, uoffset);
1660 break;
1661 case DW_OP_consts:
1662 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1663 ax_const_l (expr, offset);
1664 break;
1665
1666 case DW_OP_reg0:
1667 case DW_OP_reg1:
1668 case DW_OP_reg2:
1669 case DW_OP_reg3:
1670 case DW_OP_reg4:
1671 case DW_OP_reg5:
1672 case DW_OP_reg6:
1673 case DW_OP_reg7:
1674 case DW_OP_reg8:
1675 case DW_OP_reg9:
1676 case DW_OP_reg10:
1677 case DW_OP_reg11:
1678 case DW_OP_reg12:
1679 case DW_OP_reg13:
1680 case DW_OP_reg14:
1681 case DW_OP_reg15:
1682 case DW_OP_reg16:
1683 case DW_OP_reg17:
1684 case DW_OP_reg18:
1685 case DW_OP_reg19:
1686 case DW_OP_reg20:
1687 case DW_OP_reg21:
1688 case DW_OP_reg22:
1689 case DW_OP_reg23:
1690 case DW_OP_reg24:
1691 case DW_OP_reg25:
1692 case DW_OP_reg26:
1693 case DW_OP_reg27:
1694 case DW_OP_reg28:
1695 case DW_OP_reg29:
1696 case DW_OP_reg30:
1697 case DW_OP_reg31:
1698 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
1699 loc->u.reg = translate_register (arch, op - DW_OP_reg0);
1700 loc->kind = axs_lvalue_register;
1701 break;
1702
1703 case DW_OP_regx:
1704 op_ptr = read_uleb128 (op_ptr, op_end, &reg);
1705 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
1706 loc->u.reg = translate_register (arch, reg);
1707 loc->kind = axs_lvalue_register;
1708 break;
1709
1710 case DW_OP_implicit_value:
1711 {
1712 ULONGEST len;
1713
1714 op_ptr = read_uleb128 (op_ptr, op_end, &len);
1715 if (op_ptr + len > op_end)
1716 error (_("DW_OP_implicit_value: too few bytes available."));
1717 if (len > sizeof (ULONGEST))
1718 error (_("Cannot translate DW_OP_implicit_value of %d bytes"),
1719 (int) len);
1720
1721 ax_const_l (expr, extract_unsigned_integer (op_ptr, len,
1722 byte_order));
1723 op_ptr += len;
1724 dwarf_expr_require_composition (op_ptr, op_end,
1725 "DW_OP_implicit_value");
1726
1727 loc->kind = axs_rvalue;
1728 }
1729 break;
1730
1731 case DW_OP_stack_value:
1732 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
1733 loc->kind = axs_rvalue;
1734 break;
1735
1736 case DW_OP_breg0:
1737 case DW_OP_breg1:
1738 case DW_OP_breg2:
1739 case DW_OP_breg3:
1740 case DW_OP_breg4:
1741 case DW_OP_breg5:
1742 case DW_OP_breg6:
1743 case DW_OP_breg7:
1744 case DW_OP_breg8:
1745 case DW_OP_breg9:
1746 case DW_OP_breg10:
1747 case DW_OP_breg11:
1748 case DW_OP_breg12:
1749 case DW_OP_breg13:
1750 case DW_OP_breg14:
1751 case DW_OP_breg15:
1752 case DW_OP_breg16:
1753 case DW_OP_breg17:
1754 case DW_OP_breg18:
1755 case DW_OP_breg19:
1756 case DW_OP_breg20:
1757 case DW_OP_breg21:
1758 case DW_OP_breg22:
1759 case DW_OP_breg23:
1760 case DW_OP_breg24:
1761 case DW_OP_breg25:
1762 case DW_OP_breg26:
1763 case DW_OP_breg27:
1764 case DW_OP_breg28:
1765 case DW_OP_breg29:
1766 case DW_OP_breg30:
1767 case DW_OP_breg31:
1768 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1769 i = translate_register (arch, op - DW_OP_breg0);
1770 ax_reg (expr, i);
1771 if (offset != 0)
1772 {
1773 ax_const_l (expr, offset);
1774 ax_simple (expr, aop_add);
1775 }
1776 break;
1777 case DW_OP_bregx:
1778 {
1779 op_ptr = read_uleb128 (op_ptr, op_end, &reg);
1780 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1781 i = translate_register (arch, reg);
1782 ax_reg (expr, i);
1783 if (offset != 0)
1784 {
1785 ax_const_l (expr, offset);
1786 ax_simple (expr, aop_add);
1787 }
1788 }
1789 break;
1790 case DW_OP_fbreg:
1791 {
1792 const gdb_byte *datastart;
1793 size_t datalen;
1794 unsigned int before_stack_len;
1795 struct block *b;
1796 struct symbol *framefunc;
1797 LONGEST base_offset = 0;
1798
1799 b = block_for_pc (expr->scope);
1800
1801 if (!b)
1802 error (_("No block found for address"));
1803
1804 framefunc = block_linkage_function (b);
1805
1806 if (!framefunc)
1807 error (_("No function found for block"));
1808
1809 dwarf_expr_frame_base_1 (framefunc, expr->scope,
1810 &datastart, &datalen);
1811
1812 op_ptr = read_sleb128 (op_ptr, op_end, &offset);
1813 dwarf2_compile_expr_to_ax (expr, loc, arch, addr_size, datastart,
1814 datastart + datalen, per_cu);
1815
1816 if (offset != 0)
1817 {
1818 ax_const_l (expr, offset);
1819 ax_simple (expr, aop_add);
1820 }
1821
1822 loc->kind = axs_lvalue_memory;
1823 }
1824 break;
1825
1826 case DW_OP_dup:
1827 ax_simple (expr, aop_dup);
1828 break;
1829
1830 case DW_OP_drop:
1831 ax_simple (expr, aop_pop);
1832 break;
1833
1834 case DW_OP_pick:
1835 offset = *op_ptr++;
1836 ax_pick (expr, offset);
1837 break;
1838
1839 case DW_OP_swap:
1840 ax_simple (expr, aop_swap);
1841 break;
1842
1843 case DW_OP_over:
1844 ax_pick (expr, 1);
1845 break;
1846
1847 case DW_OP_rot:
1848 ax_simple (expr, aop_rot);
1849 break;
1850
1851 case DW_OP_deref:
1852 case DW_OP_deref_size:
1853 {
1854 int size;
1855
1856 if (op == DW_OP_deref_size)
1857 size = *op_ptr++;
1858 else
1859 size = addr_size;
1860
1861 switch (size)
1862 {
1863 case 8:
1864 ax_simple (expr, aop_ref8);
1865 break;
1866 case 16:
1867 ax_simple (expr, aop_ref16);
1868 break;
1869 case 32:
1870 ax_simple (expr, aop_ref32);
1871 break;
1872 case 64:
1873 ax_simple (expr, aop_ref64);
1874 break;
1875 default:
1876 /* Note that dwarf_stack_op_name will never return
1877 NULL here. */
1878 error (_("Unsupported size %d in %s"),
1879 size, dwarf_stack_op_name (op));
1880 }
1881 }
1882 break;
1883
1884 case DW_OP_abs:
1885 /* Sign extend the operand. */
1886 ax_ext (expr, addr_size_bits);
1887 ax_simple (expr, aop_dup);
1888 ax_const_l (expr, 0);
1889 ax_simple (expr, aop_less_signed);
1890 ax_simple (expr, aop_log_not);
1891 i = ax_goto (expr, aop_if_goto);
1892 /* We have to emit 0 - X. */
1893 ax_const_l (expr, 0);
1894 ax_simple (expr, aop_swap);
1895 ax_simple (expr, aop_sub);
1896 ax_label (expr, i, expr->len);
1897 break;
1898
1899 case DW_OP_neg:
1900 /* No need to sign extend here. */
1901 ax_const_l (expr, 0);
1902 ax_simple (expr, aop_swap);
1903 ax_simple (expr, aop_sub);
1904 break;
1905
1906 case DW_OP_not:
1907 /* Sign extend the operand. */
1908 ax_ext (expr, addr_size_bits);
1909 ax_simple (expr, aop_bit_not);
1910 break;
1911
1912 case DW_OP_plus_uconst:
1913 op_ptr = read_uleb128 (op_ptr, op_end, &reg);
1914 /* It would be really weird to emit `DW_OP_plus_uconst 0',
1915 but we micro-optimize anyhow. */
1916 if (reg != 0)
1917 {
1918 ax_const_l (expr, reg);
1919 ax_simple (expr, aop_add);
1920 }
1921 break;
1922
1923 case DW_OP_and:
1924 ax_simple (expr, aop_bit_and);
1925 break;
1926
1927 case DW_OP_div:
1928 /* Sign extend the operands. */
1929 ax_ext (expr, addr_size_bits);
1930 ax_simple (expr, aop_swap);
1931 ax_ext (expr, addr_size_bits);
1932 ax_simple (expr, aop_swap);
1933 ax_simple (expr, aop_div_signed);
1934 break;
1935
1936 case DW_OP_minus:
1937 ax_simple (expr, aop_sub);
1938 break;
1939
1940 case DW_OP_mod:
1941 ax_simple (expr, aop_rem_unsigned);
1942 break;
1943
1944 case DW_OP_mul:
1945 ax_simple (expr, aop_mul);
1946 break;
1947
1948 case DW_OP_or:
1949 ax_simple (expr, aop_bit_or);
1950 break;
1951
1952 case DW_OP_plus:
1953 ax_simple (expr, aop_add);
1954 break;
1955
1956 case DW_OP_shl:
1957 ax_simple (expr, aop_lsh);
1958 break;
1959
1960 case DW_OP_shr:
1961 ax_simple (expr, aop_rsh_unsigned);
1962 break;
1963
1964 case DW_OP_shra:
1965 ax_simple (expr, aop_rsh_signed);
1966 break;
1967
1968 case DW_OP_xor:
1969 ax_simple (expr, aop_bit_xor);
1970 break;
1971
1972 case DW_OP_le:
1973 /* Sign extend the operands. */
1974 ax_ext (expr, addr_size_bits);
1975 ax_simple (expr, aop_swap);
1976 ax_ext (expr, addr_size_bits);
1977 /* Note no swap here: A <= B is !(B < A). */
1978 ax_simple (expr, aop_less_signed);
1979 ax_simple (expr, aop_log_not);
1980 break;
1981
1982 case DW_OP_ge:
1983 /* Sign extend the operands. */
1984 ax_ext (expr, addr_size_bits);
1985 ax_simple (expr, aop_swap);
1986 ax_ext (expr, addr_size_bits);
1987 ax_simple (expr, aop_swap);
1988 /* A >= B is !(A < B). */
1989 ax_simple (expr, aop_less_signed);
1990 ax_simple (expr, aop_log_not);
1991 break;
1992
1993 case DW_OP_eq:
1994 /* Sign extend the operands. */
1995 ax_ext (expr, addr_size_bits);
1996 ax_simple (expr, aop_swap);
1997 ax_ext (expr, addr_size_bits);
1998 /* No need for a second swap here. */
1999 ax_simple (expr, aop_equal);
2000 break;
2001
2002 case DW_OP_lt:
2003 /* Sign extend the operands. */
2004 ax_ext (expr, addr_size_bits);
2005 ax_simple (expr, aop_swap);
2006 ax_ext (expr, addr_size_bits);
2007 ax_simple (expr, aop_swap);
2008 ax_simple (expr, aop_less_signed);
2009 break;
2010
2011 case DW_OP_gt:
2012 /* Sign extend the operands. */
2013 ax_ext (expr, addr_size_bits);
2014 ax_simple (expr, aop_swap);
2015 ax_ext (expr, addr_size_bits);
2016 /* Note no swap here: A > B is B < A. */
2017 ax_simple (expr, aop_less_signed);
2018 break;
2019
2020 case DW_OP_ne:
2021 /* Sign extend the operands. */
2022 ax_ext (expr, addr_size_bits);
2023 ax_simple (expr, aop_swap);
2024 ax_ext (expr, addr_size_bits);
2025 /* No need for a swap here. */
2026 ax_simple (expr, aop_equal);
2027 ax_simple (expr, aop_log_not);
2028 break;
2029
2030 case DW_OP_call_frame_cfa:
2031 dwarf2_compile_cfa_to_ax (expr, loc, arch, expr->scope, per_cu);
2032 loc->kind = axs_lvalue_memory;
2033 break;
2034
2035 case DW_OP_GNU_push_tls_address:
2036 unimplemented (op);
2037 break;
2038
2039 case DW_OP_skip:
2040 offset = extract_signed_integer (op_ptr, 2, byte_order);
2041 op_ptr += 2;
2042 i = ax_goto (expr, aop_goto);
2043 VEC_safe_push (int, dw_labels, op_ptr + offset - base);
2044 VEC_safe_push (int, patches, i);
2045 break;
2046
2047 case DW_OP_bra:
2048 offset = extract_signed_integer (op_ptr, 2, byte_order);
2049 op_ptr += 2;
2050 /* Zero extend the operand. */
2051 ax_zero_ext (expr, addr_size_bits);
2052 i = ax_goto (expr, aop_if_goto);
2053 VEC_safe_push (int, dw_labels, op_ptr + offset - base);
2054 VEC_safe_push (int, patches, i);
2055 break;
2056
2057 case DW_OP_nop:
2058 break;
2059
2060 case DW_OP_piece:
2061 case DW_OP_bit_piece:
2062 {
2063 ULONGEST size, offset;
2064
2065 if (op_ptr - 1 == previous_piece)
2066 error (_("Cannot translate empty pieces to agent expressions"));
2067 previous_piece = op_ptr - 1;
2068
2069 op_ptr = read_uleb128 (op_ptr, op_end, &size);
2070 if (op == DW_OP_piece)
2071 {
2072 size *= 8;
2073 offset = 0;
2074 }
2075 else
2076 op_ptr = read_uleb128 (op_ptr, op_end, &offset);
2077
2078 if (bits_collected + size > 8 * sizeof (LONGEST))
2079 error (_("Expression pieces exceed word size"));
2080
2081 /* Access the bits. */
2082 switch (loc->kind)
2083 {
2084 case axs_lvalue_register:
2085 ax_reg (expr, loc->u.reg);
2086 break;
2087
2088 case axs_lvalue_memory:
2089 /* Offset the pointer, if needed. */
2090 if (offset > 8)
2091 {
2092 ax_const_l (expr, offset / 8);
2093 ax_simple (expr, aop_add);
2094 offset %= 8;
2095 }
2096 access_memory (arch, expr, size);
2097 break;
2098 }
2099
2100 /* For a bits-big-endian target, shift up what we already
2101 have. For a bits-little-endian target, shift up the
2102 new data. Note that there is a potential bug here if
2103 the DWARF expression leaves multiple values on the
2104 stack. */
2105 if (bits_collected > 0)
2106 {
2107 if (bits_big_endian)
2108 {
2109 ax_simple (expr, aop_swap);
2110 ax_const_l (expr, size);
2111 ax_simple (expr, aop_lsh);
2112 /* We don't need a second swap here, because
2113 aop_bit_or is symmetric. */
2114 }
2115 else
2116 {
2117 ax_const_l (expr, size);
2118 ax_simple (expr, aop_lsh);
2119 }
2120 ax_simple (expr, aop_bit_or);
2121 }
2122
2123 bits_collected += size;
2124 loc->kind = axs_rvalue;
2125 }
2126 break;
2127
2128 case DW_OP_GNU_uninit:
2129 unimplemented (op);
2130
2131 case DW_OP_call2:
2132 case DW_OP_call4:
2133 {
2134 struct dwarf2_locexpr_baton block;
2135 int size = (op == DW_OP_call2 ? 2 : 4);
2136 struct cleanup *back_to;
2137
2138 uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
2139 op_ptr += size;
2140
2141 block = dwarf2_fetch_die_location_block (uoffset, per_cu,
2142 get_ax_pc, expr);
2143 back_to = make_cleanup (xfree, (void *) block.data);
2144
2145 /* DW_OP_call_ref is currently not supported. */
2146 gdb_assert (block.per_cu == per_cu);
2147
2148 dwarf2_compile_expr_to_ax (expr, loc, arch, addr_size,
2149 block.data, block.data + block.size,
2150 per_cu);
2151
2152 do_cleanups (back_to);
2153 }
2154 break;
2155
2156 case DW_OP_call_ref:
2157 unimplemented (op);
2158
2159 default:
2160 unimplemented (op);
2161 }
2162 }
2163
2164 /* Patch all the branches we emitted. */
2165 for (i = 0; i < VEC_length (int, patches); ++i)
2166 {
2167 int targ = offsets[VEC_index (int, dw_labels, i)];
2168 if (targ == -1)
2169 internal_error (__FILE__, __LINE__, _("invalid label"));
2170 ax_label (expr, VEC_index (int, patches, i), targ);
2171 }
2172
2173 do_cleanups (cleanups);
2174 }
2175
2176 \f
2177 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
2178 evaluator to calculate the location. */
2179 static struct value *
2180 locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
2181 {
2182 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2183 struct value *val;
2184
2185 val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
2186 dlbaton->size, dlbaton->per_cu);
2187
2188 return val;
2189 }
2190
2191 /* Return non-zero iff we need a frame to evaluate SYMBOL. */
2192 static int
2193 locexpr_read_needs_frame (struct symbol *symbol)
2194 {
2195 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2196
2197 return dwarf2_loc_desc_needs_frame (dlbaton->data, dlbaton->size,
2198 dlbaton->per_cu);
2199 }
2200
2201 /* Return true if DATA points to the end of a piece. END is one past
2202 the last byte in the expression. */
2203
2204 static int
2205 piece_end_p (const gdb_byte *data, const gdb_byte *end)
2206 {
2207 return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece;
2208 }
2209
2210 /* Helper for locexpr_describe_location_piece that finds the name of a
2211 DWARF register. */
2212
2213 static const char *
2214 locexpr_regname (struct gdbarch *gdbarch, int dwarf_regnum)
2215 {
2216 int regnum;
2217
2218 regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, dwarf_regnum);
2219 return gdbarch_register_name (gdbarch, regnum);
2220 }
2221
2222 /* Nicely describe a single piece of a location, returning an updated
2223 position in the bytecode sequence. This function cannot recognize
2224 all locations; if a location is not recognized, it simply returns
2225 DATA. */
2226
2227 static const gdb_byte *
2228 locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
2229 CORE_ADDR addr, struct objfile *objfile,
2230 const gdb_byte *data, const gdb_byte *end,
2231 unsigned int addr_size)
2232 {
2233 struct gdbarch *gdbarch = get_objfile_arch (objfile);
2234
2235 if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
2236 {
2237 fprintf_filtered (stream, _("a variable in $%s"),
2238 locexpr_regname (gdbarch, data[0] - DW_OP_reg0));
2239 data += 1;
2240 }
2241 else if (data[0] == DW_OP_regx)
2242 {
2243 ULONGEST reg;
2244
2245 data = read_uleb128 (data + 1, end, &reg);
2246 fprintf_filtered (stream, _("a variable in $%s"),
2247 locexpr_regname (gdbarch, reg));
2248 }
2249 else if (data[0] == DW_OP_fbreg)
2250 {
2251 struct block *b;
2252 struct symbol *framefunc;
2253 int frame_reg = 0;
2254 LONGEST frame_offset;
2255 const gdb_byte *base_data, *new_data, *save_data = data;
2256 size_t base_size;
2257 LONGEST base_offset = 0;
2258
2259 new_data = read_sleb128 (data + 1, end, &frame_offset);
2260 if (!piece_end_p (new_data, end))
2261 return data;
2262 data = new_data;
2263
2264 b = block_for_pc (addr);
2265
2266 if (!b)
2267 error (_("No block found for address for symbol \"%s\"."),
2268 SYMBOL_PRINT_NAME (symbol));
2269
2270 framefunc = block_linkage_function (b);
2271
2272 if (!framefunc)
2273 error (_("No function found for block for symbol \"%s\"."),
2274 SYMBOL_PRINT_NAME (symbol));
2275
2276 dwarf_expr_frame_base_1 (framefunc, addr, &base_data, &base_size);
2277
2278 if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
2279 {
2280 const gdb_byte *buf_end;
2281
2282 frame_reg = base_data[0] - DW_OP_breg0;
2283 buf_end = read_sleb128 (base_data + 1,
2284 base_data + base_size, &base_offset);
2285 if (buf_end != base_data + base_size)
2286 error (_("Unexpected opcode after "
2287 "DW_OP_breg%u for symbol \"%s\"."),
2288 frame_reg, SYMBOL_PRINT_NAME (symbol));
2289 }
2290 else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
2291 {
2292 /* The frame base is just the register, with no offset. */
2293 frame_reg = base_data[0] - DW_OP_reg0;
2294 base_offset = 0;
2295 }
2296 else
2297 {
2298 /* We don't know what to do with the frame base expression,
2299 so we can't trace this variable; give up. */
2300 return save_data;
2301 }
2302
2303 fprintf_filtered (stream,
2304 _("a variable at frame base reg $%s offset %s+%s"),
2305 locexpr_regname (gdbarch, frame_reg),
2306 plongest (base_offset), plongest (frame_offset));
2307 }
2308 else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
2309 && piece_end_p (data, end))
2310 {
2311 LONGEST offset;
2312
2313 data = read_sleb128 (data + 1, end, &offset);
2314
2315 fprintf_filtered (stream,
2316 _("a variable at offset %s from base reg $%s"),
2317 plongest (offset),
2318 locexpr_regname (gdbarch, data[0] - DW_OP_breg0));
2319 }
2320
2321 /* The location expression for a TLS variable looks like this (on a
2322 64-bit LE machine):
2323
2324 DW_AT_location : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
2325 (DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
2326
2327 0x3 is the encoding for DW_OP_addr, which has an operand as long
2328 as the size of an address on the target machine (here is 8
2329 bytes). Note that more recent version of GCC emit DW_OP_const4u
2330 or DW_OP_const8u, depending on address size, rather than
2331 DW_OP_addr. 0xe0 is the encoding for DW_OP_GNU_push_tls_address.
2332 The operand represents the offset at which the variable is within
2333 the thread local storage. */
2334
2335 else if (data + 1 + addr_size < end
2336 && (data[0] == DW_OP_addr
2337 || (addr_size == 4 && data[0] == DW_OP_const4u)
2338 || (addr_size == 8 && data[0] == DW_OP_const8u))
2339 && data[1 + addr_size] == DW_OP_GNU_push_tls_address
2340 && piece_end_p (data + 2 + addr_size, end))
2341 {
2342 ULONGEST offset;
2343 offset = extract_unsigned_integer (data + 1, addr_size,
2344 gdbarch_byte_order (gdbarch));
2345
2346 fprintf_filtered (stream,
2347 _("a thread-local variable at offset 0x%s "
2348 "in the thread-local storage for `%s'"),
2349 phex_nz (offset, addr_size), objfile->name);
2350
2351 data += 1 + addr_size + 1;
2352 }
2353 else if (data[0] >= DW_OP_lit0
2354 && data[0] <= DW_OP_lit31
2355 && data + 1 < end
2356 && data[1] == DW_OP_stack_value)
2357 {
2358 fprintf_filtered (stream, _("the constant %d"), data[0] - DW_OP_lit0);
2359 data += 2;
2360 }
2361
2362 return data;
2363 }
2364
2365 /* Disassemble an expression, stopping at the end of a piece or at the
2366 end of the expression. Returns a pointer to the next unread byte
2367 in the input expression. If ALL is nonzero, then this function
2368 will keep going until it reaches the end of the expression. */
2369
2370 static const gdb_byte *
2371 disassemble_dwarf_expression (struct ui_file *stream,
2372 struct gdbarch *arch, unsigned int addr_size,
2373 int offset_size,
2374 const gdb_byte *data, const gdb_byte *end,
2375 int all,
2376 struct dwarf2_per_cu_data *per_cu)
2377 {
2378 const gdb_byte *start = data;
2379
2380 fprintf_filtered (stream, _("a complex DWARF expression:\n"));
2381
2382 while (data < end
2383 && (all
2384 || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
2385 {
2386 enum dwarf_location_atom op = *data++;
2387 ULONGEST ul;
2388 LONGEST l;
2389 const char *name;
2390
2391 name = dwarf_stack_op_name (op);
2392
2393 if (!name)
2394 error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
2395 op, (long) (data - 1 - start));
2396 fprintf_filtered (stream, " % 4ld: %s", (long) (data - 1 - start), name);
2397
2398 switch (op)
2399 {
2400 case DW_OP_addr:
2401 ul = extract_unsigned_integer (data, addr_size,
2402 gdbarch_byte_order (arch));
2403 data += addr_size;
2404 fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
2405 break;
2406
2407 case DW_OP_const1u:
2408 ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch));
2409 data += 1;
2410 fprintf_filtered (stream, " %s", pulongest (ul));
2411 break;
2412 case DW_OP_const1s:
2413 l = extract_signed_integer (data, 1, gdbarch_byte_order (arch));
2414 data += 1;
2415 fprintf_filtered (stream, " %s", plongest (l));
2416 break;
2417 case DW_OP_const2u:
2418 ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
2419 data += 2;
2420 fprintf_filtered (stream, " %s", pulongest (ul));
2421 break;
2422 case DW_OP_const2s:
2423 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
2424 data += 2;
2425 fprintf_filtered (stream, " %s", plongest (l));
2426 break;
2427 case DW_OP_const4u:
2428 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
2429 data += 4;
2430 fprintf_filtered (stream, " %s", pulongest (ul));
2431 break;
2432 case DW_OP_const4s:
2433 l = extract_signed_integer (data, 4, gdbarch_byte_order (arch));
2434 data += 4;
2435 fprintf_filtered (stream, " %s", plongest (l));
2436 break;
2437 case DW_OP_const8u:
2438 ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch));
2439 data += 8;
2440 fprintf_filtered (stream, " %s", pulongest (ul));
2441 break;
2442 case DW_OP_const8s:
2443 l = extract_signed_integer (data, 8, gdbarch_byte_order (arch));
2444 data += 8;
2445 fprintf_filtered (stream, " %s", plongest (l));
2446 break;
2447 case DW_OP_constu:
2448 data = read_uleb128 (data, end, &ul);
2449 fprintf_filtered (stream, " %s", pulongest (ul));
2450 break;
2451 case DW_OP_consts:
2452 data = read_sleb128 (data, end, &l);
2453 fprintf_filtered (stream, " %s", plongest (l));
2454 break;
2455
2456 case DW_OP_reg0:
2457 case DW_OP_reg1:
2458 case DW_OP_reg2:
2459 case DW_OP_reg3:
2460 case DW_OP_reg4:
2461 case DW_OP_reg5:
2462 case DW_OP_reg6:
2463 case DW_OP_reg7:
2464 case DW_OP_reg8:
2465 case DW_OP_reg9:
2466 case DW_OP_reg10:
2467 case DW_OP_reg11:
2468 case DW_OP_reg12:
2469 case DW_OP_reg13:
2470 case DW_OP_reg14:
2471 case DW_OP_reg15:
2472 case DW_OP_reg16:
2473 case DW_OP_reg17:
2474 case DW_OP_reg18:
2475 case DW_OP_reg19:
2476 case DW_OP_reg20:
2477 case DW_OP_reg21:
2478 case DW_OP_reg22:
2479 case DW_OP_reg23:
2480 case DW_OP_reg24:
2481 case DW_OP_reg25:
2482 case DW_OP_reg26:
2483 case DW_OP_reg27:
2484 case DW_OP_reg28:
2485 case DW_OP_reg29:
2486 case DW_OP_reg30:
2487 case DW_OP_reg31:
2488 fprintf_filtered (stream, " [$%s]",
2489 locexpr_regname (arch, op - DW_OP_reg0));
2490 break;
2491
2492 case DW_OP_regx:
2493 data = read_uleb128 (data, end, &ul);
2494 fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
2495 locexpr_regname (arch, (int) ul));
2496 break;
2497
2498 case DW_OP_implicit_value:
2499 data = read_uleb128 (data, end, &ul);
2500 data += ul;
2501 fprintf_filtered (stream, " %s", pulongest (ul));
2502 break;
2503
2504 case DW_OP_breg0:
2505 case DW_OP_breg1:
2506 case DW_OP_breg2:
2507 case DW_OP_breg3:
2508 case DW_OP_breg4:
2509 case DW_OP_breg5:
2510 case DW_OP_breg6:
2511 case DW_OP_breg7:
2512 case DW_OP_breg8:
2513 case DW_OP_breg9:
2514 case DW_OP_breg10:
2515 case DW_OP_breg11:
2516 case DW_OP_breg12:
2517 case DW_OP_breg13:
2518 case DW_OP_breg14:
2519 case DW_OP_breg15:
2520 case DW_OP_breg16:
2521 case DW_OP_breg17:
2522 case DW_OP_breg18:
2523 case DW_OP_breg19:
2524 case DW_OP_breg20:
2525 case DW_OP_breg21:
2526 case DW_OP_breg22:
2527 case DW_OP_breg23:
2528 case DW_OP_breg24:
2529 case DW_OP_breg25:
2530 case DW_OP_breg26:
2531 case DW_OP_breg27:
2532 case DW_OP_breg28:
2533 case DW_OP_breg29:
2534 case DW_OP_breg30:
2535 case DW_OP_breg31:
2536 data = read_sleb128 (data, end, &l);
2537 fprintf_filtered (stream, " %s [$%s]", plongest (l),
2538 locexpr_regname (arch, op - DW_OP_breg0));
2539 break;
2540
2541 case DW_OP_bregx:
2542 data = read_uleb128 (data, end, &ul);
2543 data = read_sleb128 (data, end, &l);
2544 fprintf_filtered (stream, " register %s [$%s] offset %s",
2545 pulongest (ul),
2546 locexpr_regname (arch, (int) ul),
2547 plongest (l));
2548 break;
2549
2550 case DW_OP_fbreg:
2551 data = read_sleb128 (data, end, &l);
2552 fprintf_filtered (stream, " %s", plongest (l));
2553 break;
2554
2555 case DW_OP_xderef_size:
2556 case DW_OP_deref_size:
2557 case DW_OP_pick:
2558 fprintf_filtered (stream, " %d", *data);
2559 ++data;
2560 break;
2561
2562 case DW_OP_plus_uconst:
2563 data = read_uleb128 (data, end, &ul);
2564 fprintf_filtered (stream, " %s", pulongest (ul));
2565 break;
2566
2567 case DW_OP_skip:
2568 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
2569 data += 2;
2570 fprintf_filtered (stream, " to %ld",
2571 (long) (data + l - start));
2572 break;
2573
2574 case DW_OP_bra:
2575 l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
2576 data += 2;
2577 fprintf_filtered (stream, " %ld",
2578 (long) (data + l - start));
2579 break;
2580
2581 case DW_OP_call2:
2582 ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
2583 data += 2;
2584 fprintf_filtered (stream, " offset %s", phex_nz (ul, 2));
2585 break;
2586
2587 case DW_OP_call4:
2588 ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
2589 data += 4;
2590 fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
2591 break;
2592
2593 case DW_OP_call_ref:
2594 ul = extract_unsigned_integer (data, offset_size,
2595 gdbarch_byte_order (arch));
2596 data += offset_size;
2597 fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
2598 break;
2599
2600 case DW_OP_piece:
2601 data = read_uleb128 (data, end, &ul);
2602 fprintf_filtered (stream, " %s (bytes)", pulongest (ul));
2603 break;
2604
2605 case DW_OP_bit_piece:
2606 {
2607 ULONGEST offset;
2608
2609 data = read_uleb128 (data, end, &ul);
2610 data = read_uleb128 (data, end, &offset);
2611 fprintf_filtered (stream, " size %s offset %s (bits)",
2612 pulongest (ul), pulongest (offset));
2613 }
2614 break;
2615
2616 case DW_OP_GNU_implicit_pointer:
2617 {
2618 ul = extract_unsigned_integer (data, offset_size,
2619 gdbarch_byte_order (arch));
2620 data += offset_size;
2621
2622 data = read_sleb128 (data, end, &l);
2623
2624 fprintf_filtered (stream, " DIE %s offset %s",
2625 phex_nz (ul, offset_size),
2626 plongest (l));
2627 }
2628 break;
2629
2630 case DW_OP_GNU_deref_type:
2631 {
2632 int addr_size = *data++;
2633 ULONGEST offset;
2634 struct type *type;
2635
2636 data = read_uleb128 (data, end, &offset);
2637 type = dwarf2_get_die_type (offset, per_cu);
2638 fprintf_filtered (stream, "<");
2639 type_print (type, "", stream, -1);
2640 fprintf_filtered (stream, " [0x%s]> %d", phex_nz (offset, 0),
2641 addr_size);
2642 }
2643 break;
2644
2645 case DW_OP_GNU_const_type:
2646 {
2647 ULONGEST type_die;
2648 struct type *type;
2649
2650 data = read_uleb128 (data, end, &type_die);
2651 type = dwarf2_get_die_type (type_die, per_cu);
2652 fprintf_filtered (stream, "<");
2653 type_print (type, "", stream, -1);
2654 fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die, 0));
2655 }
2656 break;
2657
2658 case DW_OP_GNU_regval_type:
2659 {
2660 ULONGEST type_die, reg;
2661 struct type *type;
2662
2663 data = read_uleb128 (data, end, &reg);
2664 data = read_uleb128 (data, end, &type_die);
2665
2666 type = dwarf2_get_die_type (type_die, per_cu);
2667 fprintf_filtered (stream, "<");
2668 type_print (type, "", stream, -1);
2669 fprintf_filtered (stream, " [0x%s]> [$%s]", phex_nz (type_die, 0),
2670 locexpr_regname (arch, reg));
2671 }
2672 break;
2673
2674 case DW_OP_GNU_convert:
2675 case DW_OP_GNU_reinterpret:
2676 {
2677 ULONGEST type_die;
2678
2679 data = read_uleb128 (data, end, &type_die);
2680
2681 if (type_die == 0)
2682 fprintf_filtered (stream, "<0>");
2683 else
2684 {
2685 struct type *type;
2686
2687 type = dwarf2_get_die_type (type_die, per_cu);
2688 fprintf_filtered (stream, "<");
2689 type_print (type, "", stream, -1);
2690 fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die, 0));
2691 }
2692 }
2693 break;
2694 }
2695
2696 fprintf_filtered (stream, "\n");
2697 }
2698
2699 return data;
2700 }
2701
2702 /* Describe a single location, which may in turn consist of multiple
2703 pieces. */
2704
2705 static void
2706 locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
2707 struct ui_file *stream,
2708 const gdb_byte *data, int size,
2709 struct objfile *objfile, unsigned int addr_size,
2710 int offset_size, struct dwarf2_per_cu_data *per_cu)
2711 {
2712 const gdb_byte *end = data + size;
2713 int first_piece = 1, bad = 0;
2714
2715 while (data < end)
2716 {
2717 const gdb_byte *here = data;
2718 int disassemble = 1;
2719
2720 if (first_piece)
2721 first_piece = 0;
2722 else
2723 fprintf_filtered (stream, _(", and "));
2724
2725 if (!dwarf2_always_disassemble)
2726 {
2727 data = locexpr_describe_location_piece (symbol, stream,
2728 addr, objfile,
2729 data, end, addr_size);
2730 /* If we printed anything, or if we have an empty piece,
2731 then don't disassemble. */
2732 if (data != here
2733 || data[0] == DW_OP_piece
2734 || data[0] == DW_OP_bit_piece)
2735 disassemble = 0;
2736 }
2737 if (disassemble)
2738 data = disassemble_dwarf_expression (stream,
2739 get_objfile_arch (objfile),
2740 addr_size, offset_size, data, end,
2741 dwarf2_always_disassemble,
2742 per_cu);
2743
2744 if (data < end)
2745 {
2746 int empty = data == here;
2747
2748 if (disassemble)
2749 fprintf_filtered (stream, " ");
2750 if (data[0] == DW_OP_piece)
2751 {
2752 ULONGEST bytes;
2753
2754 data = read_uleb128 (data + 1, end, &bytes);
2755
2756 if (empty)
2757 fprintf_filtered (stream, _("an empty %s-byte piece"),
2758 pulongest (bytes));
2759 else
2760 fprintf_filtered (stream, _(" [%s-byte piece]"),
2761 pulongest (bytes));
2762 }
2763 else if (data[0] == DW_OP_bit_piece)
2764 {
2765 ULONGEST bits, offset;
2766
2767 data = read_uleb128 (data + 1, end, &bits);
2768 data = read_uleb128 (data, end, &offset);
2769
2770 if (empty)
2771 fprintf_filtered (stream,
2772 _("an empty %s-bit piece"),
2773 pulongest (bits));
2774 else
2775 fprintf_filtered (stream,
2776 _(" [%s-bit piece, offset %s bits]"),
2777 pulongest (bits), pulongest (offset));
2778 }
2779 else
2780 {
2781 bad = 1;
2782 break;
2783 }
2784 }
2785 }
2786
2787 if (bad || data > end)
2788 error (_("Corrupted DWARF2 expression for \"%s\"."),
2789 SYMBOL_PRINT_NAME (symbol));
2790 }
2791
2792 /* Print a natural-language description of SYMBOL to STREAM. This
2793 version is for a symbol with a single location. */
2794
2795 static void
2796 locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
2797 struct ui_file *stream)
2798 {
2799 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2800 struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
2801 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2802 int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
2803
2804 locexpr_describe_location_1 (symbol, addr, stream,
2805 dlbaton->data, dlbaton->size,
2806 objfile, addr_size, offset_size,
2807 dlbaton->per_cu);
2808 }
2809
2810 /* Describe the location of SYMBOL as an agent value in VALUE, generating
2811 any necessary bytecode in AX. */
2812
2813 static void
2814 locexpr_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
2815 struct agent_expr *ax, struct axs_value *value)
2816 {
2817 struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2818 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2819
2820 if (dlbaton->data == NULL || dlbaton->size == 0)
2821 value->optimized_out = 1;
2822 else
2823 dwarf2_compile_expr_to_ax (ax, value, gdbarch, addr_size,
2824 dlbaton->data, dlbaton->data + dlbaton->size,
2825 dlbaton->per_cu);
2826 }
2827
2828 /* The set of location functions used with the DWARF-2 expression
2829 evaluator. */
2830 const struct symbol_computed_ops dwarf2_locexpr_funcs = {
2831 locexpr_read_variable,
2832 locexpr_read_needs_frame,
2833 locexpr_describe_location,
2834 locexpr_tracepoint_var_ref
2835 };
2836
2837
2838 /* Wrapper functions for location lists. These generally find
2839 the appropriate location expression and call something above. */
2840
2841 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
2842 evaluator to calculate the location. */
2843 static struct value *
2844 loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
2845 {
2846 struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2847 struct value *val;
2848 const gdb_byte *data;
2849 size_t size;
2850 CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0;
2851
2852 data = dwarf2_find_location_expression (dlbaton, &size, pc);
2853 if (data == NULL)
2854 val = allocate_optimized_out_value (SYMBOL_TYPE (symbol));
2855 else
2856 val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size,
2857 dlbaton->per_cu);
2858
2859 return val;
2860 }
2861
2862 /* Return non-zero iff we need a frame to evaluate SYMBOL. */
2863 static int
2864 loclist_read_needs_frame (struct symbol *symbol)
2865 {
2866 /* If there's a location list, then assume we need to have a frame
2867 to choose the appropriate location expression. With tracking of
2868 global variables this is not necessarily true, but such tracking
2869 is disabled in GCC at the moment until we figure out how to
2870 represent it. */
2871
2872 return 1;
2873 }
2874
2875 /* Print a natural-language description of SYMBOL to STREAM. This
2876 version applies when there is a list of different locations, each
2877 with a specified address range. */
2878
2879 static void
2880 loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
2881 struct ui_file *stream)
2882 {
2883 struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2884 CORE_ADDR low, high;
2885 const gdb_byte *loc_ptr, *buf_end;
2886 int length, first = 1;
2887 struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
2888 struct gdbarch *gdbarch = get_objfile_arch (objfile);
2889 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2890 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2891 int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
2892 int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
2893 CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
2894 /* Adjust base_address for relocatable objects. */
2895 CORE_ADDR base_offset = dwarf2_per_cu_text_offset (dlbaton->per_cu);
2896 CORE_ADDR base_address = dlbaton->base_address + base_offset;
2897
2898 loc_ptr = dlbaton->data;
2899 buf_end = dlbaton->data + dlbaton->size;
2900
2901 fprintf_filtered (stream, _("multi-location:\n"));
2902
2903 /* Iterate through locations until we run out. */
2904 while (1)
2905 {
2906 if (buf_end - loc_ptr < 2 * addr_size)
2907 error (_("Corrupted DWARF expression for symbol \"%s\"."),
2908 SYMBOL_PRINT_NAME (symbol));
2909
2910 if (signed_addr_p)
2911 low = extract_signed_integer (loc_ptr, addr_size, byte_order);
2912 else
2913 low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
2914 loc_ptr += addr_size;
2915
2916 if (signed_addr_p)
2917 high = extract_signed_integer (loc_ptr, addr_size, byte_order);
2918 else
2919 high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
2920 loc_ptr += addr_size;
2921
2922 /* A base-address-selection entry. */
2923 if ((low & base_mask) == base_mask)
2924 {
2925 base_address = high + base_offset;
2926 fprintf_filtered (stream, _(" Base address %s"),
2927 paddress (gdbarch, base_address));
2928 continue;
2929 }
2930
2931 /* An end-of-list entry. */
2932 if (low == 0 && high == 0)
2933 break;
2934
2935 /* Otherwise, a location expression entry. */
2936 low += base_address;
2937 high += base_address;
2938
2939 length = extract_unsigned_integer (loc_ptr, 2, byte_order);
2940 loc_ptr += 2;
2941
2942 /* (It would improve readability to print only the minimum
2943 necessary digits of the second number of the range.) */
2944 fprintf_filtered (stream, _(" Range %s-%s: "),
2945 paddress (gdbarch, low), paddress (gdbarch, high));
2946
2947 /* Now describe this particular location. */
2948 locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
2949 objfile, addr_size, offset_size,
2950 dlbaton->per_cu);
2951
2952 fprintf_filtered (stream, "\n");
2953
2954 loc_ptr += length;
2955 }
2956 }
2957
2958 /* Describe the location of SYMBOL as an agent value in VALUE, generating
2959 any necessary bytecode in AX. */
2960 static void
2961 loclist_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
2962 struct agent_expr *ax, struct axs_value *value)
2963 {
2964 struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
2965 const gdb_byte *data;
2966 size_t size;
2967 unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
2968
2969 data = dwarf2_find_location_expression (dlbaton, &size, ax->scope);
2970 if (data == NULL || size == 0)
2971 value->optimized_out = 1;
2972 else
2973 dwarf2_compile_expr_to_ax (ax, value, gdbarch, addr_size, data, data + size,
2974 dlbaton->per_cu);
2975 }
2976
2977 /* The set of location functions used with the DWARF-2 expression
2978 evaluator and location lists. */
2979 const struct symbol_computed_ops dwarf2_loclist_funcs = {
2980 loclist_read_variable,
2981 loclist_read_needs_frame,
2982 loclist_describe_location,
2983 loclist_tracepoint_var_ref
2984 };
This page took 0.094498 seconds and 4 git commands to generate.