diff options
-rw-r--r-- | sim/mips/ChangeLog | 6 | ||||
-rw-r--r-- | sim/mips/interp.c | 14 | ||||
-rw-r--r-- | sim/mips/sim-main.h | 2 |
3 files changed, 15 insertions, 7 deletions
diff --git a/sim/mips/ChangeLog b/sim/mips/ChangeLog index 8a3e458..f3cb609 100644 --- a/sim/mips/ChangeLog +++ b/sim/mips/ChangeLog @@ -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. diff --git a/sim/mips/interp.c b/sim/mips/interp.c index 382ad7e..a032763 100644 --- a/sim/mips/interp.c +++ b/sim/mips/interp.c @@ -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). */ diff --git a/sim/mips/sim-main.h b/sim/mips/sim-main.h index 7db51a1..9e87fbf 100644 --- a/sim/mips/sim-main.h +++ b/sim/mips/sim-main.h @@ -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); |