From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757447AbbE3B17 (ORCPT ); Fri, 29 May 2015 21:27:59 -0400 Received: from mail-pa0-f45.google.com ([209.85.220.45]:34307 "EHLO mail-pa0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753968AbbE3B1z (ORCPT ); Fri, 29 May 2015 21:27:55 -0400 Message-ID: <55691218.6010303@plumgrid.com> Date: Fri, 29 May 2015 18:27:52 -0700 From: Alexei Starovoitov User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Masami Hiramatsu , 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> In-Reply-To: <5568FC5F.40504@hitachi.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 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. 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. > 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, > >