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:
parent
1315eed69d
commit
efb23674d1
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user