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