forked from luck/tmp_suning_uos_patched
powerpc: Fix booke user_disable_single_step()
On booke processors, gdb is seeing spurious SIGTRAPs when setting a watchpoint. user_disable_single_step() simply quits when the DAC is non-zero. It should be clearing the DBCR0_IC and DBCR0_BT bits from the dbcr0 register and TIF_SINGLESTEP from the thread flag. Signed-off-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
e9e961c9a8
commit
28477fb1ed
|
@ -736,15 +736,16 @@ void user_disable_single_step(struct task_struct *task)
|
||||||
{
|
{
|
||||||
struct pt_regs *regs = task->thread.regs;
|
struct pt_regs *regs = task->thread.regs;
|
||||||
|
|
||||||
|
|
||||||
#if defined(CONFIG_BOOKE)
|
|
||||||
/* If DAC then do not single step, skip */
|
|
||||||
if (task->thread.dabr)
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (regs != NULL) {
|
if (regs != NULL) {
|
||||||
#if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
|
#if defined(CONFIG_BOOKE)
|
||||||
|
/* If DAC don't clear DBCRO_IDM or MSR_DE */
|
||||||
|
if (task->thread.dabr)
|
||||||
|
task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_BT);
|
||||||
|
else {
|
||||||
|
task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_BT | DBCR0_IDM);
|
||||||
|
regs->msr &= ~MSR_DE;
|
||||||
|
}
|
||||||
|
#elif defined(CONFIG_40x)
|
||||||
task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_BT | DBCR0_IDM);
|
task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_BT | DBCR0_IDM);
|
||||||
regs->msr &= ~MSR_DE;
|
regs->msr &= ~MSR_DE;
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Reference in New Issue
Block a user