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