From: Maneesh Soni <manesoni@cisco.com>
To: David Daney <david.daney@cavium.com>
Cc: ralf@linux-mips.org, linux-kernel@vger.kernel.org,
linux-mips@linux-mips.org, ananth@in.ibm.com, kamensky@cisco.com
Subject: Re: [PATCH] MIPS Kprobes: Support branch instructions probing
Date: Fri, 14 Oct 2011 22:58:31 +0530 [thread overview]
Message-ID: <20111014172831.GA8521@cisco.com> (raw)
In-Reply-To: <4E971FD3.2020308@cavium.com>
On Thu, Oct 13, 2011 at 10:28:51AM -0700, David Daney wrote:
> On 10/13/2011 02:07 AM, Maneesh Soni wrote:
> >
> >From: Maneesh Soni<manesoni@cisco.com>
> >
> >This patch provides support for kprobes on branch instructions. The branch
> >instruction at the probed address is actually emulated and not executed
> >out-of-line like other normal instructions. Instead the delay-slot instruction
> >is copied and single stepped out of line.
> >
> >At the time of probe hit, the original branch instruction is evaluated
> >and the target cp0_epc is computed similar to compute_retrun_epc(). It
> >is also checked if the delay slot instruction can be skipped, which is
> >true if there is a NOP in delay slot or branch is taken in case of
> >branch likely instructions. Once the delay slot instruction is single
> >stepped the normal execution resume with the cp0_epc updated the earlier
> >computed cp0_epc as per the branch instructions.
> >
>
> I haven't tested it but...
>
>
> >Signed-off-by: Maneesh Soni<manesoni@cisco.com>
> >---
> > arch/mips/include/asm/kprobes.h | 7 +
> > arch/mips/kernel/kprobes.c | 341 +++++++++++++++++++++++++++++++++++----
> > 2 files changed, 320 insertions(+), 28 deletions(-)
> >
> [...]
> >+static int evaluate_branch_instruction(struct kprobe *p, struct pt_regs *regs,
> >+ struct kprobe_ctlblk *kcb)
> > {
> >+ union mips_instruction insn = p->opcode;
> >+ unsigned int dspcontrol;
> >+ long epc;
> >+
> >+ epc = regs->cp0_epc;
> >+ if (epc& 3)
> >+ goto unaligned;
> >+
> >+ if (p->ainsn.insn->word == 0)
> >+ kcb->flags |= SKIP_DELAYSLOT;
> >+ else
> >+ kcb->flags&= ~SKIP_DELAYSLOT;
> >+
> >+ switch (insn.i_format.opcode) {
> >+ /*
> >+ * jr and jalr are in r_format format.
> >+ */
> >+ case spec_op:
> [...]
> >+ case bgtzl_op:
> >+ /* rt field assumed to be zero */
> >+ if ((long)regs->regs[insn.i_format.rs]> 0) {
> >+ epc = epc + 4 + (insn.i_format.simmediate<< 2);
> >+ kcb->flags |= SKIP_DELAYSLOT;
> >+ } else
> >+ epc += 8;
> >+ regs->cp0_epc = epc;
> >+ break;
>
>
>
> Where is the handling for:
>
> case cop1_op:
>
> #ifdef CONFIG_CPU_CAVIUM_OCTEON
> case lwc2_op: /* This is bbit0 on Octeon */
> case ldc2_op: /* This is bbit032 on Octeon */
> case swc2_op: /* This is bbit1 on Octeon */
> case sdc2_op: /* This is bbit132 on Octeon */
> #endif
>
> These are all defined in insn_has_delayslot() but not here.
My bad.. will include them as well. Actually as Ralf suggested,
will keep this as common code.
Thanks
Maneesh
prev parent reply other threads:[~2011-10-14 17:28 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-13 9:07 [PATCH] MIPS Kprobes: Support branch instructions probing Maneesh Soni
2011-10-13 9:41 ` Ananth N Mavinakayanahalli
2011-10-13 10:12 ` Ananth N Mavinakayanahalli
2011-10-13 10:12 ` Maneesh Soni
2011-10-13 17:28 ` David Daney
2011-10-13 18:07 ` Ralf Baechle
2011-10-13 19:16 ` Victor Kamensky
2011-10-13 22:59 ` Ralf Baechle
2011-10-14 17:31 ` Maneesh Soni
2011-10-14 17:28 ` Maneesh Soni [this message]
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=20111014172831.GA8521@cisco.com \
--to=manesoni@cisco.com \
--cc=ananth@in.ibm.com \
--cc=david.daney@cavium.com \
--cc=kamensky@cisco.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=ralf@linux-mips.org \
/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.