The instruction "lock nopl (%rax)" should raise an exception. However, we don't do that since we do not check for lock prefix for nop instructions. The following patch adds this check and makes the behavior similar to hardware.
Signed-off-by: Pranith Kumar <bobby.pr...@gmail.com> --- target/i386/translate.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 1d1372fb43..76f4ccd3b4 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -7881,6 +7881,9 @@ static target_ulong disas_insn(CPUX86State *env, DisasContext *s, gen_nop_modrm(env, s, modrm); break; case 0x119: case 0x11c ... 0x11f: /* nop (multi byte) */ + if (prefixes & PREFIX_LOCK) { + goto illegal_op; + } modrm = cpu_ldub_code(env, s->pc++); gen_nop_modrm(env, s, modrm); break; -- 2.13.0