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