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