better vm86 support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@69 c046a42c-6fe2-441c-8c8c-71466251a162
diff --git a/linux-user/signal.c b/linux-user/signal.c
index 04779c8..6a81b11 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -198,7 +198,7 @@
{
int host_sig;
host_sig = target_to_host_signal(sig);
- fprintf(stderr, "gemu: uncaught target signal %d (%s) - exiting\n",
+ fprintf(stderr, "qemu: uncaught target signal %d (%s) - exiting\n",
sig, strsignal(host_sig));
#if 1
_exit(-host_sig);
@@ -223,7 +223,7 @@
target_ulong handler;
#if defined(DEBUG_SIGNAL)
- fprintf(stderr, "queue_sigal: sig=%d\n",
+ fprintf(stderr, "queue_signal: sig=%d\n",
sig);
#endif
k = &sigact_table[sig - 1];
@@ -317,7 +317,7 @@
if (sig < 1 || sig > TARGET_NSIG)
return;
#if defined(DEBUG_SIGNAL)
- fprintf(stderr, "gemu: got signal %d\n", sig);
+ fprintf(stderr, "qemu: got signal %d\n", sig);
dump_regs(puc);
#endif
host_to_target_siginfo_noswap(&tinfo, info);
@@ -538,7 +538,6 @@
/* non-iBCS2 extensions.. */
err |= __put_user(mask, &sc->oldmask);
err |= __put_user(/*current->thread.cr2*/ 0, &sc->cr2);
-
return err;
}
@@ -859,7 +858,7 @@
handle_signal:
#ifdef DEBUG_SIGNAL
- fprintf(stderr, "gemu: process signal %d\n", sig);
+ fprintf(stderr, "qemu: process signal %d\n", sig);
#endif
/* dequeue signal */
q = k->first;
@@ -893,6 +892,14 @@
end of the signal execution (see do_sigreturn) */
host_to_target_sigset(&target_old_set, &old_set);
+ /* if the CPU is in VM86 mode, we restore the 32 bit values */
+#ifdef TARGET_I386
+ {
+ CPUX86State *env = cpu_env;
+ if (env->eflags & VM_MASK)
+ save_v86_state(env);
+ }
+#endif
/* prepare the stack frame of the virtual CPU */
if (k->sa.sa_flags & TARGET_SA_SIGINFO)
setup_rt_frame(sig, k, &q->info, &target_old_set, cpu_env);