public inbox for systemtap@sourceware.org
 help / color / mirror / Atom feed
From: David Long <dave.long@linaro.org>
To: William Cohen <wcohen@redhat.com>, Pratyush Anand <panand@redhat.com>
Cc: systemtap@sourceware.org, Mark Brown <broonie@linaro.org>
Subject: Re: exercising current aarch64 kprobe support with systemtap
Date: Fri, 10 Jun 2016 14:37:00 -0000	[thread overview]
Message-ID: <575AD0B4.8020601@linaro.org> (raw)
In-Reply-To: <ecfb1fd7-bdfb-0585-4a48-168cf2d0e893@redhat.com>

On 06/10/2016 10:03 AM, William Cohen wrote:
> On 06/10/2016 09:42 AM, Pratyush Anand wrote:
>> On 10/06/2016:01:49:10 AM, David Long wrote:
>>> Attached are incremental diffs I hope will fix the latest systemtap
>>> failures, without abandoning atomic sequence checking.  I'm trying to avoid
>>> the hex constants but I don't think the insn.c functions help in this case.
>>
>> It will save us from current problem by checking "stp x29,x30,[sp,...]"
>> instruction and returning false if matches. However, we will have to find some
>> way to recognize .word instructions.
>>
>> * An assembly function may not start with "stp x29,x30,[sp,...]", e.g.
>>   __dma_map_area(), _cpu_resume etc. However, it could be least likely that a
>>   .word instruction exists before start of assembly function and that too
>>   contains a word value which could be misleading.
>>
>> * But major issue is, what if someone instruments a kprobe at an address which
>>   contains  .word values. Instruction will never hit, so probe function will not
>>   be called, but when real code reads that .word value, it reads a wrong value.
>>
>> Can GCC provide some compiler option where .word values are located into a
>> specific area?
>>
>> ~Pratyush
>
> Hi Dave and Pratyush,
>
> Expecting the instruction to the stp x29, x30, [sp,...] would be pretty fragile.  The compiler might not generate that for some very simple function or with certain types of optimization. If the compiler could generate a sentinel word before the start of each function that might be a more robust solution.  Maybe something like a breakpoint instruction or something that clearly would not be in an atomic region.
>

I think this is still a reasonable improvement.  The case of both 
heuristics failing together has to be pretty rare and the result is to 
make the safer choice.

I'm looking at what gcc might provide to help.  I made need to talk to a 
compiler expert though, I've always found the gcc option list a bit 
overwhelming.

> -Will
>>
>>>
>>> -dl
>>>
>>
>>> diff --git a/arch/arm64/kernel/kprobes-arm64.c b/arch/arm64/kernel/kprobes-arm64.c
>>> index 28b9c5b..36b4ea5 100644
>>> --- a/arch/arm64/kernel/kprobes-arm64.c
>>> +++ b/arch/arm64/kernel/kprobes-arm64.c
>>> @@ -127,7 +127,9 @@ is_probed_address_atomic(kprobe_opcode_t *scan_start, kprobe_opcode_t *scan_end)
>>>   		 * atomic region starts from exclusive load and ends with
>>>   		 * exclusive store.
>>>   		 */
>>> -		if (aarch64_insn_is_store_ex(le32_to_cpu(*scan_start)))
>>> +		if ((le32_to_cpu(*scan_start) & 0xffc07fff) == 0xa9807bfd)
>>> +			return false;
>>> +		else if (aarch64_insn_is_store_ex(le32_to_cpu(*scan_start)))
>>>   			return false;
>>>   		else if (aarch64_insn_is_load_ex(le32_to_cpu(*scan_start)))
>>>   			return true;
>>
>

  reply	other threads:[~2016-06-10 14:37 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-09 16:17 William Cohen
2016-06-09 19:52 ` William Cohen
2016-06-10  3:42   ` David Long
2016-06-10  5:49   ` David Long
2016-06-10 13:43     ` Pratyush Anand
2016-06-10 14:03       ` William Cohen
2016-06-10 14:37         ` David Long [this message]
2016-06-10 15:27           ` William Cohen
2016-06-10 14:20       ` David Long
2016-06-10 15:11         ` William Cohen
2016-06-10 17:07         ` Pratyush Anand
2016-07-12 14:33     ` William Cohen
2016-07-13 18:26       ` David Long
2016-07-13 18:47         ` Pratyush Anand
2016-07-13 19:45           ` William Cohen
2016-06-10 21:28 ` William Cohen
2016-06-10 21:37   ` William Cohen
2016-06-13  4:28   ` Pratyush Anand
2016-06-13 13:42     ` William Cohen
2016-06-22 20:24   ` William Cohen
2016-06-23  3:19     ` David Long
2016-06-23 13:42       ` William Cohen
2016-06-23 13:47         ` David Smith
2016-06-23 15:49       ` William Cohen
2016-06-23 18:26         ` David Long
2016-06-23 19:22           ` William Cohen
2016-06-27  2:57             ` David Long
2016-06-27 14:18             ` Pratyush Anand
2016-06-28  3:20               ` William Cohen
2016-07-04 12:46                 ` Pratyush Anand
2016-07-07 19:05                   ` David Long
2016-07-07 19:58                     ` Frank Ch. Eigler
2016-08-03 13:13                       ` Pratyush Anand
2016-08-03 14:51                         ` William Cohen
2016-08-03 15:11                           ` David Long
2016-08-03 17:40                         ` William Cohen
2016-08-03 20:00                           ` Lastest kprobes64 patch David Long
2016-08-03 20:01                             ` Frank Ch. Eigler
2016-08-03 20:08                               ` David Long
2016-08-04  5:03                             ` Pratyush Anand
2016-08-04 13:07                               ` David Long
2016-08-04  4:42                           ` exercising current aarch64 kprobe support with systemtap Pratyush Anand
2016-08-04 13:57                             ` William Cohen
2016-08-04 14:36                               ` Pratyush Anand
2016-08-04 14:50                                 ` William Cohen
2016-08-04 20:51                                 ` William Cohen
2016-08-17 14:36                                   ` William Cohen
2016-08-17 18:04                                     ` David Smith
2016-08-17 18:28                                       ` William Cohen
2016-08-18 15:07                                         ` David Smith
2016-08-18 15:16                                           ` William Cohen
2016-08-18 15:39                                             ` David Smith
2016-08-18 14:55                                     ` Pratyush Anand
2016-06-13 16:11 ` William Cohen
2016-06-13 16:15   ` William Cohen
2016-06-14  4:27   ` Pratyush Anand

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=575AD0B4.8020601@linaro.org \
    --to=dave.long@linaro.org \
    --cc=broonie@linaro.org \
    --cc=panand@redhat.com \
    --cc=systemtap@sourceware.org \
    --cc=wcohen@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 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 read-only IMAP folder(s) and NNTP newsgroup(s).