Ramon van Handel wrote:
[Snip]
> Outstanding issues:
>
> - For some reason, an aspect of the ICE stopped
> working when the I/O emulation was implemented:
> if you press "ctrl-c" in GDB, it won't stop like
> it's supposed to if you're running the virtcode
> kernel, but will give a "instruction not implemented"
> message. I think this is a race with the emulation
> code --- SIGIO probably occurs when the VM
> is NOT in the guest context... or something like
> that. The virtcode does a lot of I/O polling, after
> all. This need to be fixed --- ideas, anyone ?
Well, maybe it's not the solution, but the little patch below
lets you break the program more often than not... It seems
that we always come back from ioctl() call with (ret == 1)
so the break_vm gets lost.
still sometimes you get a first ^C ignored and the following
gives :
Interrupted while waiting for the program.
Give up (and stop debugging it)? (y or n) n
Which I understand as a lost SIGIO/break_vm. Is this a real
race ?
--- freemware-20000117/user/user.c Mon Jan 17 20:55:58 2000
+++ freemware/user/user.c Mon Jan 17 22:26:24 2000
@@ -641,6 +641,9 @@
return;
}
+ if (break_vm) /* force debug_exception() call on break_vm */
+ ret = 0;
+
/* ret == 1 => emulation in user space; info in context.event_info */
if (ret == 1)
{