public inbox for systemtap@sourceware.org
 help / color / mirror / Atom feed
From: William Cohen <wcohen@redhat.com>
To: Pratyush Anand <panand@redhat.com>
Cc: David Long <dave.long@linaro.org>, systemtap@sourceware.org
Subject: Re: Recent aarch64 kprobes and uprobes patch systemtap testing
Date: Wed, 16 Dec 2015 13:10:00 -0000	[thread overview]
Message-ID: <567162C8.6020508@redhat.com> (raw)
In-Reply-To: <20151216115528.GB316@dhcppc13.redhat.com>

On 12/16/2015 06:55 AM, Pratyush Anand wrote:
> On 11/12/2015:03:59:53 PM, William Cohen wrote:

>> Hi Dave and Pratyush,
>>
>> I did some more experimentation with the fslatency-nd and fsslow-nd tests to see what is going on.  The problem seems to be related to the return probes.  I have a small reproducer attached which runs fine on x86_64 machine.  However on aarch64 it has the bogus read because some of the argument registers have changed value
>>
>> # ../install/bin/stap ./aarch64_retkprobe_issue2.stp 
>> ERROR: read fault [man error::fault] at 0x0000000000000034 (addr) near operator '@cast' at ./aarch64_retkprobe_issue2.stp:13:7
>> pc : [<fffffe000021e37c>] lr : [<fffffe000021eb64>] pstate: 80000145
>> sp : fffffe00bad7be30
>> x29: fffffe00bad7be30 x28: fffffe00bad78000 
>> x27: fffffe0000912000 x26: 000000000000003f 
>> x25: 000000000000011d x24: 0000000000000015 
>> x23: 0000000080000000 x22: 000003fff82b9760 
>> x21: fffffe00bad7bec8 x20: 0000000000002004 
>> x19: fffffe01b716e100 x18: 000003fff82b8160 
>> x17: 000003ff849bf0a0 x16: fffffe000021f4a0 
>> x15: 0000000000000004 x14: 000003fff82bb910 
>> x13: 0000000000000001 x12: 000003ff7d75f200 
>> x11: 00000000003d0f00 x10: 000003ff849b7af4 
>> x9 : 0000000000000028 x8 : 0000000000000020 
>> x7 : fffffe00bc5c3600 x6 : 0000000000000000 
>> x5 : 0000000000000000 x4 : 0000000000000000 
>> x3 : fffffe00bad7bec8 x2 : 0000000000002004 
>> x1 : 000003fff82b9760 x0 : fffffe01b716e100 
>>
>> pc : [<fffffe000021e37c>] lr : [<fffffe000009fbe0>] pstate: 60000145
>> sp : fffffe00bad7be30
>> x29: fffffe00bad7be30 x28: fffffe00bad78000 
>> x27: fffffe0000912000 x26: 000000000000003f 
>> x25: 000000000000011d x24: 0000000000000015 
>> x23: 0000000080000000 x22: 000003fff82b9760 
>> x21: fffffe00bad7bec8 x20: 0000000000002004 
>> x19: fffffe01b716e100 x18: 000003fff82b8160 
>> x17: 000003ff849bf0a0 x16: fffffe000021f4a0 
>> x15: 0000000000000004 x14: 000003fff82bb910 
>> x13: 0000000000000001 x12: 000003ff7d75f200 
>> x11: 00000000003d0f00 x10: 000003ff849b7af4 
>> x9 : 0000000000000028 x8 : 0000000000000020 
>> x7 : fffffe00bc5c3600 x6 : 000003fff82b976c 
>> x5 : 000003fff82b976c x4 : 0000000000000000 
>> x3 : 0000000000000000 x2 : 0000000000000000 
>> x1 : 0000000000000000 x0 : 000000000000000c 
> 
> Although I am not sure, but this is what it seems to me:
> 
> First argument (file) is in x0, and which is 0xC in case of kretprobe. But, can
> x0 really be considered as 1st arg in case of kretprobe? 
> I think, x0 should have return value of __vfs_read() in case of kretprobe. So,
> 0xC could be the number of bytes read.
> 
> With perf I see:
> 
> # perf probe -k vmlinux __vfs_read_exit=__vfs_read%return file
> Semantic error :You can't specify local variable for kretprobe.
> 
> So, I am not sure what mechanism systemtap uses to get local variable in case of
> kretprobe.
> 
> Moreover, on x86 I see that loop exits after the 1st print_regs() only. So it
> means there was valid file->f_op->read() for the 1st file itself. If I comment
> "kprobe.function("__vfs_read")", then there is no print at all. It means, we are
> not hitting a case on x86 when callback was called for kretprobe and we had
> nonzero 1st argument.
> 
> ~Pratyush
> 

Hi Pratyush,

I found that the problem was that the systemtap scripts assumed x86_64 behavior where the arguments passed into the function are in memory and are still around on return.  For aarch64 (and other architectures that pass arguments via registers) the registers holding the values get clobbered.  I checked in a fix into the exampls to address this problem:

https://sourceware.org/git/gitweb.cgi?p=systemtap.git;a=commit;h=3d0c2f452f09a64b800aabe68508f8f0183f0ea1

I also filed a systemtap bug to look for this issue in other places in systemtap:

https://sourceware.org/bugzilla/show_bug.cgi?id=19360

-Will

  reply	other threads:[~2015-12-16 13:10 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-10 20:24 William Cohen
2015-12-10 21:12 ` David Long
2015-12-11  4:19   ` Pratyush Anand
2015-12-11  4:43     ` David Long
2015-12-11 17:02   ` William Cohen
2015-12-16  5:22     ` Pratyush Anand
2015-12-16 13:14       ` William Cohen
2015-12-17  0:53         ` Pratyush Anand
2015-12-11 20:59   ` William Cohen
2015-12-16 11:55     ` Pratyush Anand
2015-12-16 13:10       ` William Cohen [this message]
2015-12-10 21:17 ` David Long
2015-12-11 17:23 ` David Smith

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