target/i386: reintroduce debugging mechanism
Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
8b5de7ea56
commit
445457693c
@ -1689,6 +1689,9 @@ static void disas_insn_new(DisasContext *s, CPUState *cpu, int b)
|
|||||||
X86DecodeFunc decode_func = decode_root;
|
X86DecodeFunc decode_func = decode_root;
|
||||||
uint8_t cc_live;
|
uint8_t cc_live;
|
||||||
|
|
||||||
|
#ifdef CONFIG_USER_ONLY
|
||||||
|
if (limit) { --limit; }
|
||||||
|
#endif
|
||||||
s->has_modrm = false;
|
s->has_modrm = false;
|
||||||
|
|
||||||
next_byte:
|
next_byte:
|
||||||
|
@ -2969,6 +2969,9 @@ static void gen_sty_env_A0(DisasContext *s, int offset, bool align)
|
|||||||
tcg_gen_qemu_st_i128(t, s->tmp0, mem_index, mop);
|
tcg_gen_qemu_st_i128(t, s->tmp0, mem_index, mop);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool first = true;
|
||||||
|
static unsigned long limit;
|
||||||
|
|
||||||
#include "decode-new.h"
|
#include "decode-new.h"
|
||||||
#include "emit.c.inc"
|
#include "emit.c.inc"
|
||||||
#include "decode-new.c.inc"
|
#include "decode-new.c.inc"
|
||||||
@ -3124,15 +3127,39 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
|
|||||||
|
|
||||||
prefixes = 0;
|
prefixes = 0;
|
||||||
|
|
||||||
|
if (first) {
|
||||||
|
const char *limit_str = getenv("QEMU_I386_LIMIT");
|
||||||
|
limit = limit_str ? atol(limit_str) : -1;
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
bool use_new = true;
|
||||||
|
#ifdef CONFIG_USER_ONLY
|
||||||
|
use_new &= limit > 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
next_byte:
|
next_byte:
|
||||||
s->prefix = prefixes;
|
s->prefix = prefixes;
|
||||||
b = x86_ldub_code(env, s);
|
b = x86_ldub_code(env, s);
|
||||||
/* Collect prefixes. */
|
/* Collect prefixes. */
|
||||||
switch (b) {
|
switch (b) {
|
||||||
default:
|
default:
|
||||||
|
#ifndef CONFIG_USER_ONLY
|
||||||
|
use_new &= b <= limit;
|
||||||
|
#endif
|
||||||
|
if (use_new && 0) {
|
||||||
|
disas_insn_new(s, cpu, b);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 0x0f:
|
case 0x0f:
|
||||||
b = x86_ldub_code(env, s) + 0x100;
|
b = x86_ldub_code(env, s) + 0x100;
|
||||||
|
#ifndef CONFIG_USER_ONLY
|
||||||
|
use_new &= b <= limit;
|
||||||
|
#endif
|
||||||
|
if (use_new && 0) {
|
||||||
|
disas_insn_new(s, cpu, b);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 0xf3:
|
case 0xf3:
|
||||||
prefixes |= PREFIX_REPZ;
|
prefixes |= PREFIX_REPZ;
|
||||||
|
Loading…
Reference in New Issue
Block a user