linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: paul.gortmaker@windriver.com (Paul Gortmaker)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v15 07/10] arm64: kprobes instruction simulation support
Date: Sun, 10 Jul 2016 18:51:27 -0400	[thread overview]
Message-ID: <CAP=VYLp4j8DWAXWS9Dj_EkhTXwUvBZhfyUzGT640ewq+Z4-NZw@mail.gmail.com> (raw)
In-Reply-To: <1467995754-32508-8-git-send-email-dave.long@linaro.org>

On Fri, Jul 8, 2016 at 12:35 PM, David Long <dave.long@linaro.org> wrote:
> From: Sandeepa Prabhu <sandeepa.s.prabhu@gmail.com>
>
> Kprobes needs simulation of instructions that cannot be stepped
> from a different memory location, e.g.: those instructions
> that uses PC-relative addressing. In simulation, the behaviour
> of the instruction is implemented using a copy of pt_regs.
>
> The following instruction categories are simulated:
>  - All branching instructions(conditional, register, and immediate)
>  - Literal access instructions(load-literal, adr/adrp)
>
> Conditional execution is limited to branching instructions in
> ARM v8. If conditions at PSTATE do not match the condition fields
> of opcode, the instruction is effectively NOP.
>
> Thanks to Will Cohen for assorted suggested changes.
>
> Signed-off-by: Sandeepa Prabhu <sandeepa.s.prabhu@gmail.com>
> Signed-off-by: William Cohen <wcohen@redhat.com>
> Signed-off-by: David A. Long <dave.long@linaro.org>
> Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
> ---
>  arch/arm64/include/asm/probes.h          |   5 +-
>  arch/arm64/kernel/insn.c                 |   1 +
>  arch/arm64/kernel/probes/Makefile        |   3 +-
>  arch/arm64/kernel/probes/decode-insn.c   |  33 ++++-
>  arch/arm64/kernel/probes/decode-insn.h   |   1 +
>  arch/arm64/kernel/probes/kprobes.c       |  53 ++++++--
>  arch/arm64/kernel/probes/simulate-insn.c | 218 +++++++++++++++++++++++++++++++
>  arch/arm64/kernel/probes/simulate-insn.h |  28 ++++
>  8 files changed, 327 insertions(+), 15 deletions(-)
>  create mode 100644 arch/arm64/kernel/probes/simulate-insn.c
>  create mode 100644 arch/arm64/kernel/probes/simulate-insn.h
>
>

[...]

> diff --git a/arch/arm64/kernel/probes/simulate-insn.c b/arch/arm64/kernel/probes/simulate-insn.c
> new file mode 100644
> index 0000000..429c333
> --- /dev/null
> +++ b/arch/arm64/kernel/probes/simulate-insn.c
> @@ -0,0 +1,218 @@
> +/*
> + * arch/arm64/kernel/probes/simulate-insn.c
> + *
> + * Copyright (C) 2013 Linaro Limited.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * General Public License for more details.
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/kprobes.h>
> +#include <linux/module.h>

Maybe I missed something, but I don't see anything modular about this
code, so why include this?

Paul.
--

> +
> +#include "simulate-insn.h"
> +
> +#define sign_extend(x, signbit)                \
> +       ((x) | (0 - ((x) & (1 << (signbit)))))
> +
> +#define bbl_displacement(insn)         \
> +       sign_extend(((insn) & 0x3ffffff) << 2, 27)
> +
> +#define bcond_displacement(insn)       \
> +       sign_extend(((insn >> 5) & 0x7ffff) << 2, 20)
 > +       disp = ldr_displacement(opcode);
> +       load_addr = (s32 *) (addr + disp);
> +
> +       set_x_reg(regs, xn, *load_addr);
> +
> +       instruction_pointer_set(regs, instruction_pointer(regs) + 4);
> +}

  reply	other threads:[~2016-07-10 22:51 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-08 16:35 [PATCH v15 00/10] arm64: Add kernel probes (kprobes) support David Long
2016-07-08 16:35 ` [PATCH v15 01/10] arm64: Add HAVE_REGS_AND_STACK_ACCESS_API feature David Long
2016-07-15 10:57   ` Catalin Marinas
2016-07-15 14:51     ` David Long
2016-07-15 15:13       ` Catalin Marinas
2016-07-15 17:51         ` David Long
2016-07-19 14:17           ` Catalin Marinas
2016-07-08 16:35 ` [PATCH v15 02/10] arm64: Add more test functions to insn.c David Long
2016-07-08 16:35 ` [PATCH v15 03/10] arm64: add conditional instruction simulation support David Long
2016-07-08 16:35 ` [PATCH v15 04/10] arm64: Kprobes with single stepping support David Long
2016-07-20  9:36   ` Marc Zyngier
2016-07-20 11:16     ` Catalin Marinas
2016-07-20 19:08     ` David Long
2016-07-21  8:44       ` Marc Zyngier
2016-07-20 15:49   ` Catalin Marinas
2016-07-21 14:50     ` David Long
2016-07-20 16:09   ` Marc Zyngier
2016-07-20 16:28     ` Catalin Marinas
2016-07-20 16:31       ` Marc Zyngier
2016-07-20 16:46       ` Marc Zyngier
2016-07-20 17:04         ` Catalin Marinas
2016-07-21 16:33     ` David Long
2016-07-21 17:16       ` Catalin Marinas
2016-07-21 17:23       ` Marc Zyngier
2016-07-21 18:33         ` David Long
2016-07-22 10:16           ` Catalin Marinas
2016-07-22 15:51             ` David Long
2016-07-25 17:13               ` Catalin Marinas
2016-07-25 22:27                 ` David Long
2016-07-27 11:50                   ` Daniel Thompson
2016-07-27 22:13                     ` David Long
2016-07-28 14:40                       ` Catalin Marinas
2016-07-29  9:01                         ` Daniel Thompson
2016-08-04  4:47                           ` David Long
2016-08-08 11:13                             ` Daniel Thompson
2016-08-08 14:29                               ` David Long
2016-08-08 22:49                                 ` Masami Hiramatsu
2016-08-09 17:23                                 ` Catalin Marinas
2016-08-10 20:41                                   ` David Long
2016-08-08 22:19                             ` Masami Hiramatsu
2016-07-26  9:50                 ` Daniel Thompson
2016-07-26 16:55                   ` Catalin Marinas
2016-07-27 10:01                     ` Dave Martin
2016-07-26 17:54                   ` Mark Rutland
2016-07-27 11:19                     ` Daniel Thompson
2016-07-27 11:38                       ` Dave Martin
2016-07-27 11:42                         ` Daniel Thompson
2016-07-27 13:38                       ` Mark Rutland
2016-07-08 16:35 ` [PATCH v15 05/10] arm64: Blacklist non-kprobe-able symbol David Long
2016-07-08 16:35 ` [PATCH v15 06/10] arm64: Treat all entry code as non-kprobe-able David Long
2016-07-15 16:47   ` Catalin Marinas
2016-07-19  0:53     ` David Long
2016-07-08 16:35 ` [PATCH v15 07/10] arm64: kprobes instruction simulation support David Long
2016-07-10 22:51   ` Paul Gortmaker [this message]
2016-07-08 16:35 ` [PATCH v15 08/10] arm64: Add trampoline code for kretprobes David Long
2016-07-19 13:46   ` Catalin Marinas
2016-07-20 18:28     ` David Long
2016-07-08 16:35 ` [PATCH v15 09/10] arm64: Add kernel return probes support (kretprobes) David Long
2016-07-08 16:35 ` [PATCH v15 10/10] kprobes: Add arm64 case in kprobe example module David Long
2016-07-14 16:22 ` [PATCH v15 00/10] arm64: Add kernel probes (kprobes) support Catalin Marinas
2016-07-14 17:09   ` William Cohen
2016-07-15  7:50     ` Catalin Marinas
2016-07-15  8:01       ` Marc Zyngier
2016-07-15  8:59         ` Alex Bennée
2016-07-15  9:04           ` Marc Zyngier
2016-07-15  9:53           ` Marc Zyngier
2016-07-14 17:56   ` David Long
2016-07-19 13:57   ` Catalin Marinas
2016-07-19 14:01     ` David Long
2016-07-19 18:27 ` Catalin Marinas
2016-07-19 19:38   ` David Long

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='CAP=VYLp4j8DWAXWS9Dj_EkhTXwUvBZhfyUzGT640ewq+Z4-NZw@mail.gmail.com' \
    --to=paul.gortmaker@windriver.com \
    --cc=linux-arm-kernel@lists.infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).