mirror of
https://github.com/torvalds/linux.git
synced 2024-11-15 08:31:55 +00:00
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;
|
||||
|
||||
|
||||
#if defined(CONFIG_BOOKE)
|
||||
/* If DAC then do not single step, skip */
|
||||
if (task->thread.dabr)
|
||||
return;
|
||||
#endif
|
||||
|
||||
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);
|
||||
regs->msr &= ~MSR_DE;
|
||||
#else
|
||||
|
Loading…
Reference in New Issue
Block a user