aboutsummaryrefslogtreecommitdiff
path: root/linux-user/vm86.c
diff options
context:
space:
mode:
Diffstat (limited to 'linux-user/vm86.c')
-rw-r--r--linux-user/vm86.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/linux-user/vm86.c b/linux-user/vm86.c
index 8316117e4d..f243af877c 100644
--- a/linux-user/vm86.c
+++ b/linux-user/vm86.c
@@ -178,7 +178,7 @@ static inline unsigned int get_vflags(CPUX86State *env)
/* handle VM86 interrupt (NOTE: the CPU core currently does not
support TSS interrupt revectoring, so this code is always executed) */
-void do_int(CPUX86State *env, int intno)
+static void do_int(CPUX86State *env, int intno)
{
TaskState *ts = env->opaque;
uint32_t *int_ptr, segoffs;
@@ -225,6 +225,15 @@ void do_int(CPUX86State *env, int intno)
return_to_32bit(env, TARGET_VM86_INTx | (intno << 8));
}
+void handle_vm86_trap(CPUX86State *env, int trapno)
+{
+ if (trapno == 1 || trapno == 3) {
+ return_to_32bit(env, TARGET_VM86_TRAP + (trapno << 8));
+ } else {
+ do_int(env, trapno);
+ }
+}
+
#define CHECK_IF_IN_TRAP(disp) \
if ((tswap32(ts->target_v86->vm86plus.flags) & TARGET_vm86dbg_active) && \
(tswap32(ts->target_v86->vm86plus.flags) & TARGET_vm86dbg_TFpendig)) \