From e656ecf90c49bac5eb357cec0020b37423b0e0f8 Mon Sep 17 00:00:00 2001 From: David Edelsohn Date: Mon, 11 Mar 1996 17:54:45 +0000 Subject: [PATCH] * compile.c (sim_resume): Watch for calls to abort. * run.c: #include . (main): Abort if program got SIGILL. --- sim/h8300/ChangeLog | 30 +++++++++++++++++++++++++ sim/h8300/compile.c | 55 ++++++++++++++++++++++++++++++++++++--------- sim/h8300/run.c | 8 +++++++ 3 files changed, 83 insertions(+), 10 deletions(-) diff --git a/sim/h8300/ChangeLog b/sim/h8300/ChangeLog index 8a166c9581..5ac0fb0e2c 100644 --- a/sim/h8300/ChangeLog +++ b/sim/h8300/ChangeLog @@ -1,3 +1,33 @@ +Mon Mar 11 09:53:25 1996 Doug Evans + + * compile.c (sim_resume): Watch for calls to abort. + * run.c: #include . + (main): Abort if program got SIGILL. + +Wed Feb 21 12:15:00 1996 Ian Lance Taylor + + * configure: Regenerate with autoconf 2.7. + +Thu Jan 4 11:52:53 1996 Doug Evans + + * inst.h (MPOWER,MSIZE): Deleted. + (H8300{,H}_MSIZE): Define. + * compile.c (memory_size): New static global. + (init_pointers): Set memory size from one of H8300{,H}_MSIZE. + (sim_write,sim_read): Use memory_size. + +Fri Oct 13 15:03:19 1995 steve chamberlain + + * compile.c (sim_set_callbacks): New. + +Tue Oct 10 11:11:26 1995 Fred Fish + + * Makefile.in (BISON): Remove macro. + +Wed Sep 20 13:35:02 1995 Ian Lance Taylor + + * Makefile.in (maintainer-clean): New synonym for realclean. + Fri Sep 8 12:18:53 1995 Ian Lance Taylor * Makefile.in (install): Don't install in $(tooldir). diff --git a/sim/h8300/compile.c b/sim/h8300/compile.c index 1970156c8e..bfeb74ca3f 100644 --- a/sim/h8300/compile.c +++ b/sim/h8300/compile.c @@ -17,13 +17,18 @@ * AND FITNESS FOR A PARTICULAR PURPOSE. */ +#include "config.h" + #include -#ifndef WIN32 -#include +#ifdef HAVE_TIME_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include #endif #include #include "ansidecl.h" -#include "sysdep.h" +#include "callback.h" #include "remote-sim.h" #include "bfd.h" @@ -79,13 +84,13 @@ static cpu_state_type cpu; int h8300hmode = 0; +static int memory_size; + static int get_now () { #ifndef WIN32 - struct tms b; - return time (0); #endif return 0; @@ -665,10 +670,18 @@ init_pointers () init = 1; littleendian.i = 1; - cpu.memory = (unsigned char *) calloc (sizeof (char), MSIZE); - cpu.cache_idx = (unsigned short *) calloc (sizeof (short), MSIZE); + if (h8300hmode) + memory_size = H8300H_MSIZE; + else + memory_size = H8300_MSIZE; + cpu.memory = (unsigned char *) calloc (sizeof (char), memory_size); + cpu.cache_idx = (unsigned short *) calloc (sizeof (short), memory_size); + + /* `msize' must be a power of two */ + if ((memory_size & (memory_size - 1)) != 0) + abort (); + cpu.mask = memory_size - 1; - cpu.mask = (1 << MPOWER) - 1; for (i = 0; i < 9; i++) { cpu.regs[i] = 0; @@ -1241,6 +1254,11 @@ sim_resume (step, siggnal) cpu.exception = SIGILL; goto end; case O (O_SLEEP, SB): + if ((short) cpu.regs[0] == -255) + cpu.exception = SIGILL; + else + cpu.exception = SIGTRAP; + goto end; case O (O_BPT, SB): cpu.exception = SIGTRAP; goto end; @@ -1556,7 +1574,7 @@ sim_write (addr, buffer, size) int i; init_pointers (); - if (addr < 0 || addr + size > MSIZE) + if (addr < 0 || addr + size > memory_size) return 0; for (i = 0; i < size; i++) { @@ -1573,7 +1591,7 @@ sim_read (addr, buffer, size) int size; { init_pointers (); - if (addr < 0 || addr + size > MSIZE) + if (addr < 0 || addr + size > memory_size) return 0; memcpy (buffer, cpu.memory + addr, size); return size; @@ -1816,3 +1834,20 @@ sim_create_inferior (start_address, argv, env) { cpu.pc = start_address; } + +void +sim_do_command (cmd) + char *cmd; +{ + printf_filtered ("This simulator does not accept any commands.\n"); +} + + + +void +sim_set_callbacks (ptr) +struct host_callback_struct *ptr; +{ + +} + diff --git a/sim/h8300/run.c b/sim/h8300/run.c index 97841269a7..b7dd77cca4 100644 --- a/sim/h8300/run.c +++ b/sim/h8300/run.c @@ -22,6 +22,7 @@ #include #include +#include #ifdef HAVE_STDLIB_H #include #endif @@ -45,6 +46,8 @@ main (ac, av) int verbose = 0; int trace = 0; char *name = ""; + int sigrc; + enum sim_stop reason; while ((i = getopt (ac, av, "c:htv")) != EOF) switch (i) @@ -95,6 +98,11 @@ main (ac, av) sim_resume(0,0); if (verbose) sim_info (verbose - 1); + sim_stop_reason (&reason, &sigrc); + /* FIXME: this test is insufficient but we can't do much + about it until sim_stop_reason is cleaned up. */ + if (sigrc == SIGILL) + abort (); return 0; } }