On 03/02/21 3:19 pm, Naveen N. Rao wrote: > [...] > > Wouldn't it be easier to just do the below at the end? Or, am I missing > something? > > diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c > index ede093e9623472..a2d726d2a5e9d1 100644 > --- a/arch/powerpc/lib/sstep.c > +++ b/arch/powerpc/lib/sstep.c > @@ -2980,6 +2980,10 @@ int analyse_instr(struct instruction_op *op, const > struct pt_regs *regs, > } > #endif /* CONFIG_VSX */ > > + if (GETTYPE(op->type) == LOAD && (op->type & UPDATE) && > + (ra == 0 || ra == rd)) > + goto unknown_opcode; > + > return 0; > > logical_done: >
This looks good? diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c index e96cff845ef7..a9c149bfd2f5 100644 --- a/arch/powerpc/lib/sstep.c +++ b/arch/powerpc/lib/sstep.c @@ -3017,6 +3017,21 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs, } + if (op->type & UPDATE) { + if (ra == rd && GETTYPE(op->type) == LOAD) + goto unknown_opcode; + else if (ra == 0) + switch(GETTYPE(op->type)) { + case LOAD: + case STORE: +#ifdef CONFIG_PPC_FPU + case LOAD_FP: + case STORE_FP: +#endif + goto unknown_opcode; + } + } + #ifdef CONFIG_VSX if ((GETTYPE(op->type) == LOAD_VSX || GETTYPE(op->type) == STORE_VSX) && - Sandipan