dwarf2read.c: Make dir_index and file_name_index strong typedefs
[deliverable/binutils-gdb.git] / gdb / dwarf2expr.c
CommitLineData
852483bc
MK
1/* DWARF 2 Expression Evaluator.
2
61baf725 3 Copyright (C) 2001-2017 Free Software Foundation, Inc.
852483bc 4
4c2df51b
DJ
5 Contributed by Daniel Berlin (dan@dberlin.org)
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
4c2df51b
DJ
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
4c2df51b
DJ
21
22#include "defs.h"
23#include "symtab.h"
24#include "gdbtypes.h"
25#include "value.h"
26#include "gdbcore.h"
fa8f86ff 27#include "dwarf2.h"
4c2df51b 28#include "dwarf2expr.h"
0fde2c53 29#include "dwarf2loc.h"
4c2df51b 30
8a9b8146
TT
31/* Cookie for gdbarch data. */
32
33static struct gdbarch_data *dwarf_arch_cookie;
34
35/* This holds gdbarch-specific types used by the DWARF expression
36 evaluator. See comments in execute_stack_op. */
37
38struct dwarf_gdbarch_types
39{
40 struct type *dw_types[3];
41};
42
43/* Allocate and fill in dwarf_gdbarch_types for an arch. */
44
45static void *
46dwarf_gdbarch_types_init (struct gdbarch *gdbarch)
47{
48 struct dwarf_gdbarch_types *types
49 = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct dwarf_gdbarch_types);
50
51 /* The types themselves are lazily initialized. */
52
53 return types;
54}
55
56/* Return the type used for DWARF operations where the type is
57 unspecified in the DWARF spec. Only certain sizes are
58 supported. */
59
595d2e30
TT
60struct type *
61dwarf_expr_context::address_type () const
8a9b8146 62{
9a3c8263 63 struct dwarf_gdbarch_types *types
595d2e30 64 = (struct dwarf_gdbarch_types *) gdbarch_data (this->gdbarch,
9a3c8263 65 dwarf_arch_cookie);
8a9b8146
TT
66 int ndx;
67
595d2e30 68 if (this->addr_size == 2)
8a9b8146 69 ndx = 0;
595d2e30 70 else if (this->addr_size == 4)
8a9b8146 71 ndx = 1;
595d2e30 72 else if (this->addr_size == 8)
8a9b8146
TT
73 ndx = 2;
74 else
75 error (_("Unsupported address size in DWARF expressions: %d bits"),
595d2e30 76 8 * this->addr_size);
8a9b8146
TT
77
78 if (types->dw_types[ndx] == NULL)
79 types->dw_types[ndx]
595d2e30
TT
80 = arch_integer_type (this->gdbarch,
81 8 * this->addr_size,
8a9b8146
TT
82 0, "<signed DWARF address type>");
83
84 return types->dw_types[ndx];
85}
86
4c2df51b
DJ
87/* Create a new context for the expression evaluator. */
88
718b9626
TT
89dwarf_expr_context::dwarf_expr_context ()
90: stack (NULL),
91 stack_len (0),
92 stack_allocated (10),
93 gdbarch (NULL),
94 addr_size (0),
95 ref_addr_size (0),
96 offset (0),
97 recursion_depth (0),
98 max_recursion_depth (0x100),
99 location (DWARF_VALUE_MEMORY),
100 len (0),
101 data (NULL),
102 initialized (0),
103 num_pieces (0),
104 pieces (NULL)
4c2df51b 105{
718b9626 106 this->stack = XNEWVEC (struct dwarf_stack_value, this->stack_allocated);
4c2df51b
DJ
107}
108
718b9626 109/* Clean up a dwarf_expr_context. */
4c2df51b 110
718b9626 111dwarf_expr_context::~dwarf_expr_context ()
4c2df51b 112{
718b9626
TT
113 xfree (this->stack);
114 xfree (this->pieces);
4a227398
TT
115}
116
595d2e30 117/* Expand the memory allocated stack to contain at least
4c2df51b
DJ
118 NEED more elements than are currently used. */
119
595d2e30
TT
120void
121dwarf_expr_context::grow_stack (size_t need)
4c2df51b 122{
595d2e30 123 if (this->stack_len + need > this->stack_allocated)
4c2df51b 124 {
595d2e30 125 size_t newlen = this->stack_len + need + 10;
9a619af0 126
595d2e30
TT
127 this->stack = XRESIZEVEC (struct dwarf_stack_value, this->stack, newlen);
128 this->stack_allocated = newlen;
4c2df51b
DJ
129 }
130}
131
595d2e30 132/* Push VALUE onto the stack. */
4c2df51b 133
595d2e30
TT
134void
135dwarf_expr_context::push (struct value *value, int in_stack_memory)
4c2df51b 136{
44353522
DE
137 struct dwarf_stack_value *v;
138
595d2e30
TT
139 grow_stack (1);
140 v = &this->stack[this->stack_len++];
44353522
DE
141 v->value = value;
142 v->in_stack_memory = in_stack_memory;
4c2df51b
DJ
143}
144
595d2e30 145/* Push VALUE onto the stack. */
4c2df51b
DJ
146
147void
595d2e30 148dwarf_expr_context::push_address (CORE_ADDR value, int in_stack_memory)
8a9b8146 149{
595d2e30 150 push (value_from_ulongest (address_type (), value), in_stack_memory);
8a9b8146
TT
151}
152
595d2e30 153/* Pop the top item off of the stack. */
8a9b8146 154
595d2e30
TT
155void
156dwarf_expr_context::pop ()
4c2df51b 157{
595d2e30 158 if (this->stack_len <= 0)
8a3fe4f8 159 error (_("dwarf expression stack underflow"));
595d2e30 160 this->stack_len--;
4c2df51b
DJ
161}
162
595d2e30 163/* Retrieve the N'th item on the stack. */
4c2df51b 164
8a9b8146 165struct value *
595d2e30 166dwarf_expr_context::fetch (int n)
4c2df51b 167{
595d2e30 168 if (this->stack_len <= n)
3e43a32a
MS
169 error (_("Asked for position %d of stack, "
170 "stack only has %d elements on it."),
595d2e30
TT
171 n, this->stack_len);
172 return this->stack[this->stack_len - (1 + n)].value;
8a9b8146
TT
173}
174
175/* Require that TYPE be an integral type; throw an exception if not. */
44353522 176
8a9b8146
TT
177static void
178dwarf_require_integral (struct type *type)
179{
180 if (TYPE_CODE (type) != TYPE_CODE_INT
181 && TYPE_CODE (type) != TYPE_CODE_CHAR
182 && TYPE_CODE (type) != TYPE_CODE_BOOL)
183 error (_("integral type expected in DWARF expression"));
184}
185
186/* Return the unsigned form of TYPE. TYPE is necessarily an integral
187 type. */
188
189static struct type *
190get_unsigned_type (struct gdbarch *gdbarch, struct type *type)
191{
192 switch (TYPE_LENGTH (type))
193 {
194 case 1:
195 return builtin_type (gdbarch)->builtin_uint8;
196 case 2:
197 return builtin_type (gdbarch)->builtin_uint16;
198 case 4:
199 return builtin_type (gdbarch)->builtin_uint32;
200 case 8:
201 return builtin_type (gdbarch)->builtin_uint64;
202 default:
203 error (_("no unsigned variant found for type, while evaluating "
204 "DWARF expression"));
205 }
44353522
DE
206}
207
8ddd9a20
TT
208/* Return the signed form of TYPE. TYPE is necessarily an integral
209 type. */
210
211static struct type *
212get_signed_type (struct gdbarch *gdbarch, struct type *type)
213{
214 switch (TYPE_LENGTH (type))
215 {
216 case 1:
217 return builtin_type (gdbarch)->builtin_int8;
218 case 2:
219 return builtin_type (gdbarch)->builtin_int16;
220 case 4:
221 return builtin_type (gdbarch)->builtin_int32;
222 case 8:
223 return builtin_type (gdbarch)->builtin_int64;
224 default:
225 error (_("no signed variant found for type, while evaluating "
226 "DWARF expression"));
227 }
228}
229
595d2e30 230/* Retrieve the N'th item on the stack, converted to an address. */
f2c7657e
UW
231
232CORE_ADDR
595d2e30 233dwarf_expr_context::fetch_address (int n)
f2c7657e 234{
595d2e30
TT
235 struct value *result_val = fetch (n);
236 enum bfd_endian byte_order = gdbarch_byte_order (this->gdbarch);
8a9b8146
TT
237 ULONGEST result;
238
239 dwarf_require_integral (value_type (result_val));
240 result = extract_unsigned_integer (value_contents (result_val),
241 TYPE_LENGTH (value_type (result_val)),
242 byte_order);
f2c7657e
UW
243
244 /* For most architectures, calling extract_unsigned_integer() alone
245 is sufficient for extracting an address. However, some
246 architectures (e.g. MIPS) use signed addresses and using
247 extract_unsigned_integer() will not produce a correct
248 result. Make sure we invoke gdbarch_integer_to_address()
249 for those architectures which require it. */
595d2e30 250 if (gdbarch_integer_to_address_p (this->gdbarch))
f2c7657e 251 {
595d2e30
TT
252 gdb_byte *buf = (gdb_byte *) alloca (this->addr_size);
253 struct type *int_type = get_unsigned_type (this->gdbarch,
8a9b8146 254 value_type (result_val));
f2c7657e 255
595d2e30
TT
256 store_unsigned_integer (buf, this->addr_size, byte_order, result);
257 return gdbarch_integer_to_address (this->gdbarch, int_type, buf);
f2c7657e
UW
258 }
259
260 return (CORE_ADDR) result;
261}
262
595d2e30 263/* Retrieve the in_stack_memory flag of the N'th item on the stack. */
44353522
DE
264
265int
595d2e30 266dwarf_expr_context::fetch_in_stack_memory (int n)
44353522 267{
595d2e30 268 if (this->stack_len <= n)
3e43a32a
MS
269 error (_("Asked for position %d of stack, "
270 "stack only has %d elements on it."),
595d2e30
TT
271 n, this->stack_len);
272 return this->stack[this->stack_len - (1 + n)].in_stack_memory;
4c2df51b
DJ
273}
274
cb826367
TT
275/* Return true if the expression stack is empty. */
276
595d2e30
TT
277int
278dwarf_expr_context::stack_empty_p () const
cb826367 279{
595d2e30 280 return this->stack_len == 0;
cb826367
TT
281}
282
595d2e30
TT
283/* Add a new piece to the dwarf_expr_context's piece list. */
284void
285dwarf_expr_context::add_piece (ULONGEST size, ULONGEST offset)
87808bd6
JB
286{
287 struct dwarf_expr_piece *p;
288
595d2e30 289 this->num_pieces++;
87808bd6 290
595d2e30
TT
291 this->pieces
292 = XRESIZEVEC (struct dwarf_expr_piece, this->pieces, this->num_pieces);
87808bd6 293
595d2e30
TT
294 p = &this->pieces[this->num_pieces - 1];
295 p->location = this->location;
87808bd6 296 p->size = size;
d3b1e874
TT
297 p->offset = offset;
298
cec03d70
TT
299 if (p->location == DWARF_VALUE_LITERAL)
300 {
595d2e30
TT
301 p->v.literal.data = this->data;
302 p->v.literal.length = this->len;
cec03d70 303 }
595d2e30 304 else if (stack_empty_p ())
cb826367
TT
305 {
306 p->location = DWARF_VALUE_OPTIMIZED_OUT;
307 /* Also reset the context's location, for our callers. This is
308 a somewhat strange approach, but this lets us avoid setting
309 the location to DWARF_VALUE_MEMORY in all the individual
310 cases in the evaluator. */
595d2e30 311 this->location = DWARF_VALUE_OPTIMIZED_OUT;
cb826367 312 }
f2c7657e
UW
313 else if (p->location == DWARF_VALUE_MEMORY)
314 {
595d2e30
TT
315 p->v.mem.addr = fetch_address (0);
316 p->v.mem.in_stack_memory = fetch_in_stack_memory (0);
f2c7657e 317 }
8cf6f0b1
TT
318 else if (p->location == DWARF_VALUE_IMPLICIT_POINTER)
319 {
595d2e30
TT
320 p->v.ptr.die.sect_off = this->len;
321 p->v.ptr.offset = value_as_long (fetch (0));
8cf6f0b1 322 }
8a9b8146 323 else if (p->location == DWARF_VALUE_REGISTER)
595d2e30 324 p->v.regno = value_as_long (fetch (0));
cec03d70 325 else
44353522 326 {
595d2e30 327 p->v.value = fetch (0);
44353522 328 }
87808bd6
JB
329}
330
595d2e30 331/* Evaluate the expression at ADDR (LEN bytes long). */
4c2df51b
DJ
332
333void
595d2e30 334dwarf_expr_context::eval (const gdb_byte *addr, size_t len)
4c2df51b 335{
595d2e30 336 int old_recursion_depth = this->recursion_depth;
1e3a102a 337
595d2e30 338 execute_stack_op (addr, addr + len);
1e3a102a 339
595d2e30 340 /* RECURSION_DEPTH becomes invalid if an exception was thrown here. */
1e3a102a 341
595d2e30 342 gdb_assert (this->recursion_depth == old_recursion_depth);
4c2df51b
DJ
343}
344
f664829e 345/* Helper to read a uleb128 value or throw an error. */
4c2df51b 346
0d45f56e 347const gdb_byte *
f664829e 348safe_read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
9fccedf7 349 uint64_t *r)
4c2df51b 350{
f664829e
DE
351 buf = gdb_read_uleb128 (buf, buf_end, r);
352 if (buf == NULL)
353 error (_("DWARF expression error: ran off end of buffer reading uleb128 value"));
4c2df51b
DJ
354 return buf;
355}
356
f664829e 357/* Helper to read a sleb128 value or throw an error. */
4c2df51b 358
0d45f56e 359const gdb_byte *
f664829e 360safe_read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
9fccedf7 361 int64_t *r)
4c2df51b 362{
f664829e
DE
363 buf = gdb_read_sleb128 (buf, buf_end, r);
364 if (buf == NULL)
365 error (_("DWARF expression error: ran off end of buffer reading sleb128 value"));
366 return buf;
367}
4c2df51b 368
f664829e
DE
369const gdb_byte *
370safe_skip_leb128 (const gdb_byte *buf, const gdb_byte *buf_end)
371{
372 buf = gdb_skip_leb128 (buf, buf_end);
373 if (buf == NULL)
374 error (_("DWARF expression error: ran off end of buffer reading leb128 value"));
4c2df51b
DJ
375 return buf;
376}
4c2df51b 377\f
cec03d70
TT
378
379/* Check that the current operator is either at the end of an
f206f69c
AA
380 expression, or that it is followed by a composition operator or by
381 DW_OP_GNU_uninit (which should terminate the expression). */
cec03d70 382
3cf03773
TT
383void
384dwarf_expr_require_composition (const gdb_byte *op_ptr, const gdb_byte *op_end,
385 const char *op_name)
cec03d70 386{
f206f69c
AA
387 if (op_ptr != op_end && *op_ptr != DW_OP_piece && *op_ptr != DW_OP_bit_piece
388 && *op_ptr != DW_OP_GNU_uninit)
cec03d70 389 error (_("DWARF-2 expression error: `%s' operations must be "
64b9b334 390 "used either alone or in conjunction with DW_OP_piece "
cec03d70
TT
391 "or DW_OP_bit_piece."),
392 op_name);
393}
394
8a9b8146
TT
395/* Return true iff the types T1 and T2 are "the same". This only does
396 checks that might reasonably be needed to compare DWARF base
397 types. */
398
399static int
400base_types_equal_p (struct type *t1, struct type *t2)
401{
402 if (TYPE_CODE (t1) != TYPE_CODE (t2))
403 return 0;
404 if (TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2))
405 return 0;
406 return TYPE_LENGTH (t1) == TYPE_LENGTH (t2);
407}
408
8e3b41a9
JK
409/* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_reg* return the
410 DWARF register number. Otherwise return -1. */
411
412int
413dwarf_block_to_dwarf_reg (const gdb_byte *buf, const gdb_byte *buf_end)
414{
9fccedf7 415 uint64_t dwarf_reg;
8e3b41a9
JK
416
417 if (buf_end <= buf)
418 return -1;
419 if (*buf >= DW_OP_reg0 && *buf <= DW_OP_reg31)
420 {
421 if (buf_end - buf != 1)
422 return -1;
423 return *buf - DW_OP_reg0;
424 }
425
216f72a1 426 if (*buf == DW_OP_regval_type || *buf == DW_OP_GNU_regval_type)
8e3b41a9
JK
427 {
428 buf++;
f664829e
DE
429 buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
430 if (buf == NULL)
431 return -1;
432 buf = gdb_skip_leb128 (buf, buf_end);
433 if (buf == NULL)
434 return -1;
8e3b41a9
JK
435 }
436 else if (*buf == DW_OP_regx)
437 {
438 buf++;
f664829e
DE
439 buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
440 if (buf == NULL)
441 return -1;
8e3b41a9
JK
442 }
443 else
444 return -1;
445 if (buf != buf_end || (int) dwarf_reg != dwarf_reg)
446 return -1;
447 return dwarf_reg;
448}
449
a471c594
JK
450/* If <BUF..BUF_END] contains DW_FORM_block* with just DW_OP_breg*(0) and
451 DW_OP_deref* return the DWARF register number. Otherwise return -1.
452 DEREF_SIZE_RETURN contains -1 for DW_OP_deref; otherwise it contains the
453 size from DW_OP_deref_size. */
454
455int
456dwarf_block_to_dwarf_reg_deref (const gdb_byte *buf, const gdb_byte *buf_end,
457 CORE_ADDR *deref_size_return)
458{
9fccedf7
DE
459 uint64_t dwarf_reg;
460 int64_t offset;
a471c594
JK
461
462 if (buf_end <= buf)
463 return -1;
f664829e 464
a471c594
JK
465 if (*buf >= DW_OP_breg0 && *buf <= DW_OP_breg31)
466 {
467 dwarf_reg = *buf - DW_OP_breg0;
468 buf++;
f664829e
DE
469 if (buf >= buf_end)
470 return -1;
a471c594
JK
471 }
472 else if (*buf == DW_OP_bregx)
473 {
474 buf++;
f664829e
DE
475 buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
476 if (buf == NULL)
477 return -1;
a471c594
JK
478 if ((int) dwarf_reg != dwarf_reg)
479 return -1;
480 }
481 else
482 return -1;
483
f664829e
DE
484 buf = gdb_read_sleb128 (buf, buf_end, &offset);
485 if (buf == NULL)
a471c594 486 return -1;
f664829e 487 if (offset != 0)
a471c594
JK
488 return -1;
489
490 if (*buf == DW_OP_deref)
491 {
492 buf++;
493 *deref_size_return = -1;
494 }
495 else if (*buf == DW_OP_deref_size)
496 {
497 buf++;
498 if (buf >= buf_end)
499 return -1;
500 *deref_size_return = *buf++;
501 }
502 else
503 return -1;
504
505 if (buf != buf_end)
506 return -1;
507
508 return dwarf_reg;
509}
510
e18b2753
JK
511/* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_fbreg(X) fill
512 in FB_OFFSET_RETURN with the X offset and return 1. Otherwise return 0. */
513
514int
515dwarf_block_to_fb_offset (const gdb_byte *buf, const gdb_byte *buf_end,
516 CORE_ADDR *fb_offset_return)
517{
9fccedf7 518 int64_t fb_offset;
e18b2753
JK
519
520 if (buf_end <= buf)
521 return 0;
522
523 if (*buf != DW_OP_fbreg)
524 return 0;
525 buf++;
526
f664829e
DE
527 buf = gdb_read_sleb128 (buf, buf_end, &fb_offset);
528 if (buf == NULL)
529 return 0;
e18b2753
JK
530 *fb_offset_return = fb_offset;
531 if (buf != buf_end || fb_offset != (LONGEST) *fb_offset_return)
532 return 0;
533
534 return 1;
535}
536
537/* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_bregSP(X) fill
538 in SP_OFFSET_RETURN with the X offset and return 1. Otherwise return 0.
539 The matched SP register number depends on GDBARCH. */
540
541int
542dwarf_block_to_sp_offset (struct gdbarch *gdbarch, const gdb_byte *buf,
543 const gdb_byte *buf_end, CORE_ADDR *sp_offset_return)
544{
9fccedf7
DE
545 uint64_t dwarf_reg;
546 int64_t sp_offset;
e18b2753
JK
547
548 if (buf_end <= buf)
549 return 0;
550 if (*buf >= DW_OP_breg0 && *buf <= DW_OP_breg31)
551 {
552 dwarf_reg = *buf - DW_OP_breg0;
553 buf++;
554 }
555 else
556 {
557 if (*buf != DW_OP_bregx)
558 return 0;
559 buf++;
f664829e
DE
560 buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
561 if (buf == NULL)
562 return 0;
e18b2753
JK
563 }
564
0fde2c53 565 if (dwarf_reg_to_regnum (gdbarch, dwarf_reg)
e18b2753
JK
566 != gdbarch_sp_regnum (gdbarch))
567 return 0;
568
f664829e
DE
569 buf = gdb_read_sleb128 (buf, buf_end, &sp_offset);
570 if (buf == NULL)
571 return 0;
e18b2753
JK
572 *sp_offset_return = sp_offset;
573 if (buf != buf_end || sp_offset != (LONGEST) *sp_offset_return)
574 return 0;
575
576 return 1;
577}
578
595d2e30
TT
579/* The engine for the expression evaluator. Using the context in this
580 object, evaluate the expression between OP_PTR and OP_END. */
4c2df51b 581
595d2e30
TT
582void
583dwarf_expr_context::execute_stack_op (const gdb_byte *op_ptr,
584 const gdb_byte *op_end)
4c2df51b 585{
595d2e30 586 enum bfd_endian byte_order = gdbarch_byte_order (this->gdbarch);
8a9b8146
TT
587 /* Old-style "untyped" DWARF values need special treatment in a
588 couple of places, specifically DW_OP_mod and DW_OP_shr. We need
589 a special type for these values so we can distinguish them from
590 values that have an explicit type, because explicitly-typed
591 values do not need special treatment. This special type must be
592 different (in the `==' sense) from any base type coming from the
593 CU. */
595d2e30 594 struct type *address_type = this->address_type ();
9a619af0 595
595d2e30
TT
596 this->location = DWARF_VALUE_MEMORY;
597 this->initialized = 1; /* Default is initialized. */
18ec9831 598
595d2e30 599 if (this->recursion_depth > this->max_recursion_depth)
1e3a102a 600 error (_("DWARF-2 expression error: Loop detected (%d)."),
595d2e30
TT
601 this->recursion_depth);
602 this->recursion_depth++;
1e3a102a 603
4c2df51b
DJ
604 while (op_ptr < op_end)
605 {
aead7601 606 enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr++;
f2c7657e 607 ULONGEST result;
44353522
DE
608 /* Assume the value is not in stack memory.
609 Code that knows otherwise sets this to 1.
610 Some arithmetic on stack addresses can probably be assumed to still
611 be a stack address, but we skip this complication for now.
612 This is just an optimization, so it's always ok to punt
613 and leave this as 0. */
614 int in_stack_memory = 0;
9fccedf7
DE
615 uint64_t uoffset, reg;
616 int64_t offset;
8a9b8146 617 struct value *result_val = NULL;
4c2df51b 618
e0e9434c
TT
619 /* The DWARF expression might have a bug causing an infinite
620 loop. In that case, quitting is the only way out. */
621 QUIT;
622
4c2df51b
DJ
623 switch (op)
624 {
625 case DW_OP_lit0:
626 case DW_OP_lit1:
627 case DW_OP_lit2:
628 case DW_OP_lit3:
629 case DW_OP_lit4:
630 case DW_OP_lit5:
631 case DW_OP_lit6:
632 case DW_OP_lit7:
633 case DW_OP_lit8:
634 case DW_OP_lit9:
635 case DW_OP_lit10:
636 case DW_OP_lit11:
637 case DW_OP_lit12:
638 case DW_OP_lit13:
639 case DW_OP_lit14:
640 case DW_OP_lit15:
641 case DW_OP_lit16:
642 case DW_OP_lit17:
643 case DW_OP_lit18:
644 case DW_OP_lit19:
645 case DW_OP_lit20:
646 case DW_OP_lit21:
647 case DW_OP_lit22:
648 case DW_OP_lit23:
649 case DW_OP_lit24:
650 case DW_OP_lit25:
651 case DW_OP_lit26:
652 case DW_OP_lit27:
653 case DW_OP_lit28:
654 case DW_OP_lit29:
655 case DW_OP_lit30:
656 case DW_OP_lit31:
657 result = op - DW_OP_lit0;
8a9b8146 658 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
659 break;
660
661 case DW_OP_addr:
f2c7657e 662 result = extract_unsigned_integer (op_ptr,
595d2e30
TT
663 this->addr_size, byte_order);
664 op_ptr += this->addr_size;
ac56253d
TT
665 /* Some versions of GCC emit DW_OP_addr before
666 DW_OP_GNU_push_tls_address. In this case the value is an
667 index, not an address. We don't support things like
668 branching between the address and the TLS op. */
669 if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
595d2e30 670 result += this->offset;
8a9b8146 671 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
672 break;
673
3019eac3 674 case DW_OP_GNU_addr_index:
49f6c839 675 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
192ca6d8 676 result = this->get_addr_index (uoffset);
595d2e30 677 result += this->offset;
49f6c839
DE
678 result_val = value_from_ulongest (address_type, result);
679 break;
680 case DW_OP_GNU_const_index:
f664829e 681 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
192ca6d8 682 result = this->get_addr_index (uoffset);
3019eac3
DE
683 result_val = value_from_ulongest (address_type, result);
684 break;
685
4c2df51b 686 case DW_OP_const1u:
e17a4113 687 result = extract_unsigned_integer (op_ptr, 1, byte_order);
8a9b8146 688 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
689 op_ptr += 1;
690 break;
691 case DW_OP_const1s:
e17a4113 692 result = extract_signed_integer (op_ptr, 1, byte_order);
8a9b8146 693 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
694 op_ptr += 1;
695 break;
696 case DW_OP_const2u:
e17a4113 697 result = extract_unsigned_integer (op_ptr, 2, byte_order);
8a9b8146 698 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
699 op_ptr += 2;
700 break;
701 case DW_OP_const2s:
e17a4113 702 result = extract_signed_integer (op_ptr, 2, byte_order);
8a9b8146 703 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
704 op_ptr += 2;
705 break;
706 case DW_OP_const4u:
e17a4113 707 result = extract_unsigned_integer (op_ptr, 4, byte_order);
8a9b8146 708 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
709 op_ptr += 4;
710 break;
711 case DW_OP_const4s:
e17a4113 712 result = extract_signed_integer (op_ptr, 4, byte_order);
8a9b8146 713 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
714 op_ptr += 4;
715 break;
716 case DW_OP_const8u:
e17a4113 717 result = extract_unsigned_integer (op_ptr, 8, byte_order);
8a9b8146 718 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
719 op_ptr += 8;
720 break;
721 case DW_OP_const8s:
e17a4113 722 result = extract_signed_integer (op_ptr, 8, byte_order);
8a9b8146 723 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
724 op_ptr += 8;
725 break;
726 case DW_OP_constu:
f664829e 727 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
4c2df51b 728 result = uoffset;
8a9b8146 729 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
730 break;
731 case DW_OP_consts:
f664829e 732 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
4c2df51b 733 result = offset;
8a9b8146 734 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
735 break;
736
737 /* The DW_OP_reg operations are required to occur alone in
738 location expressions. */
739 case DW_OP_reg0:
740 case DW_OP_reg1:
741 case DW_OP_reg2:
742 case DW_OP_reg3:
743 case DW_OP_reg4:
744 case DW_OP_reg5:
745 case DW_OP_reg6:
746 case DW_OP_reg7:
747 case DW_OP_reg8:
748 case DW_OP_reg9:
749 case DW_OP_reg10:
750 case DW_OP_reg11:
751 case DW_OP_reg12:
752 case DW_OP_reg13:
753 case DW_OP_reg14:
754 case DW_OP_reg15:
755 case DW_OP_reg16:
756 case DW_OP_reg17:
757 case DW_OP_reg18:
758 case DW_OP_reg19:
759 case DW_OP_reg20:
760 case DW_OP_reg21:
761 case DW_OP_reg22:
762 case DW_OP_reg23:
763 case DW_OP_reg24:
764 case DW_OP_reg25:
765 case DW_OP_reg26:
766 case DW_OP_reg27:
767 case DW_OP_reg28:
768 case DW_OP_reg29:
769 case DW_OP_reg30:
770 case DW_OP_reg31:
f206f69c 771 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_reg");
4c2df51b 772
61fbb938 773 result = op - DW_OP_reg0;
8a9b8146 774 result_val = value_from_ulongest (address_type, result);
595d2e30 775 this->location = DWARF_VALUE_REGISTER;
4c2df51b
DJ
776 break;
777
778 case DW_OP_regx:
f664829e 779 op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
3cf03773 780 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
4c2df51b 781
61fbb938 782 result = reg;
8a9b8146 783 result_val = value_from_ulongest (address_type, result);
595d2e30 784 this->location = DWARF_VALUE_REGISTER;
4c2df51b
DJ
785 break;
786
cec03d70
TT
787 case DW_OP_implicit_value:
788 {
9fccedf7 789 uint64_t len;
9a619af0 790
f664829e 791 op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
cec03d70
TT
792 if (op_ptr + len > op_end)
793 error (_("DW_OP_implicit_value: too few bytes available."));
595d2e30
TT
794 this->len = len;
795 this->data = op_ptr;
796 this->location = DWARF_VALUE_LITERAL;
cec03d70 797 op_ptr += len;
3cf03773
TT
798 dwarf_expr_require_composition (op_ptr, op_end,
799 "DW_OP_implicit_value");
cec03d70
TT
800 }
801 goto no_push;
802
803 case DW_OP_stack_value:
595d2e30 804 this->location = DWARF_VALUE_STACK;
3cf03773 805 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
cec03d70
TT
806 goto no_push;
807
216f72a1 808 case DW_OP_implicit_pointer:
8cf6f0b1
TT
809 case DW_OP_GNU_implicit_pointer:
810 {
9fccedf7 811 int64_t len;
8cf6f0b1 812
595d2e30 813 if (this->ref_addr_size == -1)
216f72a1 814 error (_("DWARF-2 expression error: DW_OP_implicit_pointer "
181cebd4
JK
815 "is not allowed in frame context"));
816
8b9737bf 817 /* The referred-to DIE of sect_offset kind. */
595d2e30 818 this->len = extract_unsigned_integer (op_ptr, this->ref_addr_size,
8cf6f0b1 819 byte_order);
595d2e30 820 op_ptr += this->ref_addr_size;
8cf6f0b1
TT
821
822 /* The byte offset into the data. */
f664829e 823 op_ptr = safe_read_sleb128 (op_ptr, op_end, &len);
8cf6f0b1 824 result = (ULONGEST) len;
8a9b8146 825 result_val = value_from_ulongest (address_type, result);
8cf6f0b1 826
595d2e30 827 this->location = DWARF_VALUE_IMPLICIT_POINTER;
8cf6f0b1 828 dwarf_expr_require_composition (op_ptr, op_end,
216f72a1 829 "DW_OP_implicit_pointer");
8cf6f0b1
TT
830 }
831 break;
832
4c2df51b
DJ
833 case DW_OP_breg0:
834 case DW_OP_breg1:
835 case DW_OP_breg2:
836 case DW_OP_breg3:
837 case DW_OP_breg4:
838 case DW_OP_breg5:
839 case DW_OP_breg6:
840 case DW_OP_breg7:
841 case DW_OP_breg8:
842 case DW_OP_breg9:
843 case DW_OP_breg10:
844 case DW_OP_breg11:
845 case DW_OP_breg12:
846 case DW_OP_breg13:
847 case DW_OP_breg14:
848 case DW_OP_breg15:
849 case DW_OP_breg16:
850 case DW_OP_breg17:
851 case DW_OP_breg18:
852 case DW_OP_breg19:
853 case DW_OP_breg20:
854 case DW_OP_breg21:
855 case DW_OP_breg22:
856 case DW_OP_breg23:
857 case DW_OP_breg24:
858 case DW_OP_breg25:
859 case DW_OP_breg26:
860 case DW_OP_breg27:
861 case DW_OP_breg28:
862 case DW_OP_breg29:
863 case DW_OP_breg30:
864 case DW_OP_breg31:
865 {
f664829e 866 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
192ca6d8 867 result = this->read_addr_from_reg (op - DW_OP_breg0);
4c2df51b 868 result += offset;
8a9b8146 869 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
870 }
871 break;
872 case DW_OP_bregx:
873 {
f664829e
DE
874 op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
875 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
192ca6d8 876 result = this->read_addr_from_reg (reg);
4c2df51b 877 result += offset;
8a9b8146 878 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
879 }
880 break;
881 case DW_OP_fbreg:
882 {
0d45f56e 883 const gdb_byte *datastart;
4c2df51b
DJ
884 size_t datalen;
885 unsigned int before_stack_len;
886
f664829e 887 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
4c2df51b
DJ
888 /* Rather than create a whole new context, we simply
889 record the stack length before execution, then reset it
890 afterwards, effectively erasing whatever the recursive
891 call put there. */
595d2e30 892 before_stack_len = this->stack_len;
da62e633
AC
893 /* FIXME: cagney/2003-03-26: This code should be using
894 get_frame_base_address(), and then implement a dwarf2
895 specific this_base method. */
192ca6d8 896 this->get_frame_base (&datastart, &datalen);
595d2e30
TT
897 eval (datastart, datalen);
898 if (this->location == DWARF_VALUE_MEMORY)
899 result = fetch_address (0);
900 else if (this->location == DWARF_VALUE_REGISTER)
192ca6d8 901 result = this->read_addr_from_reg (value_as_long (fetch (0)));
f2c7657e 902 else
3e43a32a
MS
903 error (_("Not implemented: computing frame "
904 "base using explicit value operator"));
4c2df51b 905 result = result + offset;
8a9b8146 906 result_val = value_from_ulongest (address_type, result);
44353522 907 in_stack_memory = 1;
595d2e30
TT
908 this->stack_len = before_stack_len;
909 this->location = DWARF_VALUE_MEMORY;
4c2df51b
DJ
910 }
911 break;
44353522 912
4c2df51b 913 case DW_OP_dup:
595d2e30
TT
914 result_val = fetch (0);
915 in_stack_memory = fetch_in_stack_memory (0);
4c2df51b
DJ
916 break;
917
918 case DW_OP_drop:
595d2e30 919 pop ();
4c2df51b
DJ
920 goto no_push;
921
922 case DW_OP_pick:
923 offset = *op_ptr++;
595d2e30
TT
924 result_val = fetch (offset);
925 in_stack_memory = fetch_in_stack_memory (offset);
4c2df51b 926 break;
9f3fe11c
TG
927
928 case DW_OP_swap:
929 {
44353522 930 struct dwarf_stack_value t1, t2;
9f3fe11c 931
595d2e30 932 if (this->stack_len < 2)
3e43a32a 933 error (_("Not enough elements for "
0963b4bd 934 "DW_OP_swap. Need 2, have %d."),
595d2e30
TT
935 this->stack_len);
936 t1 = this->stack[this->stack_len - 1];
937 t2 = this->stack[this->stack_len - 2];
938 this->stack[this->stack_len - 1] = t2;
939 this->stack[this->stack_len - 2] = t1;
9f3fe11c
TG
940 goto no_push;
941 }
4c2df51b
DJ
942
943 case DW_OP_over:
595d2e30
TT
944 result_val = fetch (1);
945 in_stack_memory = fetch_in_stack_memory (1);
4c2df51b
DJ
946 break;
947
948 case DW_OP_rot:
949 {
44353522 950 struct dwarf_stack_value t1, t2, t3;
4c2df51b 951
595d2e30 952 if (this->stack_len < 3)
0963b4bd
MS
953 error (_("Not enough elements for "
954 "DW_OP_rot. Need 3, have %d."),
595d2e30
TT
955 this->stack_len);
956 t1 = this->stack[this->stack_len - 1];
957 t2 = this->stack[this->stack_len - 2];
958 t3 = this->stack[this->stack_len - 3];
959 this->stack[this->stack_len - 1] = t2;
960 this->stack[this->stack_len - 2] = t3;
961 this->stack[this->stack_len - 3] = t1;
4c2df51b
DJ
962 goto no_push;
963 }
964
965 case DW_OP_deref:
966 case DW_OP_deref_size:
216f72a1 967 case DW_OP_deref_type:
8a9b8146 968 case DW_OP_GNU_deref_type:
f2c7657e 969 {
595d2e30 970 int addr_size = (op == DW_OP_deref ? this->addr_size : *op_ptr++);
224c3ddb 971 gdb_byte *buf = (gdb_byte *) alloca (addr_size);
595d2e30 972 CORE_ADDR addr = fetch_address (0);
8a9b8146
TT
973 struct type *type;
974
595d2e30 975 pop ();
f2c7657e 976
216f72a1 977 if (op == DW_OP_deref_type || op == DW_OP_GNU_deref_type)
8a9b8146 978 {
b64f50a1 979 cu_offset type_die;
8a9b8146 980
f664829e 981 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
b64f50a1 982 type_die.cu_off = uoffset;
595d2e30 983 type = get_base_type (type_die, 0);
8a9b8146
TT
984 }
985 else
986 type = address_type;
987
192ca6d8 988 this->read_mem (buf, addr, addr_size);
325663dc
JB
989
990 /* If the size of the object read from memory is different
991 from the type length, we need to zero-extend it. */
992 if (TYPE_LENGTH (type) != addr_size)
993 {
994 ULONGEST result =
995 extract_unsigned_integer (buf, addr_size, byte_order);
996
224c3ddb 997 buf = (gdb_byte *) alloca (TYPE_LENGTH (type));
325663dc
JB
998 store_unsigned_integer (buf, TYPE_LENGTH (type),
999 byte_order, result);
1000 }
1001
8a9b8146 1002 result_val = value_from_contents_and_address (type, buf, addr);
f2c7657e
UW
1003 break;
1004 }
1005
4c2df51b
DJ
1006 case DW_OP_abs:
1007 case DW_OP_neg:
1008 case DW_OP_not:
1009 case DW_OP_plus_uconst:
8a9b8146
TT
1010 {
1011 /* Unary operations. */
595d2e30
TT
1012 result_val = fetch (0);
1013 pop ();
4c2df51b 1014
8a9b8146
TT
1015 switch (op)
1016 {
1017 case DW_OP_abs:
1018 if (value_less (result_val,
1019 value_zero (value_type (result_val), not_lval)))
1020 result_val = value_neg (result_val);
1021 break;
1022 case DW_OP_neg:
1023 result_val = value_neg (result_val);
1024 break;
1025 case DW_OP_not:
1026 dwarf_require_integral (value_type (result_val));
1027 result_val = value_complement (result_val);
1028 break;
1029 case DW_OP_plus_uconst:
1030 dwarf_require_integral (value_type (result_val));
1031 result = value_as_long (result_val);
f664829e 1032 op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
8a9b8146
TT
1033 result += reg;
1034 result_val = value_from_ulongest (address_type, result);
1035 break;
1036 }
1037 }
4c2df51b
DJ
1038 break;
1039
1040 case DW_OP_and:
1041 case DW_OP_div:
1042 case DW_OP_minus:
1043 case DW_OP_mod:
1044 case DW_OP_mul:
1045 case DW_OP_or:
1046 case DW_OP_plus:
1047 case DW_OP_shl:
1048 case DW_OP_shr:
1049 case DW_OP_shra:
1050 case DW_OP_xor:
1051 case DW_OP_le:
1052 case DW_OP_ge:
1053 case DW_OP_eq:
1054 case DW_OP_lt:
1055 case DW_OP_gt:
1056 case DW_OP_ne:
1057 {
f2c7657e 1058 /* Binary operations. */
8a9b8146 1059 struct value *first, *second;
4c2df51b 1060
595d2e30
TT
1061 second = fetch (0);
1062 pop ();
4c2df51b 1063
595d2e30
TT
1064 first = fetch (0);
1065 pop ();
4c2df51b 1066
8a9b8146
TT
1067 if (! base_types_equal_p (value_type (first), value_type (second)))
1068 error (_("Incompatible types on DWARF stack"));
1069
4c2df51b
DJ
1070 switch (op)
1071 {
1072 case DW_OP_and:
8a9b8146
TT
1073 dwarf_require_integral (value_type (first));
1074 dwarf_require_integral (value_type (second));
1075 result_val = value_binop (first, second, BINOP_BITWISE_AND);
4c2df51b
DJ
1076 break;
1077 case DW_OP_div:
8a9b8146 1078 result_val = value_binop (first, second, BINOP_DIV);
99c87dab 1079 break;
4c2df51b 1080 case DW_OP_minus:
8a9b8146 1081 result_val = value_binop (first, second, BINOP_SUB);
4c2df51b
DJ
1082 break;
1083 case DW_OP_mod:
8a9b8146
TT
1084 {
1085 int cast_back = 0;
1086 struct type *orig_type = value_type (first);
1087
1088 /* We have to special-case "old-style" untyped values
1089 -- these must have mod computed using unsigned
1090 math. */
1091 if (orig_type == address_type)
1092 {
1093 struct type *utype
595d2e30 1094 = get_unsigned_type (this->gdbarch, orig_type);
8a9b8146
TT
1095
1096 cast_back = 1;
1097 first = value_cast (utype, first);
1098 second = value_cast (utype, second);
1099 }
1100 /* Note that value_binop doesn't handle float or
1101 decimal float here. This seems unimportant. */
1102 result_val = value_binop (first, second, BINOP_MOD);
1103 if (cast_back)
1104 result_val = value_cast (orig_type, result_val);
1105 }
4c2df51b
DJ
1106 break;
1107 case DW_OP_mul:
8a9b8146 1108 result_val = value_binop (first, second, BINOP_MUL);
4c2df51b
DJ
1109 break;
1110 case DW_OP_or:
8a9b8146
TT
1111 dwarf_require_integral (value_type (first));
1112 dwarf_require_integral (value_type (second));
1113 result_val = value_binop (first, second, BINOP_BITWISE_IOR);
4c2df51b
DJ
1114 break;
1115 case DW_OP_plus:
8a9b8146 1116 result_val = value_binop (first, second, BINOP_ADD);
4c2df51b
DJ
1117 break;
1118 case DW_OP_shl:
8a9b8146
TT
1119 dwarf_require_integral (value_type (first));
1120 dwarf_require_integral (value_type (second));
1121 result_val = value_binop (first, second, BINOP_LSH);
4c2df51b
DJ
1122 break;
1123 case DW_OP_shr:
8a9b8146
TT
1124 dwarf_require_integral (value_type (first));
1125 dwarf_require_integral (value_type (second));
b087e0ed 1126 if (!TYPE_UNSIGNED (value_type (first)))
8a9b8146
TT
1127 {
1128 struct type *utype
595d2e30 1129 = get_unsigned_type (this->gdbarch, value_type (first));
8a9b8146
TT
1130
1131 first = value_cast (utype, first);
1132 }
1133
1134 result_val = value_binop (first, second, BINOP_RSH);
1135 /* Make sure we wind up with the same type we started
1136 with. */
1137 if (value_type (result_val) != value_type (second))
1138 result_val = value_cast (value_type (second), result_val);
99c87dab 1139 break;
4c2df51b 1140 case DW_OP_shra:
8a9b8146
TT
1141 dwarf_require_integral (value_type (first));
1142 dwarf_require_integral (value_type (second));
8ddd9a20
TT
1143 if (TYPE_UNSIGNED (value_type (first)))
1144 {
1145 struct type *stype
595d2e30 1146 = get_signed_type (this->gdbarch, value_type (first));
8ddd9a20
TT
1147
1148 first = value_cast (stype, first);
1149 }
1150
8a9b8146 1151 result_val = value_binop (first, second, BINOP_RSH);
8ddd9a20
TT
1152 /* Make sure we wind up with the same type we started
1153 with. */
1154 if (value_type (result_val) != value_type (second))
1155 result_val = value_cast (value_type (second), result_val);
4c2df51b
DJ
1156 break;
1157 case DW_OP_xor:
8a9b8146
TT
1158 dwarf_require_integral (value_type (first));
1159 dwarf_require_integral (value_type (second));
1160 result_val = value_binop (first, second, BINOP_BITWISE_XOR);
4c2df51b
DJ
1161 break;
1162 case DW_OP_le:
8a9b8146
TT
1163 /* A <= B is !(B < A). */
1164 result = ! value_less (second, first);
1165 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
1166 break;
1167 case DW_OP_ge:
8a9b8146
TT
1168 /* A >= B is !(A < B). */
1169 result = ! value_less (first, second);
1170 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
1171 break;
1172 case DW_OP_eq:
8a9b8146
TT
1173 result = value_equal (first, second);
1174 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
1175 break;
1176 case DW_OP_lt:
8a9b8146
TT
1177 result = value_less (first, second);
1178 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
1179 break;
1180 case DW_OP_gt:
8a9b8146
TT
1181 /* A > B is B < A. */
1182 result = value_less (second, first);
1183 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
1184 break;
1185 case DW_OP_ne:
8a9b8146
TT
1186 result = ! value_equal (first, second);
1187 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
1188 break;
1189 default:
1190 internal_error (__FILE__, __LINE__,
e2e0b3e5 1191 _("Can't be reached."));
4c2df51b 1192 }
4c2df51b
DJ
1193 }
1194 break;
1195
e7802207 1196 case DW_OP_call_frame_cfa:
192ca6d8 1197 result = this->get_frame_cfa ();
8a9b8146 1198 result_val = value_from_ulongest (address_type, result);
44353522 1199 in_stack_memory = 1;
e7802207
TT
1200 break;
1201
4c2df51b 1202 case DW_OP_GNU_push_tls_address:
4aa4e28b 1203 case DW_OP_form_tls_address:
c3228f12
EZ
1204 /* Variable is at a constant offset in the thread-local
1205 storage block into the objfile for the current thread and
0963b4bd 1206 the dynamic linker module containing this expression. Here
c3228f12
EZ
1207 we return returns the offset from that base. The top of the
1208 stack has the offset from the beginning of the thread
1209 control block at which the variable is located. Nothing
1210 should follow this operator, so the top of stack would be
1211 returned. */
595d2e30
TT
1212 result = value_as_long (fetch (0));
1213 pop ();
192ca6d8 1214 result = this->get_tls_address (result);
8a9b8146 1215 result_val = value_from_ulongest (address_type, result);
4c2df51b
DJ
1216 break;
1217
1218 case DW_OP_skip:
e17a4113 1219 offset = extract_signed_integer (op_ptr, 2, byte_order);
4c2df51b
DJ
1220 op_ptr += 2;
1221 op_ptr += offset;
1222 goto no_push;
1223
1224 case DW_OP_bra:
8a9b8146
TT
1225 {
1226 struct value *val;
1227
1228 offset = extract_signed_integer (op_ptr, 2, byte_order);
1229 op_ptr += 2;
595d2e30 1230 val = fetch (0);
8a9b8146
TT
1231 dwarf_require_integral (value_type (val));
1232 if (value_as_long (val) != 0)
1233 op_ptr += offset;
595d2e30 1234 pop ();
8a9b8146 1235 }
4c2df51b
DJ
1236 goto no_push;
1237
1238 case DW_OP_nop:
1239 goto no_push;
1240
87808bd6
JB
1241 case DW_OP_piece:
1242 {
9fccedf7 1243 uint64_t size;
87808bd6
JB
1244
1245 /* Record the piece. */
f664829e 1246 op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
595d2e30 1247 add_piece (8 * size, 0);
87808bd6 1248
cec03d70
TT
1249 /* Pop off the address/regnum, and reset the location
1250 type. */
595d2e30
TT
1251 if (this->location != DWARF_VALUE_LITERAL
1252 && this->location != DWARF_VALUE_OPTIMIZED_OUT)
1253 pop ();
1254 this->location = DWARF_VALUE_MEMORY;
87808bd6
JB
1255 }
1256 goto no_push;
1257
d3b1e874
TT
1258 case DW_OP_bit_piece:
1259 {
9fccedf7 1260 uint64_t size, offset;
d3b1e874
TT
1261
1262 /* Record the piece. */
f664829e
DE
1263 op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
1264 op_ptr = safe_read_uleb128 (op_ptr, op_end, &offset);
595d2e30 1265 add_piece (size, offset);
d3b1e874
TT
1266
1267 /* Pop off the address/regnum, and reset the location
1268 type. */
595d2e30
TT
1269 if (this->location != DWARF_VALUE_LITERAL
1270 && this->location != DWARF_VALUE_OPTIMIZED_OUT)
1271 pop ();
1272 this->location = DWARF_VALUE_MEMORY;
d3b1e874
TT
1273 }
1274 goto no_push;
1275
42be36b3
CT
1276 case DW_OP_GNU_uninit:
1277 if (op_ptr != op_end)
9c482037 1278 error (_("DWARF-2 expression error: DW_OP_GNU_uninit must always "
42be36b3
CT
1279 "be the very last op."));
1280
595d2e30 1281 this->initialized = 0;
42be36b3
CT
1282 goto no_push;
1283
5c631832 1284 case DW_OP_call2:
b64f50a1
JK
1285 {
1286 cu_offset offset;
1287
1288 offset.cu_off = extract_unsigned_integer (op_ptr, 2, byte_order);
1289 op_ptr += 2;
192ca6d8 1290 this->dwarf_call (offset);
b64f50a1 1291 }
5c631832
JK
1292 goto no_push;
1293
1294 case DW_OP_call4:
b64f50a1
JK
1295 {
1296 cu_offset offset;
1297
1298 offset.cu_off = extract_unsigned_integer (op_ptr, 4, byte_order);
1299 op_ptr += 4;
192ca6d8 1300 this->dwarf_call (offset);
b64f50a1 1301 }
5c631832 1302 goto no_push;
dd90784c 1303
216f72a1 1304 case DW_OP_entry_value:
dd90784c 1305 case DW_OP_GNU_entry_value:
8e3b41a9 1306 {
9fccedf7 1307 uint64_t len;
8e3b41a9 1308 CORE_ADDR deref_size;
24c5c679 1309 union call_site_parameter_u kind_u;
8e3b41a9 1310
f664829e 1311 op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
8e3b41a9 1312 if (op_ptr + len > op_end)
216f72a1 1313 error (_("DW_OP_entry_value: too few bytes available."));
8e3b41a9 1314
24c5c679
JK
1315 kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (op_ptr, op_ptr + len);
1316 if (kind_u.dwarf_reg != -1)
8e3b41a9
JK
1317 {
1318 op_ptr += len;
192ca6d8
TT
1319 this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_DWARF_REG,
1320 kind_u,
1321 -1 /* deref_size */);
a471c594
JK
1322 goto no_push;
1323 }
1324
24c5c679
JK
1325 kind_u.dwarf_reg = dwarf_block_to_dwarf_reg_deref (op_ptr,
1326 op_ptr + len,
1327 &deref_size);
1328 if (kind_u.dwarf_reg != -1)
a471c594
JK
1329 {
1330 if (deref_size == -1)
595d2e30 1331 deref_size = this->addr_size;
a471c594 1332 op_ptr += len;
192ca6d8
TT
1333 this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_DWARF_REG,
1334 kind_u, deref_size);
8e3b41a9
JK
1335 goto no_push;
1336 }
1337
216f72a1 1338 error (_("DWARF-2 expression error: DW_OP_entry_value is "
a471c594
JK
1339 "supported only for single DW_OP_reg* "
1340 "or for DW_OP_breg*(0)+DW_OP_deref*"));
8e3b41a9 1341 }
5c631832 1342
1788b2d3
JK
1343 case DW_OP_GNU_parameter_ref:
1344 {
1345 union call_site_parameter_u kind_u;
1346
1347 kind_u.param_offset.cu_off = extract_unsigned_integer (op_ptr, 4,
1348 byte_order);
1349 op_ptr += 4;
192ca6d8
TT
1350 this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_PARAM_OFFSET,
1351 kind_u,
1352 -1 /* deref_size */);
1788b2d3
JK
1353 }
1354 goto no_push;
1355
216f72a1 1356 case DW_OP_const_type:
8a9b8146
TT
1357 case DW_OP_GNU_const_type:
1358 {
b64f50a1 1359 cu_offset type_die;
8a9b8146
TT
1360 int n;
1361 const gdb_byte *data;
1362 struct type *type;
1363
f664829e 1364 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
b64f50a1 1365 type_die.cu_off = uoffset;
8a9b8146
TT
1366 n = *op_ptr++;
1367 data = op_ptr;
1368 op_ptr += n;
1369
595d2e30 1370 type = get_base_type (type_die, n);
8a9b8146
TT
1371 result_val = value_from_contents (type, data);
1372 }
1373 break;
1374
216f72a1 1375 case DW_OP_regval_type:
8a9b8146
TT
1376 case DW_OP_GNU_regval_type:
1377 {
b64f50a1 1378 cu_offset type_die;
8a9b8146
TT
1379 struct type *type;
1380
f664829e
DE
1381 op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
1382 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
b64f50a1 1383 type_die.cu_off = uoffset;
8a9b8146 1384
595d2e30 1385 type = get_base_type (type_die, 0);
192ca6d8 1386 result_val = this->get_reg_value (type, reg);
8a9b8146
TT
1387 }
1388 break;
1389
216f72a1 1390 case DW_OP_convert:
8a9b8146 1391 case DW_OP_GNU_convert:
216f72a1 1392 case DW_OP_reinterpret:
8a9b8146
TT
1393 case DW_OP_GNU_reinterpret:
1394 {
b64f50a1 1395 cu_offset type_die;
8a9b8146
TT
1396 struct type *type;
1397
f664829e 1398 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
b64f50a1 1399 type_die.cu_off = uoffset;
8a9b8146 1400
b64f50a1 1401 if (type_die.cu_off == 0)
c38c4bc5
TT
1402 type = address_type;
1403 else
595d2e30 1404 type = get_base_type (type_die, 0);
8a9b8146 1405
595d2e30
TT
1406 result_val = fetch (0);
1407 pop ();
8a9b8146 1408
216f72a1 1409 if (op == DW_OP_convert || op == DW_OP_GNU_convert)
8a9b8146
TT
1410 result_val = value_cast (type, result_val);
1411 else if (type == value_type (result_val))
1412 {
1413 /* Nothing. */
1414 }
1415 else if (TYPE_LENGTH (type)
1416 != TYPE_LENGTH (value_type (result_val)))
216f72a1 1417 error (_("DW_OP_reinterpret has wrong size"));
8a9b8146
TT
1418 else
1419 result_val
1420 = value_from_contents (type,
1421 value_contents_all (result_val));
1422 }
1423 break;
1424
08412b07
JB
1425 case DW_OP_push_object_address:
1426 /* Return the address of the object we are currently observing. */
192ca6d8 1427 result = this->get_object_address ();
08412b07
JB
1428 result_val = value_from_ulongest (address_type, result);
1429 break;
1430
4c2df51b 1431 default:
8a3fe4f8 1432 error (_("Unhandled dwarf expression opcode 0x%x"), op);
4c2df51b
DJ
1433 }
1434
1435 /* Most things push a result value. */
8a9b8146 1436 gdb_assert (result_val != NULL);
595d2e30 1437 push (result_val, in_stack_memory);
82ae4854 1438 no_push:
b27cf2b3 1439 ;
4c2df51b 1440 }
1e3a102a 1441
8cf6f0b1
TT
1442 /* To simplify our main caller, if the result is an implicit
1443 pointer, then make a pieced value. This is ok because we can't
1444 have implicit pointers in contexts where pieces are invalid. */
595d2e30
TT
1445 if (this->location == DWARF_VALUE_IMPLICIT_POINTER)
1446 add_piece (8 * this->addr_size, 0);
8cf6f0b1 1447
dd90784c 1448abort_expression:
595d2e30
TT
1449 this->recursion_depth--;
1450 gdb_assert (this->recursion_depth >= 0);
8a9b8146
TT
1451}
1452
70221824
PA
1453/* Provide a prototype to silence -Wmissing-prototypes. */
1454extern initialize_file_ftype _initialize_dwarf2expr;
1455
8a9b8146
TT
1456void
1457_initialize_dwarf2expr (void)
1458{
1459 dwarf_arch_cookie
1460 = gdbarch_data_register_post_init (dwarf_gdbarch_types_init);
4c2df51b 1461}
This page took 1.045179 seconds and 4 git commands to generate.