[PATCH v2 1/3] powerpc: sstep: Fix load and update emulation
Sandipan Das
sandipan at linux.ibm.com
Wed Feb 3 22:37:38 AEDT 2021
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
More information about the Linuxppc-dev
mailing list