[lkml]   [2015]   [May]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: [RFC PATCH v2 09/15] perf probe: Support $params without debuginfo
On 2015/05/30 10:27, Alexei Starovoitov wrote:
> On 5/29/15 4:55 PM, Masami Hiramatsu wrote:
>> On 2015/05/29 15:30, He Kuang wrote:
>>> hi, Alexei
>>> On 2015/5/29 2:10, Alexei Starovoitov wrote:
>>>> On 5/28/15 6:01 AM, He Kuang wrote:
>>>>>> I don't think you can break it down in two steps like this.
>>>>>>> There is no such thing as 'calling regs'. x86_32 with ax,dx,cx
>>>>>>> are not 'calling regs'. 64-bit values will be passed in a pair.
>>>>>>> Only 'pt_regs + arch + func_proto + asmlinkage' makes sense
>>>>>> >from the user point of view.
>>>>>>> Adding 'asmlinkage' attr is also trivial.
>>>>>>> 'func(long, char) asmlinkage' is easy to parse and the user
>>>>> I think at this early stage, we could make our bpf variable
>>>>> prologue work with debuginfo while keeping bpf 'SEC' syntax
>>>>> consistent with original perf probe. After all, we can use
>>>>> pt_regs directly or relay to perf-probe cache by Masami to deal
>>>>> with non-debug cases.
>>>> so you're saying you don't want to support non-debug case for now?
>>>> Sure, as long as section name parser will be able to support
>>>> 'func(long, char) asmlinkage' syntax in the future without breaking
>>>> compatibility. I'm mostly interested in cases when debug info
>>>> is not available at all. So perf-probe cache is of no use to me.
>>> Yes, that syntax do deal with the situation which current 'perf
>>> probe' syntax not covered, so not only bpf prologue would benifit
>>> from that, maybe we could try to let perf probe involve that.
>> Hmm, then how about below syntax?
>> perf probe x86_acpi_enter_sleep_state $regparams:asmlinkage(char)
>> So, regparams has following synopsis.
>> $regparams[:[asmlinkage|0-6]([u8|u16|u32|u64|ptr][,...])]
> the number doesn't make sense in generic command. Only x86_32 plays
> with calling convention. All other archs are not doing anything special
> for asmlinkage.

Yes, asmlinkage is a kernel hack. However, perf probe is not only for
kprobes, but also uprobes. So someone may want to use it.
Fortunately, perf probe itself can recognize it is kernel or not,
so only if the probe point is on the kernel, asmlinkage will work
as expected.

> I think the following is enough:
> $regparams[[:asmlinkage]([u8|u16|u32|u64|ptr|char|short|long|
> long long|void*][,...])]
> asmlinkage most of the time won't be used and typical command will look
> like: 'func=func $regparams(char, long, void*)'
> which is ok for kprobe.
> For bpf section name I would still prefer 'func(char, long, void*)'
> since it's more concise, easier to remember, more similar to C declaration.

Ah, that's interesting. I think perf probe can also use that :)

perf probe func(s8,ptr) $regparams (or $arg1 $arg2 ...)

Thank you!

>> Note that asmlinkage is a synonym of 0, and default depends on arch :)
>> Some architecture ignores this part, e.g. x86_64 always uses regs.
>> And it is automatically expanded to argX="%reg or $stackX".
>> e.g.
>> $regparams is expanded to
>> arg1=%di arg2=%si arg3=%dx arg4=%cx arg5=%r8 arg6=%r9 (on x86_64)
>> arg1=%ax arg2=%dx arg3=%cx arg4=$stack1 arg5=$stack2 arg6=$stack3 (on i386)
>> $regparams:0 is expanded to
>> arg1=%di arg2=%si arg3=%dx arg4=%cx arg5=%r8 arg6=%r9 (on x86_64)
>> arg1=$stack1 arg2=$stack2 arg3=$stack3 arg4=$stack4 arg5=$stack5 arg6=$stack6 (on i386)
>> $regparams:3(char,long) is expanded to
>> arg1=%di:s8 arg2=%si:s64 (on x86_64)
>> arg1=%ax:s8 arg2=%dx:s64 (on i386)
>> How is this?
>> Thank you,

Linux Technology Research Center, System Productivity Research Dept.
Center for Technology Innovation - Systems Engineering
Hitachi, Ltd., Research & Development Group

 \ /
  Last update: 2015-05-30 09:21    [W:0.068 / U:23.208 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site