Index: sim/rl78/gdb-if.c |
diff --git a/sim/rl78/gdb-if.c b/sim/rl78/gdb-if.c |
index e2a5ea0985ee3fe2a5643c98bde63cc45eb2bb46..6b4660063bb3fa58f232a6edfca253ca3d3ad4a9 100644 |
--- a/sim/rl78/gdb-if.c |
+++ b/sim/rl78/gdb-if.c |
@@ -1,6 +1,6 @@ |
/* gdb-if.c -- sim interface to GDB. |
-Copyright (C) 2011-2012 Free Software Foundation, Inc. |
+Copyright (C) 2011-2013 Free Software Foundation, Inc. |
Contributed by Red Hat, Inc. |
This file is part of the GNU simulators. |
@@ -55,8 +55,6 @@ static struct sim_state the_minisim = { |
static int open; |
-static unsigned char hw_breakpoints[MEM_SIZE/8]; |
- |
static struct host_callback_struct *host_callbacks; |
/* Open an instance of the sim. For this sim, only one instance |
@@ -341,7 +339,15 @@ sim_store_register (SIM_DESC sd, int regno, unsigned char *buf, int length) |
val = get_le (buf, length); |
if (regno == sim_rl78_pc_regnum) |
- pc = val; |
+ { |
+ pc = val; |
+ |
+ /* The rl78 program counter is 20 bits wide. Ensure that GDB |
+ hasn't picked up any stray bits. This has occurred when performing |
+ a GDB "return" command in which the return address is obtained |
+ from a 32-bit container on the stack. */ |
+ assert ((pc & ~0x0fffff) == 0); |
+ } |
else |
memory[reg_addr (regno)] = val; |
return size; |
@@ -456,13 +462,6 @@ sim_resume (SIM_DESC sd, int step, int sig_to_deliver) |
break; |
} |
- if (hw_breakpoints[pc >> 3] |
- && (hw_breakpoints[pc >> 3] & (1 << (pc & 0x7)))) |
- { |
- reason = sim_stopped; |
- siggnal = GDB_SIGNAL_TRAP; |
- break; |
- } |
rc = setjmp (decode_jmp_buf); |
if (rc == 0) |
rc = decode_opcode (); |
@@ -567,7 +566,7 @@ sim_do_command (SIM_DESC sd, char *cmd) |
/* Stub for command completion. */ |
char ** |
-sim_complete_command (SIM_DESC sd, char *text, char *word) |
+sim_complete_command (SIM_DESC sd, const char *text, const char *word) |
{ |
return NULL; |
} |