Uniquefy gdb.threads/attach-into-signal.exp
[deliverable/binutils-gdb.git] / gdb / dwarf2expr.c
index 752d7826014c3a1e714fc8c9f166771597ef1e9d..071b83fa7042a4bd5ac7c4cd14af4a7b2ab10c65 100644 (file)
@@ -1,6 +1,6 @@
 /* DWARF 2 Expression Evaluator.
 
-   Copyright (C) 2001-2013 Free Software Foundation, Inc.
+   Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
    Contributed by Daniel Berlin (dan@dberlin.org)
 
@@ -26,7 +26,6 @@
 #include "gdbcore.h"
 #include "dwarf2.h"
 #include "dwarf2expr.h"
-#include "gdb_assert.h"
 
 /* Local prototypes.  */
 
@@ -921,7 +920,8 @@ execute_stack_op (struct dwarf_expr_context *ctx,
        case DW_OP_breg31:
          {
            op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
-           result = (ctx->funcs->read_reg) (ctx->baton, op - DW_OP_breg0);
+           result = (ctx->funcs->read_addr_from_reg) (ctx->baton,
+                                                      op - DW_OP_breg0);
            result += offset;
            result_val = value_from_ulongest (address_type, result);
          }
@@ -930,7 +930,7 @@ execute_stack_op (struct dwarf_expr_context *ctx,
          {
            op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
            op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
-           result = (ctx->funcs->read_reg) (ctx->baton, reg);
+           result = (ctx->funcs->read_addr_from_reg) (ctx->baton, reg);
            result += offset;
            result_val = value_from_ulongest (address_type, result);
          }
@@ -955,8 +955,9 @@ execute_stack_op (struct dwarf_expr_context *ctx,
            if (ctx->location == DWARF_VALUE_MEMORY)
              result = dwarf_expr_fetch_address (ctx, 0);
            else if (ctx->location == DWARF_VALUE_REGISTER)
-             result = (ctx->funcs->read_reg) (ctx->baton,
-                                    value_as_long (dwarf_expr_fetch (ctx, 0)));
+             result = (ctx->funcs->read_addr_from_reg)
+                         (ctx->baton,
+                          value_as_long (dwarf_expr_fetch (ctx, 0)));
            else
              error (_("Not implemented: computing frame "
                       "base using explicit value operator"));
@@ -1439,10 +1440,7 @@ execute_stack_op (struct dwarf_expr_context *ctx,
            type_die.cu_off = uoffset;
 
            type = dwarf_get_base_type (ctx, type_die, 0);
-           result = (ctx->funcs->read_reg) (ctx->baton, reg);
-           result_val = value_from_ulongest (address_type, result);
-           result_val = value_from_contents (type,
-                                             value_contents_all (result_val));
+           result_val = ctx->funcs->get_reg_value (ctx->baton, type, reg);
          }
          break;
 
@@ -1479,6 +1477,12 @@ execute_stack_op (struct dwarf_expr_context *ctx,
          }
          break;
 
+       case DW_OP_push_object_address:
+         /* Return the address of the object we are currently observing.  */
+         result = (ctx->funcs->get_object_address) (ctx->baton);
+         result_val = value_from_ulongest (address_type, result);
+         break;
+
        default:
          error (_("Unhandled dwarf expression opcode 0x%x"), op);
        }
This page took 0.02457 seconds and 4 git commands to generate.