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