Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752132AbbE0C20 (ORCPT ); Tue, 26 May 2015 22:28:26 -0400 Received: from szxga02-in.huawei.com ([119.145.14.65]:19941 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751309AbbE0C2Z (ORCPT ); Tue, 26 May 2015 22:28:25 -0400 Subject: Re: [RFC PATCH v2 09/15] perf probe: Support $params without debuginfo To: Alexei Starovoitov , Masami Hiramatsu , , , , , , , , , , 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> CC: , From: He Kuang Message-ID: <55652B7B.2040409@huawei.com> Date: Wed, 27 May 2015 10:27:07 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.0 MIME-Version: 1.0 In-Reply-To: <5564B279.2090809@plumgrid.com> Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit X-Originating-IP: [10.110.54.65] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2199 Lines: 52 hi, Alexei On 2015/5/27 1:50, Alexei Starovoitov wrote: > On 5/25/15 1:33 AM, He Kuang wrote: >> Right, I learnt regparm(3) is mandatory in x86_32, according to rules, >> the first three args will go to regparm(ax, dx, cx). But we should not >> refer arg1~3 to ax, dx, cx because of 64bit parameters (other reasons?). >> >> Consider this keyword is used for generating bpf prologue which fetches >> formal parameters when no debuginfo is provided, for this purpose, we can: >> 1) We just help fetch the $regs or $regparms(If the keyword is >> $regparms, ax/dx/cx is fetched, nothing related to args) to bpf arglists >> and leave the rest things to bpf prog writer. >> >> 2) Keep that on platforms like x86_64 and skip this feature on >> platforms like x86_32. >> >> or any other suggestions? > > Single argument like $regparam or whatever name cannot work on all > architectures, that's why in the very beginning I suggested > 'func(long, char, void*)' syntax to describe arguments when debuginfo > is not available. Calling convention for scalars is simple enough on > all major architectures. x64_64 - trivial, i64_32 - a bit more involved, > but simple enough so that list of types of arguments is enough to figure > out which register or register pair or stack should be used to fetch > argN. > > As Masami has reminded, the use of 'asmlinkage' forces regparm=0, and we can't destinguish them without debuginfo, so 'func(long, char, void*)' syntax not work in everywhere. In fact, all the context infos are there in bpf prog(pt_regs in arg1). To the non-debuginfo case, without the help of prologue, user steps following flow to fetch params: 1. pt_regs(arg1) + architecture => calling regs 2. calling regs + function prototype(SEC) + gcc attributes(like asmlinkage) => formal parameters '$regparms' do the 1st step, though not a full workaround. But for the lack of gcc attributes, it seems we can't do the 2nd step. Any ideas? Thanks -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/