mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
target/i386: Move helper_check_io to sysemu
The we never allow i/o from user-only, and the tss check that helper_check_io does will always fail. Use an ifdef within gen_check_io and return false, indicating that an exception is known to be raised. Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Message-Id: <20210514151342.384376-50-richard.henderson@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
e497803556
commit
d76b9c6f07
4 changed files with 40 additions and 30 deletions
|
@ -203,7 +203,6 @@ STUB_HELPER(read_crN, TCGv ret, TCGv_env env, TCGv_i32 reg)
|
|||
STUB_HELPER(set_dr, TCGv_env env, TCGv_i32 reg, TCGv val)
|
||||
STUB_HELPER(stgi, TCGv_env env)
|
||||
STUB_HELPER(svm_check_intercept, TCGv_env env, TCGv_i32 type)
|
||||
STUB_HELPER(svm_check_io, TCGv_env env, TCGv_i32 port, TCGv_i32 p, TCGv_i32 a)
|
||||
STUB_HELPER(vmload, TCGv_env env, TCGv_i32 aflag)
|
||||
STUB_HELPER(vmmcall, TCGv_env env)
|
||||
STUB_HELPER(vmrun, TCGv_env env, TCGv_i32 aflag, TCGv_i32 pc_ofs)
|
||||
|
@ -217,6 +216,7 @@ static void gen_jr(DisasContext *s, TCGv dest);
|
|||
static void gen_jmp(DisasContext *s, target_ulong eip);
|
||||
static void gen_jmp_tb(DisasContext *s, target_ulong eip, int tb_num);
|
||||
static void gen_op(DisasContext *s1, int op, MemOp ot, int d);
|
||||
static void gen_exception_gpf(DisasContext *s);
|
||||
|
||||
/* i386 arith/logic operations */
|
||||
enum {
|
||||
|
@ -681,6 +681,14 @@ static void gen_helper_out_func(MemOp ot, TCGv_i32 v, TCGv_i32 n)
|
|||
static bool gen_check_io(DisasContext *s, MemOp ot, TCGv_i32 port,
|
||||
uint32_t svm_flags)
|
||||
{
|
||||
#ifdef CONFIG_USER_ONLY
|
||||
/*
|
||||
* We do not implement the ioperm(2) syscall, so the TSS check
|
||||
* will always fail.
|
||||
*/
|
||||
gen_exception_gpf(s);
|
||||
return false;
|
||||
#else
|
||||
if (PE(s) && (CPL(s) > IOPL(s) || VM86(s))) {
|
||||
gen_helper_check_io(cpu_env, port, tcg_constant_i32(1 << ot));
|
||||
}
|
||||
|
@ -699,6 +707,7 @@ static bool gen_check_io(DisasContext *s, MemOp ot, TCGv_i32 port,
|
|||
tcg_constant_i32(next_eip - cur_eip));
|
||||
}
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void gen_movs(DisasContext *s, MemOp ot)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue