Re: [PATCH 1/3] powerpc: Enable emulate_step In Little Endian Mode
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2013-10-30 02:04:18
On Fri, 2013-10-18 at 14:40 -0500, Tom Musta wrote:
This patch modifies the endian chicken switch in the single step emulation code (emulate_step()). The old (big endian) code bailed early if a load or store instruction was to be emulated in little endian mode. The new code modifies the check and only bails in a cross-endian situation (LE mode in a kernel compiled for BE and vice verse).
I get a malformed patch error, looks like it got wrapped. Cheers, Ben.
quoted hunk ↗ jump to hunk
Signed-off-by: Tom Musta <redacted> --- arch/powerpc/lib/sstep.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-)diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c index b1faa15..5e0d0e9 100644 --- a/arch/powerpc/lib/sstep.c +++ b/arch/powerpc/lib/sstep.c@@ -1222,12 +1222,18 @@ int __kprobes emulate_step(struct pt_regs *regs,unsigned int instr) } /* - * Following cases are for loads and stores, so bail out - * if we're in little-endian mode. + * Following cases are for loads and stores and this + * implementation does not support cross-endian. So + * bail out if this is the case. */ +#ifdef __BIG_ENDIAN__ if (regs->msr & MSR_LE) return 0; - +#endif +#ifdef __LITTLE_ENDIAN__ + if (!regs->msr & MSR_LE) + return 0; +#endif /* * Save register RA in case it's an update form load or store * and the access faults.