From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Roland McGrath <roland@redhat.com>
Cc: linuxppc-dev@ozlabs.org, utrace-devel@redhat.com
Subject: Re: [PATCH] powerpc ptrace block-step
Date: Thu, 02 Apr 2009 16:26:56 +1100 [thread overview]
Message-ID: <1238650016.17330.193.camel@pasglop> (raw)
In-Reply-To: <20090401215903.DE872FC3AB@magilla.sf.frob.com>
On Wed, 2009-04-01 at 14:59 -0700, Roland McGrath wrote:
> diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h
> index c9c678f..d7692b8 100644
> --- a/arch/powerpc/include/asm/ptrace.h
> +++ b/arch/powerpc/include/asm/ptrace.h
> @@ -135,7 +135,9 @@ do { \
> * These are defined as per linux/ptrace.h, which see.
> */
> #define arch_has_single_step() (1)
> +#define arch_has_block_step() (1)
The patch only implements it for "server/classic" processors, not BookE,
thus it should probably only advertise it for these :-)
Though it wouldn't be too hard to implement it for BookE using DBCR0:BRT
(Branch Taken debug event) though it might need some careful fixups such
as the one we have for single step regarding hitting exception entry
code.
Cheers,
Ben.
> extern void user_enable_single_step(struct task_struct *);
> +extern void user_enable_block_step(struct task_struct *);
> extern void user_disable_single_step(struct task_struct *);
>
> #endif /* __ASSEMBLY__ */
> @@ -288,4 +290,6 @@ extern void user_disable_single_step(struct task_struct *);
> #define PPC_PTRACE_PEEKUSR_3264 0x91
> #define PPC_PTRACE_POKEUSR_3264 0x90
>
> +#define PTRACE_SINGLEBLOCK 0x100 /* resume execution until next branch */
> +
> #endif /* _ASM_POWERPC_PTRACE_H */
> diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
> index 3635be6..656fea2 100644
> --- a/arch/powerpc/kernel/ptrace.c
> +++ b/arch/powerpc/kernel/ptrace.c
> @@ -707,12 +707,29 @@ void user_enable_single_step(struct task_struct *task)
> task->thread.dbcr0 |= DBCR0_IDM | DBCR0_IC;
> regs->msr |= MSR_DE;
> #else
> + regs->msr &= ~MSR_BE;
> regs->msr |= MSR_SE;
> #endif
> }
> set_tsk_thread_flag(task, TIF_SINGLESTEP);
> }
>
> +void user_enable_block_step(struct task_struct *task)
> +{
> + struct pt_regs *regs = task->thread.regs;
> +
> + if (regs != NULL) {
> +#if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
> + task->thread.dbcr0 = DBCR0_IDM | DBCR0_BT;
> + regs->msr |= MSR_DE;
> +#else
> + regs->msr &= ~MSR_SE;
> + regs->msr |= MSR_BE;
> +#endif
> + }
> + set_tsk_thread_flag(task, TIF_SINGLESTEP);
> +}
> +
> void user_disable_single_step(struct task_struct *task)
> {
> struct pt_regs *regs = task->thread.regs;
> @@ -729,7 +746,7 @@ void user_disable_single_step(struct task_struct *task)
> task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_IDM);
> regs->msr &= ~MSR_DE;
> #else
> - regs->msr &= ~MSR_SE;
> + regs->msr &= ~(MSR_SE | MSR_BE);
> #endif
> }
> clear_tsk_thread_flag(task, TIF_SINGLESTEP);
next prev parent reply other threads:[~2009-04-02 5:27 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-01 21:59 [PATCH] powerpc ptrace block-step Roland McGrath
2009-04-02 5:26 ` Benjamin Herrenschmidt [this message]
2009-04-03 0:44 ` Roland McGrath
2009-04-03 1:13 ` Josh Boyer
2009-04-03 1:59 ` Roland McGrath
2009-04-03 12:10 ` Frank Ch. Eigler
2009-04-03 1:43 ` Benjamin Herrenschmidt
2009-05-29 5:03 ` Benjamin Herrenschmidt
2009-05-29 7:32 ` Roland McGrath
2009-05-29 7:39 ` Benjamin Herrenschmidt
-- strict thread matches above, loose matches on Subject: below --
2008-05-02 6:51 Roland McGrath
2008-05-23 6:21 ` Michael Ellerman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1238650016.17330.193.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=roland@redhat.com \
--cc=utrace-devel@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.