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