powerpc: do_break get registers from regs
Similar to the previous patch this makes interrupt handler function types more regular so they can be wrapped with the next patch. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20210130130852.2952424-9-npiggin@gmail.com
This commit is contained in:
committed by
Michael Ellerman
parent
b4ced80310
commit
18722ecf9e
@@ -52,8 +52,7 @@ extern void do_send_trap(struct pt_regs *regs, unsigned long address,
|
|||||||
unsigned long error_code, int brkpt);
|
unsigned long error_code, int brkpt);
|
||||||
#else
|
#else
|
||||||
|
|
||||||
extern void do_break(struct pt_regs *regs, unsigned long address,
|
void do_break(struct pt_regs *regs);
|
||||||
unsigned long error_code);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _ASM_POWERPC_DEBUG_H */
|
#endif /* _ASM_POWERPC_DEBUG_H */
|
||||||
|
|||||||
@@ -364,10 +364,9 @@ do_databreakpoint:
|
|||||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||||
mfspr r4,SPRN_BAR
|
mfspr r4,SPRN_BAR
|
||||||
stw r4,_DAR(r11)
|
stw r4,_DAR(r11)
|
||||||
#ifdef CONFIG_VMAP_STACK
|
#ifndef CONFIG_VMAP_STACK
|
||||||
lwz r5,_DSISR(r11)
|
|
||||||
#else
|
|
||||||
mfspr r5,SPRN_DSISR
|
mfspr r5,SPRN_DSISR
|
||||||
|
stw r5,_DSISR(r11)
|
||||||
#endif
|
#endif
|
||||||
EXC_XFER_STD(0x1c00, do_break)
|
EXC_XFER_STD(0x1c00, do_break)
|
||||||
|
|
||||||
|
|||||||
@@ -659,11 +659,10 @@ static void do_break_handler(struct pt_regs *regs)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_break (struct pt_regs *regs, unsigned long address,
|
void do_break(struct pt_regs *regs)
|
||||||
unsigned long error_code)
|
|
||||||
{
|
{
|
||||||
current->thread.trap_nr = TRAP_HWBKPT;
|
current->thread.trap_nr = TRAP_HWBKPT;
|
||||||
if (notify_die(DIE_DABR_MATCH, "dabr_match", regs, error_code,
|
if (notify_die(DIE_DABR_MATCH, "dabr_match", regs, regs->dsisr,
|
||||||
11, SIGSEGV) == NOTIFY_STOP)
|
11, SIGSEGV) == NOTIFY_STOP)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -681,7 +680,7 @@ void do_break (struct pt_regs *regs, unsigned long address,
|
|||||||
do_break_handler(regs);
|
do_break_handler(regs);
|
||||||
|
|
||||||
/* Deliver the signal to userspace */
|
/* Deliver the signal to userspace */
|
||||||
force_sig_fault(SIGTRAP, TRAP_HWBKPT, (void __user *)address);
|
force_sig_fault(SIGTRAP, TRAP_HWBKPT, (void __user *)regs->dar);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_PPC_ADV_DEBUG_REGS */
|
#endif /* CONFIG_PPC_ADV_DEBUG_REGS */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user