Commit 7fccfcfb authored by Jordan Niethe's avatar Jordan Niethe Committed by Michael Ellerman

powerpc/xmon: Move insertion of breakpoint for xol'ing

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: default avatarJordan Niethe <jniethe5@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Reviewed-by: default avatarAlistair Popple <alistair@popple.id.au>
Link: https://lore.kernel.org/r/20200506034050.24806-20-jniethe5@gmail.com
parent 6c7a4f0a
...@@ -878,7 +878,6 @@ static struct bpt *new_breakpoint(unsigned long a) ...@@ -878,7 +878,6 @@ static struct bpt *new_breakpoint(unsigned long a)
if (!bp->enabled && atomic_read(&bp->ref_count) == 0) { if (!bp->enabled && atomic_read(&bp->ref_count) == 0) {
bp->address = a; bp->address = a;
bp->instr = (void *)(bpt_table + ((bp - bpts) * BPT_WORDS)); bp->instr = (void *)(bpt_table + ((bp - bpts) * BPT_WORDS));
patch_instruction(bp->instr + 1, ppc_inst(bpinstr));
return bp; return bp;
} }
} }
...@@ -910,6 +909,8 @@ static void insert_bpts(void) ...@@ -910,6 +909,8 @@ static void insert_bpts(void)
continue; continue;
} }
patch_instruction(bp->instr, instr); patch_instruction(bp->instr, instr);
patch_instruction((void *)bp->instr + ppc_inst_len(instr),
ppc_inst(bpinstr));
if (bp->enabled & BP_CIABR) if (bp->enabled & BP_CIABR)
continue; continue;
if (patch_instruction((struct ppc_inst *)bp->address, if (patch_instruction((struct ppc_inst *)bp->address,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment