From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757572AbbE3HBv (ORCPT ); Sat, 30 May 2015 03:01:51 -0400 Received: from mail9.hitachi.co.jp ([133.145.228.44]:38004 "EHLO mail9.hitachi.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751998AbbE3HBn (ORCPT ); Sat, 30 May 2015 03:01:43 -0400 Message-ID: <5569604F.1010201@hitachi.com> Date: Sat, 30 May 2015 16:01:35 +0900 From: Masami Hiramatsu Organization: Hitachi, Ltd., Japan User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Alexei Starovoitov , He Kuang , wangnan0@huawei.com, paulus@samba.org, a.p.zijlstra@chello.nl, mingo@redhat.com, acme@kernel.org, namhyung@kernel.org, jolsa@kernel.org, dsahern@gmail.com, brendan.d.gregg@gmail.com, daniel@iogearbox.net CC: lizefan@huawei.com, linux-kernel@vger.kernel.org, cti.systems-productivity-manager.ts@hitachi.com Subject: Re: [RFC PATCH v2 09/15] perf probe: Support $params without debuginfo References: <1432456091-73384-1-git-send-email-hekuang@huawei.com> <1432456091-73384-10-git-send-email-hekuang@huawei.com> <556190AA.10406@hitachi.com> <5562DE44.4010601@huawei.com> <5564B279.2090809@plumgrid.com> <55652B7B.2040409@huawei.com> <5565E331.7010606@plumgrid.com> <55671195.5040501@huawei.com> <556759F9.9020908@plumgrid.com> <55680792.1060209@huawei.com> <5568FC5F.40504@hitachi.com> <55691218.6010303@plumgrid.com> In-Reply-To: <55691218.6010303@plumgrid.com> Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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, >> >> > > -- Masami HIRAMATSU Linux Technology Research Center, System Productivity Research Dept. Center for Technology Innovation - Systems Engineering Hitachi, Ltd., Research & Development Group E-mail: masami.hiramatsu.pt@hitachi.com