* gdb-if.c (hw_breakpoints): Remove.
authorKevin Buettner <kevinb@redhat.com>
Thu, 8 Aug 2013 00:10:01 +0000 (00:10 +0000)
committerKevin Buettner <kevinb@redhat.com>
Thu, 8 Aug 2013 00:10:01 +0000 (00:10 +0000)
(sim_store_register): Add an assert() to make sure PC is in range.
Delete code which referenced hw_breakpoints[].

sim/rl78/ChangeLog
sim/rl78/gdb-if.c

index 598b8a7..65eec15 100644 (file)
@@ -1,3 +1,9 @@
+2013-08-07  Kevin Buettner  <kevinb@redhat.com>
+
+       * gdb-if.c (hw_breakpoints): Remove.
+       (sim_store_register): Add an assert() to make sure PC is in range.
+       Delete code which referenced hw_breakpoints[].
+
 2013-06-03  Mike Frysinger  <vapier@gentoo.org>
 
        * aclocal.m4, configure: Regenerate.
index 04d4f0e..6b46600 100644 (file)
@@ -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 ();