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;
|
||||
uint8_t cc_live;
|
||||
|
||||
#ifdef CONFIG_USER_ONLY
|
||||
if (limit) { --limit; }
|
||||
#endif
|
||||
s->has_modrm = false;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
static bool first = true;
|
||||
static unsigned long limit;
|
||||
|
||||
#include "decode-new.h"
|
||||
#include "emit.c.inc"
|
||||
#include "decode-new.c.inc"
|
||||
@ -3124,15 +3127,39 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
|
||||
|
||||
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:
|
||||
s->prefix = prefixes;
|
||||
b = x86_ldub_code(env, s);
|
||||
/* Collect prefixes. */
|
||||
switch (b) {
|
||||
default:
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
use_new &= b <= limit;
|
||||
#endif
|
||||
if (use_new && 0) {
|
||||
disas_insn_new(s, cpu, b);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 0x0f:
|
||||
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;
|
||||
case 0xf3:
|
||||
prefixes |= PREFIX_REPZ;
|
||||
|
Loading…
Reference in New Issue
Block a user