From 154c69f2b8512bdbfcd48a82bfd902e9449a895a Mon Sep 17 00:00:00 2001 From: Benjamin Herrenschmidt Date: Fri, 15 Feb 2019 17:16:39 +0100 Subject: target/ppc: Fix nip on power management instructions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Those instructions currently raise an exception from within the helper. This tends to result in a bogus nip value in the env context (typically the beginning of the TB). Such a helper needs a gen_update_nip() first. This fixes it with a different approach which is to throw the exception from translate.c instead of the helper using gen_exception_nip() which does the right thing. Exception EXCP_HLT is also used instead of POWERPC_EXCP_STOP to effectively exit from the CPU execution loop. Signed-off-by: Benjamin Herrenschmidt [clg : modified the commit log to comment the use of EXCP_HLT instead of POWERPC_EXCP_STOP] Signed-off-by: Cédric Le Goater Message-Id: <20190215161648.9600-2-clg@kaod.org> Signed-off-by: David Gibson --- target/ppc/excp_helper.c | 1 - 1 file changed, 1 deletion(-) (limited to 'target/ppc/excp_helper.c') diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index 751d759fcc..8407e0ade9 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -958,7 +958,6 @@ void helper_pminsn(CPUPPCState *env, powerpc_pm_insn_t insn) * but this doesn't seem to be a problem. */ env->msr |= (1ull << MSR_EE); - raise_exception(env, EXCP_HLT); } #endif /* defined(TARGET_PPC64) */ -- cgit v1.2.3