[Patch 3/6] Modify ptrace code to use Hardware Breakpoint interfaces
K.Prasad
prasad at linux.vnet.ibm.com
Wed Jun 10 16:50:02 EST 2009
On Fri, Jun 05, 2009 at 03:13:45PM +1000, David Gibson wrote:
> On Wed, Jun 03, 2009 at 10:05:24PM +0530, K.Prasad wrote:
> > Modify the ptrace code to use the hardware breakpoint interfaces for user-space.
> >
> > Signed-off-by: K.Prasad <prasad at linux.vnet.ibm.com>
> > ---
> > arch/powerpc/kernel/ptrace.c | 47 +++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 47 insertions(+)
> >
> > Index: linux-2.6-tip.hbkpt/arch/powerpc/kernel/ptrace.c
> > ===================================================================
> > --- linux-2.6-tip.hbkpt.orig/arch/powerpc/kernel/ptrace.c
> > +++ linux-2.6-tip.hbkpt/arch/powerpc/kernel/ptrace.c
> > @@ -37,6 +37,7 @@
> > #include <asm/page.h>
> > #include <asm/pgtable.h>
> > #include <asm/system.h>
> > +#include <asm/hw_breakpoint.h>
> >
> > /*
> > * does not yet catch signals sent when the child dies.
> > @@ -735,9 +736,26 @@ void user_disable_single_step(struct tas
> > clear_tsk_thread_flag(task, TIF_SINGLESTEP);
> > }
> >
> > +void ptrace_triggered(struct hw_breakpoint *bp, struct pt_regs *regs)
> > +{
> > + /*
> > + * Unregister the breakpoint request here since ptrace has defined a
> > + * one-shot behaviour for breakpoint exceptions in PPC64.
> > + * The SIGTRAP signal is generated automatically for us in do_dabr().
> > + * We don't have to do anything here
> > + */
> > + unregister_user_hw_breakpoint(current, bp);
> > + kfree(bp);
>
> Couldn't you also clear the saved dabr info here, to avoid having to
> special case this in the actual breakpoint handler.
>
The saved dabr_data is created as a static variable and I didn't want to
modify its value across files.
> Also, I think you should be delivering the signal here - for gdb
> compatibility I think we'll need to match the old behaviour which has
> the TRAP delivered before executing the breakpointed instruction.
>
We could do it either way. Return a NOTIFY_DONE from
hw_breakpoint_handler() and allow the do_dabr()
code to deliver the signal, or deliver a signal here and return a
NOTIFY_STOP in the exception handler. I chose the former as it doesn't
duplicate the code.
> --
> David Gibson | I'll have my music baroque, and my code
> david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
> | _way_ _around_!
> http://www.ozlabs.org/~dgibson
Thanks,
K.Prasad
More information about the Linuxppc-dev
mailing list