1 /* DWARF 2 Expression Evaluator.
3 Copyright (C) 2001-2018 Free Software Foundation, Inc.
5 Contributed by Daniel Berlin (dan@dberlin.org)
7 This file is part of GDB.
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
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
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.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
28 #include "dwarf2expr.h"
29 #include "dwarf2loc.h"
30 #include "common/underlying.h"
32 /* Cookie for gdbarch data. */
34 static struct gdbarch_data *dwarf_arch_cookie;
36 /* This holds gdbarch-specific types used by the DWARF expression
37 evaluator. See comments in execute_stack_op. */
39 struct dwarf_gdbarch_types
41 struct type *dw_types[3];
44 /* Allocate and fill in dwarf_gdbarch_types for an arch. */
47 dwarf_gdbarch_types_init (struct gdbarch *gdbarch)
49 struct dwarf_gdbarch_types *types
50 = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct dwarf_gdbarch_types);
52 /* The types themselves are lazily initialized. */
57 /* Return the type used for DWARF operations where the type is
58 unspecified in the DWARF spec. Only certain sizes are
62 dwarf_expr_context::address_type () const
64 struct dwarf_gdbarch_types *types
65 = (struct dwarf_gdbarch_types *) gdbarch_data (this->gdbarch,
69 if (this->addr_size == 2)
71 else if (this->addr_size == 4)
73 else if (this->addr_size == 8)
76 error (_("Unsupported address size in DWARF expressions: %d bits"),
79 if (types->dw_types[ndx] == NULL)
81 = arch_integer_type (this->gdbarch,
83 0, "<signed DWARF address type>");
85 return types->dw_types[ndx];
88 /* Create a new context for the expression evaluator. */
90 dwarf_expr_context::dwarf_expr_context ()
96 max_recursion_depth (0x100),
97 location (DWARF_VALUE_MEMORY),
104 /* Push VALUE onto the stack. */
107 dwarf_expr_context::push (struct value *value, bool in_stack_memory)
109 stack.emplace_back (value, in_stack_memory);
112 /* Push VALUE onto the stack. */
115 dwarf_expr_context::push_address (CORE_ADDR value, bool in_stack_memory)
117 push (value_from_ulongest (address_type (), value), in_stack_memory);
120 /* Pop the top item off of the stack. */
123 dwarf_expr_context::pop ()
126 error (_("dwarf expression stack underflow"));
131 /* Retrieve the N'th item on the stack. */
134 dwarf_expr_context::fetch (int n)
136 if (stack.size () <= n)
137 error (_("Asked for position %d of stack, "
138 "stack only has %zu elements on it."),
140 return stack[stack.size () - (1 + n)].value;
143 /* Require that TYPE be an integral type; throw an exception if not. */
146 dwarf_require_integral (struct type *type)
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"));
154 /* Return the unsigned form of TYPE. TYPE is necessarily an integral
158 get_unsigned_type (struct gdbarch *gdbarch, struct type *type)
160 switch (TYPE_LENGTH (type))
163 return builtin_type (gdbarch)->builtin_uint8;
165 return builtin_type (gdbarch)->builtin_uint16;
167 return builtin_type (gdbarch)->builtin_uint32;
169 return builtin_type (gdbarch)->builtin_uint64;
171 error (_("no unsigned variant found for type, while evaluating "
172 "DWARF expression"));
176 /* Return the signed form of TYPE. TYPE is necessarily an integral
180 get_signed_type (struct gdbarch *gdbarch, struct type *type)
182 switch (TYPE_LENGTH (type))
185 return builtin_type (gdbarch)->builtin_int8;
187 return builtin_type (gdbarch)->builtin_int16;
189 return builtin_type (gdbarch)->builtin_int32;
191 return builtin_type (gdbarch)->builtin_int64;
193 error (_("no signed variant found for type, while evaluating "
194 "DWARF expression"));
198 /* Retrieve the N'th item on the stack, converted to an address. */
201 dwarf_expr_context::fetch_address (int n)
203 struct value *result_val = fetch (n);
204 enum bfd_endian byte_order = gdbarch_byte_order (this->gdbarch);
207 dwarf_require_integral (value_type (result_val));
208 result = extract_unsigned_integer (value_contents (result_val),
209 TYPE_LENGTH (value_type (result_val)),
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. */
218 if (gdbarch_integer_to_address_p (this->gdbarch))
220 gdb_byte *buf = (gdb_byte *) alloca (this->addr_size);
221 struct type *int_type = get_unsigned_type (this->gdbarch,
222 value_type (result_val));
224 store_unsigned_integer (buf, this->addr_size, byte_order, result);
225 return gdbarch_integer_to_address (this->gdbarch, int_type, buf);
228 return (CORE_ADDR) result;
231 /* Retrieve the in_stack_memory flag of the N'th item on the stack. */
234 dwarf_expr_context::fetch_in_stack_memory (int n)
236 if (stack.size () <= n)
237 error (_("Asked for position %d of stack, "
238 "stack only has %zu elements on it."),
240 return stack[stack.size () - (1 + n)].in_stack_memory;
243 /* Return true if the expression stack is empty. */
246 dwarf_expr_context::stack_empty_p () const
248 return stack.empty ();
251 /* Add a new piece to the dwarf_expr_context's piece list. */
253 dwarf_expr_context::add_piece (ULONGEST size, ULONGEST offset)
255 this->pieces.emplace_back ();
256 dwarf_expr_piece &p = this->pieces.back ();
258 p.location = this->location;
262 if (p.location == DWARF_VALUE_LITERAL)
264 p.v.literal.data = this->data;
265 p.v.literal.length = this->len;
267 else if (stack_empty_p ())
269 p.location = DWARF_VALUE_OPTIMIZED_OUT;
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. */
274 this->location = DWARF_VALUE_OPTIMIZED_OUT;
276 else if (p.location == DWARF_VALUE_MEMORY)
278 p.v.mem.addr = fetch_address (0);
279 p.v.mem.in_stack_memory = fetch_in_stack_memory (0);
281 else if (p.location == DWARF_VALUE_IMPLICIT_POINTER)
283 p.v.ptr.die_sect_off = (sect_offset) this->len;
284 p.v.ptr.offset = value_as_long (fetch (0));
286 else if (p.location == DWARF_VALUE_REGISTER)
287 p.v.regno = value_as_long (fetch (0));
290 p.v.value = fetch (0);
294 /* Evaluate the expression at ADDR (LEN bytes long). */
297 dwarf_expr_context::eval (const gdb_byte *addr, size_t len)
299 int old_recursion_depth = this->recursion_depth;
301 execute_stack_op (addr, addr + len);
303 /* RECURSION_DEPTH becomes invalid if an exception was thrown here. */
305 gdb_assert (this->recursion_depth == old_recursion_depth);
308 /* Helper to read a uleb128 value or throw an error. */
311 safe_read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
314 buf = gdb_read_uleb128 (buf, buf_end, r);
316 error (_("DWARF expression error: ran off end of buffer reading uleb128 value"));
320 /* Helper to read a sleb128 value or throw an error. */
323 safe_read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
326 buf = gdb_read_sleb128 (buf, buf_end, r);
328 error (_("DWARF expression error: ran off end of buffer reading sleb128 value"));
333 safe_skip_leb128 (const gdb_byte *buf, const gdb_byte *buf_end)
335 buf = gdb_skip_leb128 (buf, buf_end);
337 error (_("DWARF expression error: ran off end of buffer reading leb128 value"));
342 /* Check that the current operator is either at the end of an
343 expression, or that it is followed by a composition operator or by
344 DW_OP_GNU_uninit (which should terminate the expression). */
347 dwarf_expr_require_composition (const gdb_byte *op_ptr, const gdb_byte *op_end,
350 if (op_ptr != op_end && *op_ptr != DW_OP_piece && *op_ptr != DW_OP_bit_piece
351 && *op_ptr != DW_OP_GNU_uninit)
352 error (_("DWARF-2 expression error: `%s' operations must be "
353 "used either alone or in conjunction with DW_OP_piece "
354 "or DW_OP_bit_piece."),
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
363 base_types_equal_p (struct type *t1, struct type *t2)
365 if (TYPE_CODE (t1) != TYPE_CODE (t2))
367 if (TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2))
369 return TYPE_LENGTH (t1) == TYPE_LENGTH (t2);
372 /* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_reg* return the
373 DWARF register number. Otherwise return -1. */
376 dwarf_block_to_dwarf_reg (const gdb_byte *buf, const gdb_byte *buf_end)
382 if (*buf >= DW_OP_reg0 && *buf <= DW_OP_reg31)
384 if (buf_end - buf != 1)
386 return *buf - DW_OP_reg0;
389 if (*buf == DW_OP_regval_type || *buf == DW_OP_GNU_regval_type)
392 buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
395 buf = gdb_skip_leb128 (buf, buf_end);
399 else if (*buf == DW_OP_regx)
402 buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
408 if (buf != buf_end || (int) dwarf_reg != dwarf_reg)
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. */
419 dwarf_block_to_dwarf_reg_deref (const gdb_byte *buf, const gdb_byte *buf_end,
420 CORE_ADDR *deref_size_return)
428 if (*buf >= DW_OP_breg0 && *buf <= DW_OP_breg31)
430 dwarf_reg = *buf - DW_OP_breg0;
435 else if (*buf == DW_OP_bregx)
438 buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
441 if ((int) dwarf_reg != dwarf_reg)
447 buf = gdb_read_sleb128 (buf, buf_end, &offset);
453 if (*buf == DW_OP_deref)
456 *deref_size_return = -1;
458 else if (*buf == DW_OP_deref_size)
463 *deref_size_return = *buf++;
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. */
478 dwarf_block_to_fb_offset (const gdb_byte *buf, const gdb_byte *buf_end,
479 CORE_ADDR *fb_offset_return)
486 if (*buf != DW_OP_fbreg)
490 buf = gdb_read_sleb128 (buf, buf_end, &fb_offset);
493 *fb_offset_return = fb_offset;
494 if (buf != buf_end || fb_offset != (LONGEST) *fb_offset_return)
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. */
505 dwarf_block_to_sp_offset (struct gdbarch *gdbarch, const gdb_byte *buf,
506 const gdb_byte *buf_end, CORE_ADDR *sp_offset_return)
513 if (*buf >= DW_OP_breg0 && *buf <= DW_OP_breg31)
515 dwarf_reg = *buf - DW_OP_breg0;
520 if (*buf != DW_OP_bregx)
523 buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
528 if (dwarf_reg_to_regnum (gdbarch, dwarf_reg)
529 != gdbarch_sp_regnum (gdbarch))
532 buf = gdb_read_sleb128 (buf, buf_end, &sp_offset);
535 *sp_offset_return = sp_offset;
536 if (buf != buf_end || sp_offset != (LONGEST) *sp_offset_return)
542 /* The engine for the expression evaluator. Using the context in this
543 object, evaluate the expression between OP_PTR and OP_END. */
546 dwarf_expr_context::execute_stack_op (const gdb_byte *op_ptr,
547 const gdb_byte *op_end)
549 enum bfd_endian byte_order = gdbarch_byte_order (this->gdbarch);
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
557 struct type *address_type = this->address_type ();
559 this->location = DWARF_VALUE_MEMORY;
560 this->initialized = 1; /* Default is initialized. */
562 if (this->recursion_depth > this->max_recursion_depth)
563 error (_("DWARF-2 expression error: Loop detected (%d)."),
564 this->recursion_depth);
565 this->recursion_depth++;
567 while (op_ptr < op_end)
569 enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr++;
571 /* Assume the value is not in stack memory.
572 Code that knows otherwise sets this to true.
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
576 and leave this as false. */
577 bool in_stack_memory = false;
578 uint64_t uoffset, reg;
580 struct value *result_val = NULL;
582 /* The DWARF expression might have a bug causing an infinite
583 loop. In that case, quitting is the only way out. */
620 result = op - DW_OP_lit0;
621 result_val = value_from_ulongest (address_type, result);
625 result = extract_unsigned_integer (op_ptr,
626 this->addr_size, byte_order);
627 op_ptr += this->addr_size;
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)
633 result += this->offset;
634 result_val = value_from_ulongest (address_type, result);
637 case DW_OP_GNU_addr_index:
638 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
639 result = this->get_addr_index (uoffset);
640 result += this->offset;
641 result_val = value_from_ulongest (address_type, result);
643 case DW_OP_GNU_const_index:
644 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
645 result = this->get_addr_index (uoffset);
646 result_val = value_from_ulongest (address_type, result);
650 result = extract_unsigned_integer (op_ptr, 1, byte_order);
651 result_val = value_from_ulongest (address_type, result);
655 result = extract_signed_integer (op_ptr, 1, byte_order);
656 result_val = value_from_ulongest (address_type, result);
660 result = extract_unsigned_integer (op_ptr, 2, byte_order);
661 result_val = value_from_ulongest (address_type, result);
665 result = extract_signed_integer (op_ptr, 2, byte_order);
666 result_val = value_from_ulongest (address_type, result);
670 result = extract_unsigned_integer (op_ptr, 4, byte_order);
671 result_val = value_from_ulongest (address_type, result);
675 result = extract_signed_integer (op_ptr, 4, byte_order);
676 result_val = value_from_ulongest (address_type, result);
680 result = extract_unsigned_integer (op_ptr, 8, byte_order);
681 result_val = value_from_ulongest (address_type, result);
685 result = extract_signed_integer (op_ptr, 8, byte_order);
686 result_val = value_from_ulongest (address_type, result);
690 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
692 result_val = value_from_ulongest (address_type, result);
695 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
697 result_val = value_from_ulongest (address_type, result);
700 /* The DW_OP_reg operations are required to occur alone in
701 location expressions. */
734 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_reg");
736 result = op - DW_OP_reg0;
737 result_val = value_from_ulongest (address_type, result);
738 this->location = DWARF_VALUE_REGISTER;
742 op_ptr = safe_read_uleb128 (op_ptr, op_end, ®);
743 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
746 result_val = value_from_ulongest (address_type, result);
747 this->location = DWARF_VALUE_REGISTER;
750 case DW_OP_implicit_value:
754 op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
755 if (op_ptr + len > op_end)
756 error (_("DW_OP_implicit_value: too few bytes available."));
759 this->location = DWARF_VALUE_LITERAL;
761 dwarf_expr_require_composition (op_ptr, op_end,
762 "DW_OP_implicit_value");
766 case DW_OP_stack_value:
767 this->location = DWARF_VALUE_STACK;
768 dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
771 case DW_OP_implicit_pointer:
772 case DW_OP_GNU_implicit_pointer:
776 if (this->ref_addr_size == -1)
777 error (_("DWARF-2 expression error: DW_OP_implicit_pointer "
778 "is not allowed in frame context"));
780 /* The referred-to DIE of sect_offset kind. */
781 this->len = extract_unsigned_integer (op_ptr, this->ref_addr_size,
783 op_ptr += this->ref_addr_size;
785 /* The byte offset into the data. */
786 op_ptr = safe_read_sleb128 (op_ptr, op_end, &len);
787 result = (ULONGEST) len;
788 result_val = value_from_ulongest (address_type, result);
790 this->location = DWARF_VALUE_IMPLICIT_POINTER;
791 dwarf_expr_require_composition (op_ptr, op_end,
792 "DW_OP_implicit_pointer");
829 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
830 result = this->read_addr_from_reg (op - DW_OP_breg0);
832 result_val = value_from_ulongest (address_type, result);
837 op_ptr = safe_read_uleb128 (op_ptr, op_end, ®);
838 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
839 result = this->read_addr_from_reg (reg);
841 result_val = value_from_ulongest (address_type, result);
846 const gdb_byte *datastart;
849 op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
851 /* Rather than create a whole new context, we simply
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);
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. */
861 this->get_frame_base (&datastart, &datalen);
862 eval (datastart, datalen);
863 if (this->location == DWARF_VALUE_MEMORY)
864 result = fetch_address (0);
865 else if (this->location == DWARF_VALUE_REGISTER)
866 result = this->read_addr_from_reg (value_as_long (fetch (0)));
868 error (_("Not implemented: computing frame "
869 "base using explicit value operator"));
870 result = result + offset;
871 result_val = value_from_ulongest (address_type, result);
872 in_stack_memory = true;
874 /* Restore the content of the original stack. */
875 stack = std::move (saved_stack);
877 this->location = DWARF_VALUE_MEMORY;
882 result_val = fetch (0);
883 in_stack_memory = fetch_in_stack_memory (0);
892 result_val = fetch (offset);
893 in_stack_memory = fetch_in_stack_memory (offset);
898 if (stack.size () < 2)
899 error (_("Not enough elements for "
900 "DW_OP_swap. Need 2, have %zu."),
903 dwarf_stack_value &t1 = stack[stack.size () - 1];
904 dwarf_stack_value &t2 = stack[stack.size () - 2];
910 result_val = fetch (1);
911 in_stack_memory = fetch_in_stack_memory (1);
916 if (stack.size () < 3)
917 error (_("Not enough elements for "
918 "DW_OP_rot. Need 3, have %zu."),
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;
929 case DW_OP_deref_size:
930 case DW_OP_deref_type:
931 case DW_OP_GNU_deref_type:
933 int addr_size = (op == DW_OP_deref ? this->addr_size : *op_ptr++);
934 gdb_byte *buf = (gdb_byte *) alloca (addr_size);
935 CORE_ADDR addr = fetch_address (0);
940 if (op == DW_OP_deref_type || op == DW_OP_GNU_deref_type)
942 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
943 cu_offset type_die_cu_off = (cu_offset) uoffset;
944 type = get_base_type (type_die_cu_off, 0);
949 this->read_mem (buf, addr, addr_size);
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)
956 extract_unsigned_integer (buf, addr_size, byte_order);
958 buf = (gdb_byte *) alloca (TYPE_LENGTH (type));
959 store_unsigned_integer (buf, TYPE_LENGTH (type),
963 result_val = value_from_contents_and_address (type, buf, addr);
970 case DW_OP_plus_uconst:
972 /* Unary operations. */
973 result_val = fetch (0);
979 if (value_less (result_val,
980 value_zero (value_type (result_val), not_lval)))
981 result_val = value_neg (result_val);
984 result_val = value_neg (result_val);
987 dwarf_require_integral (value_type (result_val));
988 result_val = value_complement (result_val);
990 case DW_OP_plus_uconst:
991 dwarf_require_integral (value_type (result_val));
992 result = value_as_long (result_val);
993 op_ptr = safe_read_uleb128 (op_ptr, op_end, ®);
995 result_val = value_from_ulongest (address_type, result);
1019 /* Binary operations. */
1020 struct value *first, *second;
1028 if (! base_types_equal_p (value_type (first), value_type (second)))
1029 error (_("Incompatible types on DWARF stack"));
1034 dwarf_require_integral (value_type (first));
1035 dwarf_require_integral (value_type (second));
1036 result_val = value_binop (first, second, BINOP_BITWISE_AND);
1039 result_val = value_binop (first, second, BINOP_DIV);
1042 result_val = value_binop (first, second, BINOP_SUB);
1047 struct type *orig_type = value_type (first);
1049 /* We have to special-case "old-style" untyped values
1050 -- these must have mod computed using unsigned
1052 if (orig_type == address_type)
1055 = get_unsigned_type (this->gdbarch, orig_type);
1058 first = value_cast (utype, first);
1059 second = value_cast (utype, second);
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);
1065 result_val = value_cast (orig_type, result_val);
1069 result_val = value_binop (first, second, BINOP_MUL);
1072 dwarf_require_integral (value_type (first));
1073 dwarf_require_integral (value_type (second));
1074 result_val = value_binop (first, second, BINOP_BITWISE_IOR);
1077 result_val = value_binop (first, second, BINOP_ADD);
1080 dwarf_require_integral (value_type (first));
1081 dwarf_require_integral (value_type (second));
1082 result_val = value_binop (first, second, BINOP_LSH);
1085 dwarf_require_integral (value_type (first));
1086 dwarf_require_integral (value_type (second));
1087 if (!TYPE_UNSIGNED (value_type (first)))
1090 = get_unsigned_type (this->gdbarch, value_type (first));
1092 first = value_cast (utype, first);
1095 result_val = value_binop (first, second, BINOP_RSH);
1096 /* Make sure we wind up with the same type we started
1098 if (value_type (result_val) != value_type (second))
1099 result_val = value_cast (value_type (second), result_val);
1102 dwarf_require_integral (value_type (first));
1103 dwarf_require_integral (value_type (second));
1104 if (TYPE_UNSIGNED (value_type (first)))
1107 = get_signed_type (this->gdbarch, value_type (first));
1109 first = value_cast (stype, first);
1112 result_val = value_binop (first, second, BINOP_RSH);
1113 /* Make sure we wind up with the same type we started
1115 if (value_type (result_val) != value_type (second))
1116 result_val = value_cast (value_type (second), result_val);
1119 dwarf_require_integral (value_type (first));
1120 dwarf_require_integral (value_type (second));
1121 result_val = value_binop (first, second, BINOP_BITWISE_XOR);
1124 /* A <= B is !(B < A). */
1125 result = ! value_less (second, first);
1126 result_val = value_from_ulongest (address_type, result);
1129 /* A >= B is !(A < B). */
1130 result = ! value_less (first, second);
1131 result_val = value_from_ulongest (address_type, result);
1134 result = value_equal (first, second);
1135 result_val = value_from_ulongest (address_type, result);
1138 result = value_less (first, second);
1139 result_val = value_from_ulongest (address_type, result);
1142 /* A > B is B < A. */
1143 result = value_less (second, first);
1144 result_val = value_from_ulongest (address_type, result);
1147 result = ! value_equal (first, second);
1148 result_val = value_from_ulongest (address_type, result);
1151 internal_error (__FILE__, __LINE__,
1152 _("Can't be reached."));
1157 case DW_OP_call_frame_cfa:
1158 result = this->get_frame_cfa ();
1159 result_val = value_from_ulongest (address_type, result);
1160 in_stack_memory = true;
1163 case DW_OP_GNU_push_tls_address:
1164 case DW_OP_form_tls_address:
1165 /* Variable is at a constant offset in the thread-local
1166 storage block into the objfile for the current thread and
1167 the dynamic linker module containing this expression. Here
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
1173 result = value_as_long (fetch (0));
1175 result = this->get_tls_address (result);
1176 result_val = value_from_ulongest (address_type, result);
1180 offset = extract_signed_integer (op_ptr, 2, byte_order);
1189 offset = extract_signed_integer (op_ptr, 2, byte_order);
1192 dwarf_require_integral (value_type (val));
1193 if (value_as_long (val) != 0)
1206 /* Record the piece. */
1207 op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
1208 add_piece (8 * size, 0);
1210 /* Pop off the address/regnum, and reset the location
1212 if (this->location != DWARF_VALUE_LITERAL
1213 && this->location != DWARF_VALUE_OPTIMIZED_OUT)
1215 this->location = DWARF_VALUE_MEMORY;
1219 case DW_OP_bit_piece:
1221 uint64_t size, uleb_offset;
1223 /* Record the piece. */
1224 op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
1225 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uleb_offset);
1226 add_piece (size, uleb_offset);
1228 /* Pop off the address/regnum, and reset the location
1230 if (this->location != DWARF_VALUE_LITERAL
1231 && this->location != DWARF_VALUE_OPTIMIZED_OUT)
1233 this->location = DWARF_VALUE_MEMORY;
1237 case DW_OP_GNU_uninit:
1238 if (op_ptr != op_end)
1239 error (_("DWARF-2 expression error: DW_OP_GNU_uninit must always "
1240 "be the very last op."));
1242 this->initialized = 0;
1248 = (cu_offset) extract_unsigned_integer (op_ptr, 2, byte_order);
1250 this->dwarf_call (cu_off);
1257 = (cu_offset) extract_unsigned_integer (op_ptr, 4, byte_order);
1259 this->dwarf_call (cu_off);
1263 case DW_OP_GNU_variable_value:
1265 sect_offset sect_off
1266 = (sect_offset) extract_unsigned_integer (op_ptr,
1267 this->ref_addr_size,
1269 op_ptr += this->ref_addr_size;
1270 result_val = this->dwarf_variable_value (sect_off);
1274 case DW_OP_entry_value:
1275 case DW_OP_GNU_entry_value:
1278 CORE_ADDR deref_size;
1279 union call_site_parameter_u kind_u;
1281 op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
1282 if (op_ptr + len > op_end)
1283 error (_("DW_OP_entry_value: too few bytes available."));
1285 kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (op_ptr, op_ptr + len);
1286 if (kind_u.dwarf_reg != -1)
1289 this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_DWARF_REG,
1291 -1 /* deref_size */);
1295 kind_u.dwarf_reg = dwarf_block_to_dwarf_reg_deref (op_ptr,
1298 if (kind_u.dwarf_reg != -1)
1300 if (deref_size == -1)
1301 deref_size = this->addr_size;
1303 this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_DWARF_REG,
1304 kind_u, deref_size);
1308 error (_("DWARF-2 expression error: DW_OP_entry_value is "
1309 "supported only for single DW_OP_reg* "
1310 "or for DW_OP_breg*(0)+DW_OP_deref*"));
1313 case DW_OP_GNU_parameter_ref:
1315 union call_site_parameter_u kind_u;
1318 = (cu_offset) extract_unsigned_integer (op_ptr, 4, byte_order);
1320 this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_PARAM_OFFSET,
1322 -1 /* deref_size */);
1326 case DW_OP_const_type:
1327 case DW_OP_GNU_const_type:
1330 const gdb_byte *data;
1333 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
1334 cu_offset type_die_cu_off = (cu_offset) uoffset;
1340 type = get_base_type (type_die_cu_off, n);
1341 result_val = value_from_contents (type, data);
1345 case DW_OP_regval_type:
1346 case DW_OP_GNU_regval_type:
1350 op_ptr = safe_read_uleb128 (op_ptr, op_end, ®);
1351 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
1352 cu_offset type_die_cu_off = (cu_offset) uoffset;
1354 type = get_base_type (type_die_cu_off, 0);
1355 result_val = this->get_reg_value (type, reg);
1360 case DW_OP_GNU_convert:
1361 case DW_OP_reinterpret:
1362 case DW_OP_GNU_reinterpret:
1366 op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
1367 cu_offset type_die_cu_off = (cu_offset) uoffset;
1369 if (to_underlying (type_die_cu_off) == 0)
1370 type = address_type;
1372 type = get_base_type (type_die_cu_off, 0);
1374 result_val = fetch (0);
1377 if (op == DW_OP_convert || op == DW_OP_GNU_convert)
1378 result_val = value_cast (type, result_val);
1379 else if (type == value_type (result_val))
1383 else if (TYPE_LENGTH (type)
1384 != TYPE_LENGTH (value_type (result_val)))
1385 error (_("DW_OP_reinterpret has wrong size"));
1388 = value_from_contents (type,
1389 value_contents_all (result_val));
1393 case DW_OP_push_object_address:
1394 /* Return the address of the object we are currently observing. */
1395 result = this->get_object_address ();
1396 result_val = value_from_ulongest (address_type, result);
1400 error (_("Unhandled dwarf expression opcode 0x%x"), op);
1403 /* Most things push a result value. */
1404 gdb_assert (result_val != NULL);
1405 push (result_val, in_stack_memory);
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. */
1413 if (this->location == DWARF_VALUE_IMPLICIT_POINTER)
1414 add_piece (8 * this->addr_size, 0);
1416 this->recursion_depth--;
1417 gdb_assert (this->recursion_depth >= 0);
1421 _initialize_dwarf2expr (void)
1424 = gdbarch_data_register_post_init (dwarf_gdbarch_types_init);