powerpc/booke: Fix xmon single step on PowerPC Book-E
Prior to the arch/ppc -> arch/powerpc transition, xmon had support for single stepping on 4xx boards. The functionality was lost when arch/ppc was removed. This patch restores single step support for 44x boards, and Book-E in general. Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
committed by
Benjamin Herrenschmidt
parent
348aa30300
commit
cdd3904dcc
@@ -517,6 +517,15 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
|
|||||||
in_xmon = 0;
|
in_xmon = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_BOOKE
|
||||||
|
if (regs->msr & MSR_DE) {
|
||||||
|
bp = at_breakpoint(regs->nip);
|
||||||
|
if (bp != NULL) {
|
||||||
|
regs->nip = (unsigned long) &bp->instr[0];
|
||||||
|
atomic_inc(&bp->ref_count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
if ((regs->msr & (MSR_IR|MSR_PR|MSR_SF)) == (MSR_IR|MSR_SF)) {
|
if ((regs->msr & (MSR_IR|MSR_PR|MSR_SF)) == (MSR_IR|MSR_SF)) {
|
||||||
bp = at_breakpoint(regs->nip);
|
bp = at_breakpoint(regs->nip);
|
||||||
if (bp != NULL) {
|
if (bp != NULL) {
|
||||||
@@ -530,7 +539,7 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
insert_cpu_bpts();
|
insert_cpu_bpts();
|
||||||
|
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
@@ -894,6 +903,14 @@ cmds(struct pt_regs *excp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_BOOKE
|
||||||
|
static int do_step(struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
regs->msr |= MSR_DE;
|
||||||
|
mtspr(SPRN_DBCR0, mfspr(SPRN_DBCR0) | DBCR0_IC | DBCR0_IDM);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#else
|
||||||
/*
|
/*
|
||||||
* Step a single instruction.
|
* Step a single instruction.
|
||||||
* Some instructions we emulate, others we execute with MSR_SE set.
|
* Some instructions we emulate, others we execute with MSR_SE set.
|
||||||
@@ -924,6 +941,7 @@ static int do_step(struct pt_regs *regs)
|
|||||||
regs->msr |= MSR_SE;
|
regs->msr |= MSR_SE;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void bootcmds(void)
|
static void bootcmds(void)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user