target/ppc: fix exception error value in slbfee

Testing on a POWER9 DD2.3, we observed that the Linux kernel delivers a
signal with si_code ILL_PRVOPC (5) when a userspace application tries to
use slbfee. To obtain this behavior on linux-user, we should use
POWERPC_EXCP_PRIV with POWERPC_EXCP_PRIV_OPC.

No functional change is intended for softmmu targets as
gen_hvpriv_exception uses the same 'exception' argument
(POWERPC_EXCP_HV_EMU) for raise_exception_*, and the powerpc_excp_*
methods do not use lower bits of the exception error code when handling
POWERPC_EXCP_{INVAL,PRIV}.

Reported-by: Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br>
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Message-Id: <20220627141104.669152-3-matheus.ferst@eldorado.org.br>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
This commit is contained in:
Matheus Ferst 2022-06-27 11:11:00 -03:00 committed by Daniel Henrique Barboza
parent 1315eed69d
commit efb23674d1

View File

@ -5386,12 +5386,12 @@ static void gen_slbmfev(DisasContext *ctx)
static void gen_slbfee_(DisasContext *ctx) static void gen_slbfee_(DisasContext *ctx)
{ {
#if defined(CONFIG_USER_ONLY) #if defined(CONFIG_USER_ONLY)
gen_inval_exception(ctx, POWERPC_EXCP_PRIV_REG); gen_hvpriv_exception(ctx, POWERPC_EXCP_PRIV_OPC);
#else #else
TCGLabel *l1, *l2; TCGLabel *l1, *l2;
if (unlikely(ctx->pr)) { if (unlikely(ctx->pr)) {
gen_inval_exception(ctx, POWERPC_EXCP_PRIV_REG); gen_hvpriv_exception(ctx, POWERPC_EXCP_PRIV_OPC);
return; return;
} }
gen_helper_find_slb_vsid(cpu_gpr[rS(ctx->opcode)], cpu_env, gen_helper_find_slb_vsid(cpu_gpr[rS(ctx->opcode)], cpu_env,