powerpc/xmon: Move insertion of breakpoint for xol'ing
authorJordan Niethe <jniethe5@gmail.com>
Wed, 6 May 2020 03:40:39 +0000 (13:40 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 18 May 2020 14:10:38 +0000 (00:10 +1000)
When a new breakpoint is created, the second instruction of that
breakpoint is patched with a trap instruction. This assumes the length
of the instruction is always the same. In preparation for prefixed
instructions, remove this assumption. Insert the trap instruction at the
same time the first instruction is inserted.

Signed-off-by: Jordan Niethe <jniethe5@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Reviewed-by: Alistair Popple <alistair@popple.id.au>
Link: https://lore.kernel.org/r/20200506034050.24806-20-jniethe5@gmail.com
arch/powerpc/xmon/xmon.c

index d8b29f6925beeff6a2bb535093db4c1cf21f6191..00b24f357c2b55a7aff3ac7031ba246526dd603a 100644 (file)
@@ -878,7 +878,6 @@ static struct bpt *new_breakpoint(unsigned long a)
                if (!bp->enabled && atomic_read(&bp->ref_count) == 0) {
                        bp->address = a;
                        bp->instr = (void *)(bpt_table + ((bp - bpts) * BPT_WORDS));
-                       patch_instruction(bp->instr + 1, ppc_inst(bpinstr));
                        return bp;
                }
        }
@@ -910,6 +909,8 @@ static void insert_bpts(void)
                        continue;
                }
                patch_instruction(bp->instr, instr);
+               patch_instruction((void *)bp->instr + ppc_inst_len(instr),
+                                 ppc_inst(bpinstr));
                if (bp->enabled & BP_CIABR)
                        continue;
                if (patch_instruction((struct ppc_inst *)bp->address,