[PATCH 2/2] powerpc: Fix emulation of mfocrf in emulate_step()
Naveen N. Rao
naveen.n.rao at linux.vnet.ibm.com
Fri Jun 16 03:27:34 AEST 2017
On 2017/06/15 09:46AM, Anton Blanchard wrote:
> From: Anton Blanchard <anton at samba.org>
>
> From POWER4 onwards, mfocrf() only places the specified CR field into
> the destination GPR, and the rest of it is set to 0. The PowerPC AS
> from version 3.0 now requires this behaviour.
>
> The emulation code currently puts the entire CR into the destination GPR.
> Fix it.
>
> Cc: stable at vger.kernel.org
> Signed-off-by: Anton Blanchard <anton at samba.org>
Acked-by: Naveen N. Rao <naveen.n.rao at linux.vnet.ibm.com>
> ---
> arch/powerpc/lib/sstep.c | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c
> index fb84f51b1f0b..ee33327686ae 100644
> --- a/arch/powerpc/lib/sstep.c
> +++ b/arch/powerpc/lib/sstep.c
> @@ -966,6 +966,19 @@ int analyse_instr(struct instruction_op *op, struct pt_regs *regs,
> #endif
>
> case 19: /* mfcr */
> + if ((instr >> 20) & 1) {
> + imm = 0xf0000000UL;
> + for (sh = 0; sh < 8; ++sh) {
> + if (instr & (0x80000 >> sh)) {
> + regs->gpr[rd] = regs->ccr & imm;
> + break;
> + }
> + imm >>= 4;
> + }
> +
> + goto instr_done;
> + }
> +
> regs->gpr[rd] = regs->ccr;
> regs->gpr[rd] &= 0xffffffffUL;
> goto instr_done;
> --
> 2.11.0
>
More information about the Linuxppc-dev
mailing list