Change longjmp param/setjmp return value used for simulator restart from 0 to 2.
authorGavin Romig-Koch <gavin@redhat.com>
Thu, 22 May 1997 13:16:03 +0000 (13:16 +0000)
committerGavin Romig-Koch <gavin@redhat.com>
Thu, 22 May 1997 13:16:03 +0000 (13:16 +0000)
sim/common/ChangeLog
sim/common/sim-engine.c
sim/common/sim-resume.c

index 6dfbdcd3a28fe1445101cb7677b63707f34c1ff6..89a67590f0b8906e3f92b66a931c3b0ee34f6b1c 100644 (file)
@@ -1,3 +1,9 @@
+Thu May 22 09:12:16 1997  Gavin Koch  <gavin@cygnus.com>
+
+       * sim-engine.c (sim_engine_restart): 
+       * sim-resume.c (sim_resume): Change longjmp param/setjmp 
+       return value used for simulator restart from 0 to 2.
+
 Wed May 21 08:47:30 1997  Andrew Cagney  <cagney@b1.cygnus.com>
 
        * cgen-scache.c (scache_option_handler): Add is_command arg.
index 46f69e5c78815a8b10f03dc3d7de93c7c746053e..6d6343e32bacdb4cadadeede94220d6724c7bcdd 100644 (file)
@@ -18,11 +18,12 @@ You should have received a copy of the GNU General Public License along
 with this program; if not, write to the Free Software Foundation, Inc.,
 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "sim-main.h"
-
 #include <stdio.h>
 #include <signal.h>
 
+#include "sim-main.h"
+#include "sim-assert.h"
+
 
 /* Generic halt */
 
@@ -35,6 +36,7 @@ sim_engine_halt (SIM_DESC sd,
                 int sigrc)
 {
   sim_engine *engine = STATE_ENGINE (sd);
+  ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
   if (engine->jmpbuf != NULL)
     {
       jmp_buf *halt_buf = engine->jmpbuf;
@@ -59,13 +61,14 @@ sim_engine_restart (SIM_DESC sd,
                    sim_cia cia)
 {
   sim_engine *engine = STATE_ENGINE (sd);
+  ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
   if (engine->jmpbuf != NULL)
     {
       jmp_buf *halt_buf = engine->jmpbuf;
       engine->last_cpu = last_cpu;
       engine->next_cpu = next_cpu;
       SIM_ENGINE_RESTART_HOOK (sd, last_cpu, cia);
-      longjmp(*halt_buf, 0);
+      longjmp(*halt_buf, 2);
     }
   else
     sim_io_error (sd, "sim_restart - bad long jump");
@@ -81,6 +84,7 @@ sim_engine_abort (SIM_DESC sd,
                  const char *fmt,
                  ...)
 {
+  ASSERT (sd == NULL || STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
   if (sd == NULL)
     {
       va_list ap;
index e1004b7b61034e7666dcb024bed8867216946527..ebc9ce6740a4cf9abc8395c2afbc64f44136da94 100644 (file)
@@ -18,16 +18,18 @@ You should have received a copy of the GNU General Public License along
 with this program; if not, write to the Free Software Foundation, Inc.,
 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "sim-main.h"
-
 #include <signal.h>
 
+#include "sim-main.h"
+#include "sim-assert.h"
+
 /* Halt the simulator after just one instruction */
 
 static void
 has_stepped (SIM_DESC sd,
             void *data)
 {
+  ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
   sim_engine_halt (sd, NULL, NULL, NULL_CIA, sim_stopped, SIGTRAP);
 }
 
@@ -41,6 +43,9 @@ sim_resume (SIM_DESC sd,
 {
   sim_engine *engine = STATE_ENGINE (sd);
   jmp_buf buf;
+  int jmpval;
+
+  ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
 
   /* we only want to be single stepping the simulator once */
   if (engine->stepper != NULL)
@@ -52,8 +57,14 @@ sim_resume (SIM_DESC sd,
     engine->stepper = sim_events_schedule (sd, 1, has_stepped, sd);
 
   /* run/resume the simulator */
+  /*   jmpval: 0 (initial use) start simulator
+               1               halt simulator
+               2               restart simulator
+             */
+
   engine->jmpbuf = &buf;
-  if (! setjmp (buf))
+  jmpval = setjmp (buf);
+  if (jmpval == 0 || jmpval == 2)
     {
       int last_cpu_nr = sim_engine_last_cpu_nr (sd);
       int next_cpu_nr = sim_engine_next_cpu_nr (sd);