2001-02-19 Ben Elliston <bje@redhat.com>
authorBen Elliston <bje@au.ibm.com>
Mon, 19 Feb 2001 21:57:03 +0000 (21:57 +0000)
committerBen Elliston <bje@au.ibm.com>
Mon, 19 Feb 2001 21:57:03 +0000 (21:57 +0000)
* sim-main.h (sim_monitor): Return an int.
* interp.c (sim_monitor): Add return values.
(signal_exception): Handle error conditions from sim_monitor.

sim/mips/ChangeLog
sim/mips/interp.c
sim/mips/sim-main.h

index 8a3e458f20adf13115d945346d9969d4fe223ca8..f3cb60918dc4f082ccb50c5fe79241fb3c3b2116 100644 (file)
@@ -1,3 +1,9 @@
+2001-02-19  Ben Elliston  <bje@redhat.com>
+
+       * sim-main.h (sim_monitor): Return an int.
+       * interp.c (sim_monitor): Add return values.
+       (signal_exception): Handle error conditions from sim_monitor.
+
 2001-02-08  Ben Elliston  <bje@redhat.com>
 
        * sim-main.c (load_memory): Pass cia to sim_core_read* functions.
index 382ad7e162ab00affbc57d3a0158971904f5d8d6..a0327636506db684876e36ee3e51c08464fe97bf 100644 (file)
@@ -1128,7 +1128,7 @@ Recognized firmware names are: `idt', `pmon', `lsipmon', and `none'.\n",
 
 
 /* Simple monitor interface (currently setup for the IDT and PMON monitors) */
-void
+int
 sim_monitor (SIM_DESC sd,
             sim_cpu *cpu,
             address_word cia,
@@ -1358,11 +1358,10 @@ sim_monitor (SIM_DESC sd,
       }
 
     default:
-      sim_io_error (sd, "TODO: sim_monitor(%d) : PC = 0x%s\n",
-                   reason, pr_addr(cia));
-      break;
+      /* Unknown reason.  */
+      return 0;
   }
-  return;
+  return 1;
 }
 
 /* Store a word into memory.  */
@@ -1713,7 +1712,10 @@ signal_exception (SIM_DESC sd,
           perform this magic. */
        if ((instruction & RSVD_INSTRUCTION_MASK) == RSVD_INSTRUCTION)
         {
-          sim_monitor (SD, CPU, cia, ((instruction >> RSVD_INSTRUCTION_ARG_SHIFT) & RSVD_INSTRUCTION_ARG_MASK) );
+          int reason = (instruction >> RSVD_INSTRUCTION_ARG_SHIFT) & RSVD_INSTRUCTION_ARG_MASK;
+          if (!sim_monitor (SD, CPU, cia, reason))
+            sim_io_error (sd, "sim_monitor: unhandled reason = %d, pc = 0x%s\n", reason, pr_addr (cia));
+
           /* NOTE: This assumes that a branch-and-link style
              instruction was used to enter the vector (which is the
              case with the current IDT monitor). */
index 7db51a1413588518f4154ce677a5e974bcb4e1fd..9e87fbf109f4311e7128cfad59009be08d3ca13e 100644 (file)
@@ -690,7 +690,7 @@ void decode_coproc PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, unsigne
 #define DecodeCoproc(instruction) \
 decode_coproc (SD, CPU, cia, (instruction))
 
-void sim_monitor (SIM_DESC sd, sim_cpu *cpu, address_word cia, unsigned int arg);
+int sim_monitor (SIM_DESC sd, sim_cpu *cpu, address_word cia, unsigned int arg);