linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: dave.long@linaro.org (David Long)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v13 05/10] arm64: Kprobes with single stepping support
Date: Mon, 13 Jun 2016 11:22:47 -0400	[thread overview]
Message-ID: <575ECFC7.10207@linaro.org> (raw)
In-Reply-To: <20160613155017.860097875e8bc86563a065ce@kernel.org>

On 06/13/2016 02:50 AM, Masami Hiramatsu wrote:
> On Mon, 13 Jun 2016 00:10:29 -0400
> David Long <dave.long@linaro.org> wrote:
>
>>>> ---
>>>>    arch/arm64/Kconfig                      |   1 +
>>>>    arch/arm64/include/asm/debug-monitors.h |   5 +
>>>>    arch/arm64/include/asm/insn.h           |   4 +-
>>>>    arch/arm64/include/asm/kprobes.h        |  60 ++++
>>>>    arch/arm64/include/asm/probes.h         |  44 +++
>>>>    arch/arm64/kernel/Makefile              |   1 +
>>>>    arch/arm64/kernel/debug-monitors.c      |  18 +-
>>>>    arch/arm64/kernel/kprobes-arm64.c       | 144 +++++++++
>>>>    arch/arm64/kernel/kprobes-arm64.h       |  35 +++
>>>>    arch/arm64/kernel/kprobes.c             | 526 ++++++++++++++++++++++++++++++++
>>>
>>> Not sure why kprobes.c and kprobes-arm64.c are splitted.
>>>
>>>
>>
>> This comes from the model of the arm32 kprobes code where handling of
>> the low-level instruction simulation is implemented in separate files
>> for 32-bit vs. thumb instructions.  It should make a little more sense
>> in the future when additional instruction simulation code will hopefully
>> be added for those instructions we cannot currently single-step
>> out-of-line.  It also probably *could* be merged into one file.
>
> Hmm, at least the name of arch/arm64/kernel/kprobes-arm64.c is
> meaningless. As we've done in x86, I think we can make it
> arch/arm64/kernel/kprobes/decode-insn.{c,h}
>

I've changed the name to kprobe-decode-insn.[hc], or do you feel 
strongly the three kprobes source files in arch/arm64/kernel need their 
own subdirectory?

>
> [..]
>>>> +
>>>> +/* Return:
>>>> + *   INSN_REJECTED     If instruction is one not allowed to kprobe,
>>>> + *   INSN_GOOD         If instruction is supported and uses instruction slot,
>>>> + *   INSN_GOOD_NO_SLOT If instruction is supported but doesn't use its slot.
>>>
>>> Is there any chance to return INSN_GOOD_NO_SLOT?
>>>
>>
>> Ah, that gets used later when simulation support is added.  I've removed
>> this enum value from this commit and will add it to the later one.
>> Please no one complain about using an enum instead of a bool, it will
>> eventually have three possible values.
>
> OK :)
>
> [..]
>>>> +enum kprobe_insn __kprobes
>>>> +arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi)
>>>> +{
>>>> +	enum kprobe_insn decoded;
>>>> +	kprobe_opcode_t insn = le32_to_cpu(*addr);
>>>> +	kprobe_opcode_t *scan_start = addr - 1;
>>>> +	kprobe_opcode_t *scan_end = addr - MAX_ATOMIC_CONTEXT_SIZE;
>>>> +#if defined(CONFIG_MODULES) && defined(MODULES_VADDR)
>>>> +	struct module *mod;
>>>> +#endif
>>>> +
>>>> +	if (addr >= (kprobe_opcode_t *)_text &&
>>>> +	    scan_end < (kprobe_opcode_t *)_text)
>>>> +		scan_end = (kprobe_opcode_t *)_text;
>>>> +#if defined(CONFIG_MODULES) && defined(MODULES_VADDR)
>>>> +	else {
>>>> +		preempt_disable();
>>>> +		mod = __module_address((unsigned long)addr);
>>>> +		if (mod && within_module_init((unsigned long)addr, mod) &&
>>>> +			!within_module_init((unsigned long)scan_end, mod))
>>>> +			scan_end = (kprobe_opcode_t *)mod->init_layout.base;
>>>> +		else if (mod && within_module_core((unsigned long)addr, mod) &&
>>>> +			!within_module_core((unsigned long)scan_end, mod))
>>>> +			scan_end = (kprobe_opcode_t *)mod->core_layout.base;
>>>
>>> What happen if mod == NULL? it should be return error, isn't it?
>>>
>>
>> No, it should be fine.  It just means it didn't have to do either of the
>> extra checks to limit the end of the search through the code to the
>> boundary of one of the corresponding module text sections. It means the
>> instruction is in the regular kernel (non-module) text segment.
>
> Ah, I see. It is OK then. :)
>
> Thank you,
>
>

Thanks,
-dl

  reply	other threads:[~2016-06-13 15:22 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-03  3:26 [PATCH v13 00/10] arm64: Add kernel probes (kprobes) support David Long
2016-06-03  3:26 ` [PATCH v13 01/10] arm64: Add HAVE_REGS_AND_STACK_ACCESS_API feature David Long
2016-06-03 11:36   ` Masami Hiramatsu
2016-06-20  2:43   ` Li Bin
2016-06-23 13:48     ` David Long
2016-06-03  3:26 ` [PATCH v13 02/10] arm64: Add more test functions to insn.c David Long
2016-06-08  1:14   ` Masami Hiramatsu
2016-06-10 14:54     ` David Long
2016-06-03  3:26 ` [PATCH v13 03/10] arm64: add conditional instruction simulation support David Long
2016-06-04  3:53   ` Masami Hiramatsu
2016-06-13  4:19     ` David Long
2016-06-03  3:26 ` [PATCH v13 04/10] arm64: Blacklist non-kprobe-able symbol David Long
2016-06-04  3:40   ` Masami Hiramatsu
2016-06-07  3:52     ` David Long
2016-06-10 19:16     ` David Long
2016-06-03  3:26 ` [PATCH v13 05/10] arm64: Kprobes with single stepping support David Long
2016-06-08  1:07   ` Masami Hiramatsu
2016-06-13  4:10     ` David Long
2016-06-13  6:50       ` Masami Hiramatsu
2016-06-13 15:22         ` David Long [this message]
2016-06-14  0:45           ` Masami Hiramatsu
2016-06-22 18:28             ` David Long
2016-06-14  1:42   ` Masami Hiramatsu
2016-06-03  3:26 ` [PATCH v13 06/10] arm64: Treat all entry code as non-kprobe-able David Long
2016-06-07  0:34   ` Masami Hiramatsu
2016-06-03  3:26 ` [PATCH v13 07/10] arm64: kprobes instruction simulation support David Long
2016-06-03  3:26 ` [PATCH v13 08/10] arm64: Add trampoline code for kretprobes David Long
2016-06-07 10:38   ` Masami Hiramatsu
2016-06-13  4:23     ` David Long
2016-06-03  3:26 ` [PATCH v13 09/10] arm64: Add kernel return probes support (kretprobes) David Long
2016-06-07 10:28   ` Masami Hiramatsu
2016-06-22 18:16     ` David Long
2016-06-03  3:26 ` [PATCH v13 10/10] kprobes: Add arm64 case in kprobe example module David Long
2016-06-07 10:12   ` Masami Hiramatsu
2016-06-08  5:49   ` Huang Shijie
2016-06-27  2:54     ` 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=575ECFC7.10207@linaro.org \
    --to=dave.long@linaro.org \
    --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).