diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kvm/x86_emulate.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/x86/kvm/x86_emulate.c b/arch/x86/kvm/x86_emulate.c index 3ac2f1485223..0630d2198763 100644 --- a/arch/x86/kvm/x86_emulate.c +++ b/arch/x86/kvm/x86_emulate.c | |||
@@ -286,7 +286,8 @@ static u16 group_table[] = { | |||
286 | ByteOp | DstMem | SrcNone | ModRM, ByteOp | DstMem | SrcNone | ModRM, | 286 | ByteOp | DstMem | SrcNone | ModRM, ByteOp | DstMem | SrcNone | ModRM, |
287 | 0, 0, 0, 0, 0, 0, | 287 | 0, 0, 0, 0, 0, 0, |
288 | [Group5*8] = | 288 | [Group5*8] = |
289 | DstMem | SrcNone | ModRM, DstMem | SrcNone | ModRM, 0, 0, | 289 | DstMem | SrcNone | ModRM, DstMem | SrcNone | ModRM, |
290 | SrcMem | ModRM | Stack, 0, | ||
290 | SrcMem | ModRM, 0, SrcMem | ModRM | Stack, 0, | 291 | SrcMem | ModRM, 0, SrcMem | ModRM | Stack, 0, |
291 | [Group7*8] = | 292 | [Group7*8] = |
292 | 0, 0, ModRM | SrcMem, ModRM | SrcMem, | 293 | 0, 0, ModRM | SrcMem, ModRM | SrcMem, |
@@ -1162,6 +1163,14 @@ static inline int emulate_grp45(struct x86_emulate_ctxt *ctxt, | |||
1162 | case 1: /* dec */ | 1163 | case 1: /* dec */ |
1163 | emulate_1op("dec", c->dst, ctxt->eflags); | 1164 | emulate_1op("dec", c->dst, ctxt->eflags); |
1164 | break; | 1165 | break; |
1166 | case 2: /* call near abs */ { | ||
1167 | long int old_eip; | ||
1168 | old_eip = c->eip; | ||
1169 | c->eip = c->src.val; | ||
1170 | c->src.val = old_eip; | ||
1171 | emulate_push(ctxt); | ||
1172 | break; | ||
1173 | } | ||
1165 | case 4: /* jmp abs */ | 1174 | case 4: /* jmp abs */ |
1166 | c->eip = c->src.val; | 1175 | c->eip = c->src.val; |
1167 | break; | 1176 | break; |