diff options
author | Andrew Cagney <cagney@redhat.com> | 1997-04-18 12:24:52 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 1997-04-18 12:24:52 +0000 |
commit | 8517f62b166073b871c896fdd642798fae4a08bd (patch) | |
tree | 805af7156e712458e58d2ebe21fc7b0b73dee681 /sim/sh | |
parent | 2d3588808f00aaa6784f004aa940b862a11be3a2 (diff) | |
download | gdb-8517f62b166073b871c896fdd642798fae4a08bd.zip gdb-8517f62b166073b871c896fdd642798fae4a08bd.tar.gz gdb-8517f62b166073b871c896fdd642798fae4a08bd.tar.bz2 |
Ref gdb/11763 - can't stop a running simulator:
o Provide poll_quit callback to simulators
so that they can poll for SIGINT on
clueless OS's.
o Add sim_stop to simulators so that clients
can request a halt (eg gdbtk's STOP button)
Works for PPC!
o Re-arange remote-sim.c so that the
hard work is moved from gdbsim_resume()
to gdbsim_wait() (where it should be).
Diffstat (limited to 'sim/sh')
-rw-r--r-- | sim/sh/ChangeLog | 5 | ||||
-rw-r--r-- | sim/sh/interp.c | 34 |
2 files changed, 17 insertions, 22 deletions
diff --git a/sim/sh/ChangeLog b/sim/sh/ChangeLog index 91bcaef..91dfd34 100644 --- a/sim/sh/ChangeLog +++ b/sim/sh/ChangeLog @@ -1,3 +1,8 @@ +Fri Apr 18 14:14:49 1997 Andrew Cagney <cagney@b1.cygnus.com> + + * interp.c (sim_stop): New function. + (sim_resume): Use poll_quit for polling. + Thu Apr 17 03:32:04 1997 Doug Evans <dje@canuck.cygnus.com> * Makefile.in (SIM_OBJS): Add sim-load.o. diff --git a/sim/sh/interp.c b/sim/sh/interp.c index f50c76b..98f10e8 100644 --- a/sim/sh/interp.c +++ b/sim/sh/interp.c @@ -883,6 +883,14 @@ gotcall (from, to) #define MMASKB ((saved_state.asregs.msize -1) & ~0) +int +sim_stop (sd) + SIM_DESC sd; +{ + saved_state.asregs.exception = SIGINT; + return 1; +} + void sim_resume (sd, step, siggnal) SIM_DESC sd; @@ -896,9 +904,7 @@ sim_resume (sd, step, siggnal) register int prevlock; register int thislock; register unsigned int doprofile; -#if defined(__GO32__) || defined(WIN32) register int pollcount = 0; -#endif register int little_endian = little_endian_p; int tick_start = get_now (); @@ -959,32 +965,16 @@ sim_resume (sd, step, siggnal) pc += 2; -#ifdef __GO32__ pollcount++; if (pollcount > 1000) { pollcount = 0; - if (kbhit()) { - int k = getkey(); - if (k == 1) - saved_state.asregs.exception = SIGINT; - - } - } -#endif - /* FIXME: Testing for INSIDE_SIMULATOR is wrong. - Only one copy of interp.o is built. */ -#if defined (WIN32) && !defined(INSIDE_SIMULATOR) - pollcount++; - if (pollcount > 1000) - { - pollcount = 0; - if (win32pollquit()) + if ((*callback->poll_quit) != NULL + && (*callback->poll_quit) (sd)) { - control_c(); - } + sim_stop (sd); + } } -#endif #ifndef ACE_FAST prevlock = thislock; |