# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1169048499 0
# Node ID 6d832b092857c25cfee17d66a186c19a8d372ebe
# Parent 8690e3448971b254558f1b233801b47e045ba9c2
[XEN] A few emulator fixes.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
xen/arch/x86/x86_emulate.c | 21 +++++++++++++--------
1 files changed, 13 insertions(+), 8 deletions(-)
diff -r 8690e3448971 -r 6d832b092857 xen/arch/x86/x86_emulate.c
--- a/xen/arch/x86/x86_emulate.c Wed Jan 17 15:09:50 2007 +0000
+++ b/xen/arch/x86/x86_emulate.c Wed Jan 17 15:41:39 2007 +0000
@@ -1156,7 +1156,9 @@ x86_emulate(
break;
}
- case 0x80 ... 0x83: /* Grp1 */
+ case 0x82: /* Grp1 (x86/32 only) */
+ generate_exception_if(mode_64bit(), EXC_UD);
+ case 0x80: case 0x81: case 0x83: /* Grp1 */
switch ( modrm_reg & 7 )
{
case 0: goto add;
@@ -1477,7 +1479,7 @@ x86_emulate(
emulate_1op("dec", dst, _regs.eflags);
break;
case 2: /* call (near) */
- case 3: /* jmp (near) */
+ case 4: /* jmp (near) */
if ( ((op_bytes = dst.bytes) != 8) && mode_64bit() )
{
dst.bytes = op_bytes = 8;
@@ -2049,12 +2051,13 @@ x86_emulate(
break;
case 0xba: /* Grp8 */
- switch ( modrm_reg & 3 )
- {
- case 0: goto bt;
- case 1: goto bts;
- case 2: goto btr;
- case 3: goto btc;
+ switch ( modrm_reg & 7 )
+ {
+ case 4: goto bt;
+ case 5: goto bts;
+ case 6: goto btr;
+ case 7: goto btc;
+ default: generate_exception_if(1, EXC_UD);
}
break;
@@ -2103,6 +2106,7 @@ x86_emulate(
#if defined(__i386__)
{
unsigned long old_lo, old_hi;
+ generate_exception_if((modrm_reg & 7) != 1, EXC_UD);
if ( (rc = ops->read(ea.mem.seg, ea.mem.off+0, &old_lo, 4, ctxt)) ||
(rc = ops->read(ea.mem.seg, ea.mem.off+4, &old_hi, 4, ctxt)) )
goto done;
@@ -2129,6 +2133,7 @@ x86_emulate(
#elif defined(__x86_64__)
{
unsigned long old, new;
+ generate_exception_if((modrm_reg & 7) != 1, EXC_UD);
if ( (rc = ops->read(ea.mem.seg, ea.mem.off, &old, 8, ctxt)) != 0 )
goto done;
if ( ((uint32_t)(old>>0) != (uint32_t)_regs.eax) ||
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|