aboutsummaryrefslogtreecommitdiff
path: root/gdbserver
diff options
context:
space:
mode:
Diffstat (limited to 'gdbserver')
-rw-r--r--gdbserver/ax.cc12
-rw-r--r--gdbserver/ax.h3
2 files changed, 10 insertions, 5 deletions
diff --git a/gdbserver/ax.cc b/gdbserver/ax.cc
index 38ebfbb..fba5b4a 100644
--- a/gdbserver/ax.cc
+++ b/gdbserver/ax.cc
@@ -1112,22 +1112,26 @@ gdb_eval_agent_expr (struct eval_agent_expr_context *ctx,
break;
case gdb_agent_op_ref8:
- agent_mem_read (ctx, cnv.u8.bytes, (CORE_ADDR) top, 1);
+ if (agent_mem_read (ctx, cnv.u8.bytes, (CORE_ADDR) top, 1) != 0)
+ return expr_eval_invalid_memory_access;
top = cnv.u8.val;
break;
case gdb_agent_op_ref16:
- agent_mem_read (ctx, cnv.u16.bytes, (CORE_ADDR) top, 2);
+ if (agent_mem_read (ctx, cnv.u16.bytes, (CORE_ADDR) top, 2) != 0)
+ return expr_eval_invalid_memory_access;
top = cnv.u16.val;
break;
case gdb_agent_op_ref32:
- agent_mem_read (ctx, cnv.u32.bytes, (CORE_ADDR) top, 4);
+ if (agent_mem_read (ctx, cnv.u32.bytes, (CORE_ADDR) top, 4) != 0)
+ return expr_eval_invalid_memory_access;
top = cnv.u32.val;
break;
case gdb_agent_op_ref64:
- agent_mem_read (ctx, cnv.u64.bytes, (CORE_ADDR) top, 8);
+ if (agent_mem_read (ctx, cnv.u64.bytes, (CORE_ADDR) top, 8) != 0)
+ return expr_eval_invalid_memory_access;
top = cnv.u64.val;
break;
diff --git a/gdbserver/ax.h b/gdbserver/ax.h
index 8e64a7a..c98e36a 100644
--- a/gdbserver/ax.h
+++ b/gdbserver/ax.h
@@ -41,7 +41,8 @@ enum eval_result_type
expr_eval_unhandled_opcode,
expr_eval_unrecognized_opcode,
expr_eval_divide_by_zero,
- expr_eval_invalid_goto
+ expr_eval_invalid_goto,
+ expr_eval_invalid_memory_access
};
struct agent_expr