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