From patchwork Mon Oct 23 09:57:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Maguire X-Patchwork-Id: 13432700 X-Patchwork-Delegate: bpf@iogearbox.net Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 405DE1429B for ; Mon, 23 Oct 2023 09:58:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="M02WGdcB" Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B8F2C1994 for ; Mon, 23 Oct 2023 02:58:26 -0700 (PDT) Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 39N6kMXs018254; Mon, 23 Oct 2023 09:57:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=corp-2023-03-30; bh=QIuDmul7oyTlvtmdeR4Erkrj5nyqjgT3l/40UW/4P44=; b=M02WGdcBvSGDRMjouSzcHkMsBEu5ThOMexBUn7cOZbmjWIN+apZPMlTNmru9rEkEA7bf 3NjkRRiIxfbU0sJ/vrGLGgj3T+5BxQdYoExMnBotcICyISMbLs9WhLLO8wcc/KU6cY0i R/B7XnLy0bh5+gMve02exaIGd5oH8s7gdbdCop0Jlbhie53T+ttIQXaauvUmkCAipy7P qmTWbl/89x3IlnvZYTgyWndEAvJkdt5nfQHgA50eE5DCS8g2OAvY2KMjd/2EIeo2aVc4 Jd4IrEFIXT71L3dScOQLRsfCHuaFMYYn0ccoidN7ag5OzfNCKno2Q/pwUIH0/wIFdkSJ cw== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3tv52dtqxq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 23 Oct 2023 09:57:38 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 39N9uQnq001762; Mon, 23 Oct 2023 09:57:37 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3tv53a810m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 23 Oct 2023 09:57:37 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 39N9t2cN039213; Mon, 23 Oct 2023 09:57:37 GMT Received: from bpf.uk.oracle.com (dhcp-10-175-206-92.vpn.oracle.com [10.175.206.92]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 3tv53a80w0-2; Mon, 23 Oct 2023 09:57:36 +0000 From: Alan Maguire To: acme@kernel.org, andrii.nakryiko@gmail.com Cc: jolsa@kernel.org, ast@kernel.org, daniel@iogearbox.net, eddyz87@gmail.com, martin.lau@linux.dev, song@kernel.org, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com, haoluo@google.com, mykolal@fb.com, bpf@vger.kernel.org, Alan Maguire , Andrii Nakryiko Subject: [PATCH v4 dwarves 1/5] btf_encoder, pahole: move btf encoding options into conf_load Date: Mon, 23 Oct 2023 10:57:22 +0100 Message-Id: <20231023095726.1179529-2-alan.maguire@oracle.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231023095726.1179529-1-alan.maguire@oracle.com> References: <20231023095726.1179529-1-alan.maguire@oracle.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-10-23_07,2023-10-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxlogscore=999 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2310170001 definitions=main-2310230085 X-Proofpoint-ORIG-GUID: 4ig3BmBQqG5NkmGnDLuGlIVhNZGP58MA X-Proofpoint-GUID: 4ig3BmBQqG5NkmGnDLuGlIVhNZGP58MA ...rather than passing them to btf_encoder__new(); this tidies up the encoder API and also allows us to use generalized methods to translate from a BTF feature (forthcoming) to a conf_load value. Signed-off-by: Alan Maguire Acked-by: Jiri Olsa Acked-by: Andrii Nakryiko Acked-by: Eduard Zingerman --- btf_encoder.c | 8 ++++---- btf_encoder.h | 2 +- dwarves.h | 3 +++ pahole.c | 21 ++++++++------------- 4 files changed, 16 insertions(+), 18 deletions(-) diff --git a/btf_encoder.c b/btf_encoder.c index 65f6e71..fd04008 100644 --- a/btf_encoder.c +++ b/btf_encoder.c @@ -1625,7 +1625,7 @@ out: return err; } -struct btf_encoder *btf_encoder__new(struct cu *cu, const char *detached_filename, struct btf *base_btf, bool skip_encoding_vars, bool force, bool gen_floats, bool verbose) +struct btf_encoder *btf_encoder__new(struct cu *cu, const char *detached_filename, struct btf *base_btf, bool verbose, struct conf_load *conf_load) { struct btf_encoder *encoder = zalloc(sizeof(*encoder)); @@ -1639,9 +1639,9 @@ struct btf_encoder *btf_encoder__new(struct cu *cu, const char *detached_filenam if (encoder->btf == NULL) goto out_delete; - encoder->force = force; - encoder->gen_floats = gen_floats; - encoder->skip_encoding_vars = skip_encoding_vars; + encoder->force = conf_load->btf_encode_force; + encoder->gen_floats = conf_load->btf_gen_floats; + encoder->skip_encoding_vars = conf_load->skip_encoding_btf_vars; encoder->verbose = verbose; encoder->has_index_type = false; encoder->need_index_type = false; diff --git a/btf_encoder.h b/btf_encoder.h index 34516bb..f54c95a 100644 --- a/btf_encoder.h +++ b/btf_encoder.h @@ -16,7 +16,7 @@ struct btf; struct cu; struct list_head; -struct btf_encoder *btf_encoder__new(struct cu *cu, const char *detached_filename, struct btf *base_btf, bool skip_encoding_vars, bool force, bool gen_floats, bool verbose); +struct btf_encoder *btf_encoder__new(struct cu *cu, const char *detached_filename, struct btf *base_btf, bool verbose, struct conf_load *conf_load); void btf_encoder__delete(struct btf_encoder *encoder); int btf_encoder__encode(struct btf_encoder *encoder); diff --git a/dwarves.h b/dwarves.h index eb1a6df..db68161 100644 --- a/dwarves.h +++ b/dwarves.h @@ -68,6 +68,9 @@ struct conf_load { bool skip_encoding_btf_enum64; bool btf_gen_optimized; bool skip_encoding_btf_inconsistent_proto; + bool skip_encoding_btf_vars; + bool btf_gen_floats; + bool btf_encode_force; uint8_t hashtable_bits; uint8_t max_hashtable_bits; uint16_t kabi_prefix_len; diff --git a/pahole.c b/pahole.c index e843999..7a41dc3 100644 --- a/pahole.c +++ b/pahole.c @@ -32,13 +32,10 @@ static struct btf_encoder *btf_encoder; static char *detached_btf_filename; static bool btf_encode; -static bool btf_gen_floats; static bool ctf_encode; static bool sort_output; static bool need_resort; static bool first_obj_only; -static bool skip_encoding_btf_vars; -static bool btf_encode_force; static const char *base_btf_file; static const char *prettify_input_filename; @@ -1786,9 +1783,9 @@ static error_t pahole__options_parser(int key, char *arg, case ARGP_header_type: conf.header_type = arg; break; case ARGP_skip_encoding_btf_vars: - skip_encoding_btf_vars = true; break; + conf_load.skip_encoding_btf_vars = true; break; case ARGP_btf_encode_force: - btf_encode_force = true; break; + conf_load.btf_encode_force = true; break; case ARGP_btf_base: base_btf_file = arg; break; case ARGP_kabi_prefix: @@ -1797,9 +1794,9 @@ static error_t pahole__options_parser(int key, char *arg, case ARGP_numeric_version: print_numeric_version = true; break; case ARGP_btf_gen_floats: - btf_gen_floats = true; break; + conf_load.btf_gen_floats = true; break; case ARGP_btf_gen_all: - btf_gen_floats = true; break; + conf_load.btf_gen_floats = true; break; case ARGP_with_flexible_array: show_with_flexible_array = true; break; case ARGP_prettify_input_filename: @@ -3063,8 +3060,8 @@ static enum load_steal_kind pahole_stealer(struct cu *cu, * And, it is used by the thread * create it. */ - btf_encoder = btf_encoder__new(cu, detached_btf_filename, conf_load->base_btf, skip_encoding_btf_vars, - btf_encode_force, btf_gen_floats, global_verbose); + btf_encoder = btf_encoder__new(cu, detached_btf_filename, conf_load->base_btf, + global_verbose, conf_load); if (btf_encoder && thr_data) { struct thread_data *thread = thr_data; @@ -3093,10 +3090,8 @@ static enum load_steal_kind pahole_stealer(struct cu *cu, thread->encoder = btf_encoder__new(cu, detached_btf_filename, NULL, - skip_encoding_btf_vars, - btf_encode_force, - btf_gen_floats, - global_verbose); + global_verbose, + conf_load); thread->btf = btf_encoder__btf(thread->encoder); } encoder = thread->encoder; From patchwork Mon Oct 23 09:57:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Maguire X-Patchwork-Id: 13432698 X-Patchwork-Delegate: bpf@iogearbox.net Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D63614297 for ; Mon, 23 Oct 2023 09:58:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="Qfl/ibIh" Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 575A61717 for ; Mon, 23 Oct 2023 02:58:26 -0700 (PDT) Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 39N6j9IM029437; Mon, 23 Oct 2023 09:57:45 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=corp-2023-03-30; bh=b/K50mY8+chMNeje8FvYiijwCMrdZp7QY183COsfuOg=; b=Qfl/ibIhsuGOJPr/JnZqm0xCtFC/nCej9DGjQCpUPuxcGv8/yAE+12Hhe6YgkcpiCtLQ hqDInyGC9PIcqROpw78mUGVIuTeEzuLZ4yCggPQqZ/06hG7FAj1JvqhKTo0uJ3T15s7y L1EXvXuZ0W2v5JJZhC95iVrcygUZ1ekQmZa5HGM4IDP2RgptHy/JDMdyIlj1fXrjQL3G RRUk5Zh0KkzGPcdTTt3ptNI2vNb8Ytl0hv3ALOnlk1gwMpN0q9Z9gRn15iQksAmToohY bXK7HiVoCaHFkWIUJ0C01HwnjPN5t9IGEYmh7v8HhV5dYKD+ZrfPWKySW20Ef3W6KNyZ Aw== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3tv5jbasft-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 23 Oct 2023 09:57:44 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 39N7DFHB001556; Mon, 23 Oct 2023 09:57:43 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3tv53a8129-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 23 Oct 2023 09:57:43 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 39N9t2cP039213; Mon, 23 Oct 2023 09:57:42 GMT Received: from bpf.uk.oracle.com (dhcp-10-175-206-92.vpn.oracle.com [10.175.206.92]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 3tv53a80w0-3; Mon, 23 Oct 2023 09:57:42 +0000 From: Alan Maguire To: acme@kernel.org, andrii.nakryiko@gmail.com Cc: jolsa@kernel.org, ast@kernel.org, daniel@iogearbox.net, eddyz87@gmail.com, martin.lau@linux.dev, song@kernel.org, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com, haoluo@google.com, mykolal@fb.com, bpf@vger.kernel.org, Alan Maguire , Andrii Nakryiko Subject: [PATCH v4 dwarves 2/5] dwarves: move ARRAY_SIZE() to dwarves.h Date: Mon, 23 Oct 2023 10:57:23 +0100 Message-Id: <20231023095726.1179529-3-alan.maguire@oracle.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231023095726.1179529-1-alan.maguire@oracle.com> References: <20231023095726.1179529-1-alan.maguire@oracle.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-10-23_07,2023-10-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxlogscore=758 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2310170001 definitions=main-2310230085 X-Proofpoint-GUID: rh2pUkB7vcpfgAvnlFfrzTGLj6V0KGKC X-Proofpoint-ORIG-GUID: rh2pUkB7vcpfgAvnlFfrzTGLj6V0KGKC ...so it can be used by pahole.c too. Signed-off-by: Alan Maguire Acked-by: Jiri Olsa Acked-by: Andrii Nakryiko Acked-by: Eduard Zingerman --- dwarves.c | 16 ---------------- dwarves.h | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/dwarves.c b/dwarves.c index 218367b..9f97eda 100644 --- a/dwarves.c +++ b/dwarves.c @@ -2094,22 +2094,6 @@ int cus__load_file(struct cus *cus, struct conf_load *conf, _min1 < _min2 ? _min1 : _min2; }) #endif -/* Force a compilation error if condition is true, but also produce a - result (of value 0 and type size_t), so the expression can be used - e.g. in a structure initializer (or where-ever else comma expressions - aren't permitted). */ -#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) - -/* Are two types/vars the same type (ignoring qualifiers)? */ -#ifndef __same_type -# define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) -#endif - -/* &a[0] degrades to a pointer: a different type from an array */ -#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0])) - -#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) - #ifndef DW_LANG_C89 #define DW_LANG_C89 0x0001 #endif diff --git a/dwarves.h b/dwarves.h index db68161..857b37c 100644 --- a/dwarves.h +++ b/dwarves.h @@ -19,6 +19,22 @@ #include "list.h" #include "rbtree.h" +/* Force a compilation error if condition is true, but also produce a + result (of value 0 and type size_t), so the expression can be used + e.g. in a structure initializer (or where-ever else comma expressions + aren't permitted). */ +#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) + +/* Are two types/vars the same type (ignoring qualifiers)? */ +#ifndef __same_type +# define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) +#endif + +/* &a[0] degrades to a pointer: a different type from an array */ +#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0])) + +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) + struct cu; enum load_steal_kind { From patchwork Mon Oct 23 09:57:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Maguire X-Patchwork-Id: 13432697 X-Patchwork-Delegate: bpf@iogearbox.net Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 47A5713AE8 for ; Mon, 23 Oct 2023 09:58:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="KWjkSriD" Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D27B110C6 for ; Mon, 23 Oct 2023 02:58:09 -0700 (PDT) Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 39N6jxD7005447; Mon, 23 Oct 2023 09:57:50 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=corp-2023-03-30; bh=ARCRmRxammHldcsV9SzQM9FIPwy+t3ssksLZSriQi14=; b=KWjkSriDeUVgl06zKCh5jJUas/MPIX55jJ+eSztDolv8xY+HQFLQDS6pSaRLKbWh5nRj Xpwqq/RHucQOWz7ChDeEQf5T/CZjgSZOwlECTTEjQIsy50yvGXLn1Tigb1llv4c8nr0Y Jmhk4lbVyjehkZJHt9ZeiRy8yDLjxq2NE2TlSdhWpH+N0DBJHr9BilYcen4MzZUm47W5 G2KFDoqwjEQs4ChSeAi3GqASYI7gGZDaQoDnIg4TBnuGuzfYrjiPwZoRtkwlKGuwTQwn hMt9ulvMD9TMYmb40sLXzK8IdHuIpWWvAp3/Shb4kCoJ7wo87gvMTdrgt1Wlul4PyZg0 9A== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3tv6pctq8c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 23 Oct 2023 09:57:49 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 39N8skvl001564; Mon, 23 Oct 2023 09:57:49 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3tv53a8144-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 23 Oct 2023 09:57:49 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 39N9t2cR039213; Mon, 23 Oct 2023 09:57:48 GMT Received: from bpf.uk.oracle.com (dhcp-10-175-206-92.vpn.oracle.com [10.175.206.92]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 3tv53a80w0-4; Mon, 23 Oct 2023 09:57:47 +0000 From: Alan Maguire To: acme@kernel.org, andrii.nakryiko@gmail.com Cc: jolsa@kernel.org, ast@kernel.org, daniel@iogearbox.net, eddyz87@gmail.com, martin.lau@linux.dev, song@kernel.org, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com, haoluo@google.com, mykolal@fb.com, bpf@vger.kernel.org, Alan Maguire , Andrii Nakryiko Subject: [PATCH v4 dwarves 3/5] pahole: add --btf_features support Date: Mon, 23 Oct 2023 10:57:24 +0100 Message-Id: <20231023095726.1179529-4-alan.maguire@oracle.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231023095726.1179529-1-alan.maguire@oracle.com> References: <20231023095726.1179529-1-alan.maguire@oracle.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-10-23_07,2023-10-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxlogscore=999 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2310170001 definitions=main-2310230085 X-Proofpoint-GUID: C-v4VYtJ4pCNcS8utsAX5AFEVAPVPN5z X-Proofpoint-ORIG-GUID: C-v4VYtJ4pCNcS8utsAX5AFEVAPVPN5z This allows consumers to specify an opt-in set of features they want to use in BTF encoding. Supported features are a comma-separated combination of encode_force Ignore invalid symbols when encoding BTF. var Encode variables using BTF_KIND_VAR in BTF. float Encode floating-point types in BTF. decl_tag Encode declaration tags using BTF_KIND_DECL_TAG. type_tag Encode type tags using BTF_KIND_TYPE_TAG. enum64 Encode enum64 values with BTF_KIND_ENUM64. optimized_func Encode representations of optimized functions with suffixes like ".isra.0" etc consistent_func Avoid encoding inconsistent static functions. These occur when a parameter is optimized out in some CUs and not others, or when the same function name has inconsistent BTF descriptions in different CUs. Specifying "--btf_features=all" is the equivalent to setting all of the above. If pahole does not know about a feature specified in --btf_features it silently ignores it. The --btf_features can either be specified via a single comma-separated list --btf_features=enum64,float ...or via multiple --btf_features values --btf_features=enum64 --btf_features=float These properties allow us to use the --btf_features option in the kernel scripts/pahole_flags.sh script to specify the desired set of BTF features. If a feature named in --btf_features is not present in the version of pahole used, BTF encoding will not complain. This is desired because it means we no longer have to tie new features to a specific pahole version. Suggested-by: Andrii Nakryiko Suggested-by: Eduard Zingerman Signed-off-by: Alan Maguire Acked-by: Jiri Olsa Acked-by: Andrii Nakryiko Acked-by: Eduard Zingerman --- man-pages/pahole.1 | 24 +++++++++ pahole.c | 132 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 155 insertions(+), 1 deletion(-) diff --git a/man-pages/pahole.1 b/man-pages/pahole.1 index c1b48de..a09885f 100644 --- a/man-pages/pahole.1 +++ b/man-pages/pahole.1 @@ -273,6 +273,30 @@ Generate BTF for functions with optimization-related suffixes (.isra, .constprop .B \-\-btf_gen_all Allow using all the BTF features supported by pahole. +.TP +.B \-\-btf_features=FEATURE_LIST +Encode BTF using the specified feature list, or specify 'all' for all features supported. This option can be used as an alternative to unsing multiple BTF-related options. Supported features are + +.nf + encode_force Ignore invalid symbols when encoding BTF; for example + if a symbol has an invalid name, it will be ignored + and BTF encoding will continue. + var Encode variables using BTF_KIND_VAR in BTF. + float Encode floating-point types in BTF. + decl_tag Encode declaration tags using BTF_KIND_DECL_TAG. + type_tag Encode type tags using BTF_KIND_TYPE_TAG. + enum64 Encode enum64 values with BTF_KIND_ENUM64. + optimized_func Encode representations of optimized functions + with suffixes like ".isra.0". + consistent_func Avoid encoding inconsistent static functions. + These occur when a parameter is optimized out + in some CUs and not others, or when the same + function name has inconsistent BTF descriptions + in different CUs. +.fi + +So for example, specifying \-\-btf_encode=var,enum64 will result in a BTF encoding that (as well as encoding basic BTF information) will contain variables and enum64 values. + .TP .B \-l, \-\-show_first_biggest_size_base_type_member Show first biggest size base_type member. diff --git a/pahole.c b/pahole.c index 7a41dc3..fe1cc6a 100644 --- a/pahole.c +++ b/pahole.c @@ -1229,6 +1229,128 @@ ARGP_PROGRAM_VERSION_HOOK_DEF = dwarves_print_version; #define ARGP_skip_emitting_atomic_typedefs 338 #define ARGP_btf_gen_optimized 339 #define ARGP_skip_encoding_btf_inconsistent_proto 340 +#define ARGP_btf_features 341 + +/* --btf_features=feature1[,feature2,..] allows us to specify + * a list of requested BTF features or "all" to enable all features. + * These are translated into the appropriate conf_load values via a + * struct btf_feature which specifies the associated conf_load + * boolean field and whether its default (representing the feature being + * off) is false or true. + * + * btf_features is for opting _into_ features so for a case like + * conf_load->btf_gen_floats, the translation is simple; the presence + * of the "float" feature in --btf_features sets conf_load->btf_gen_floats + * to true. + * + * The more confusing case is for features that are enabled unless + * skipping them is specified; for example + * conf_load->skip_encoding_btf_type_tag. By default - to support + * the opt-in model of only enabling features the user asks for - + * conf_load->skip_encoding_btf_type_tag is set to true (meaning no + * type_tags) and it is only set to false if --btf_features contains + * the "type_tag" keyword. + * + * So from the user perspective, all features specified via + * --btf_features are enabled, and if a feature is not specified, + * it is disabled. + * + * If --btf_features is not used, the usual pahole defaults for + * BTF encoding apply; we encode type/decl tags, do not encode + * floats, etc. This ensures backwards compatibility. + */ +#define BTF_FEATURE(name, alias, default_value) \ + { #name, #alias, &conf_load.alias, default_value } + +struct btf_feature { + const char *name; + const char *option_alias; + bool *conf_value; + bool default_value; +} btf_features[] = { + BTF_FEATURE(encode_force, btf_encode_force, false), + BTF_FEATURE(var, skip_encoding_btf_vars, true), + BTF_FEATURE(float, btf_gen_floats, false), + BTF_FEATURE(decl_tag, skip_encoding_btf_decl_tag, true), + BTF_FEATURE(type_tag, skip_encoding_btf_type_tag, true), + BTF_FEATURE(enum64, skip_encoding_btf_enum64, true), + BTF_FEATURE(optimized_func, btf_gen_optimized, false), + BTF_FEATURE(consistent_func, skip_encoding_btf_inconsistent_proto, false), +}; + +#define BTF_MAX_FEATURE_STR 1024 + +bool set_btf_features_defaults; + +static void init_btf_features(void) +{ + int i; + + /* Only set default values once, as multiple --btf_features= + * may be specified on command-line, and setting defaults + * again could clobber values. The aim is to enable + * all features set across all --btf_features options. + */ + if (set_btf_features_defaults) + return; + for (i = 0; i < ARRAY_SIZE(btf_features); i++) + *btf_features[i].conf_value = btf_features[i].default_value; + set_btf_features_defaults = true; +} + +static struct btf_feature *find_btf_feature(char *name) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(btf_features); i++) { + if (strcmp(name, btf_features[i].name) == 0) + return &btf_features[i]; + } + return NULL; +} + +static void enable_btf_feature(struct btf_feature *feature) +{ + /* switch "default-off" features on, and "default-on" features + * off; i.e. negate the default value. + */ + *feature->conf_value = !feature->default_value; +} + +/* Translate --btf_features=feature1[,feature2] into conf_load values. + * Explicitly ignores unrecognized features to allow future specification + * of new opt-in features. + */ +static void parse_btf_features(const char *features) +{ + char *saveptr = NULL, *s, *feature_name; + char f[BTF_MAX_FEATURE_STR]; + + init_btf_features(); + + if (strcmp(features, "all") == 0) { + int i; + + for (i = 0; i < ARRAY_SIZE(btf_features); i++) + enable_btf_feature(&btf_features[i]); + return; + } + + strncpy(f, features, sizeof(f)); + s = f; + while ((feature_name = strtok_r(s, ",", &saveptr)) != NULL) { + struct btf_feature *feature = find_btf_feature(feature_name); + + if (!feature) { + if (global_verbose) + fprintf(stderr, "Ignoring unsupported feature '%s'\n", + feature_name); + } else { + enable_btf_feature(feature); + } + s = NULL; + } +} static const struct argp_option pahole__options[] = { { @@ -1651,6 +1773,12 @@ static const struct argp_option pahole__options[] = { .key = ARGP_skip_encoding_btf_inconsistent_proto, .doc = "Skip functions that have multiple inconsistent function prototypes sharing the same name, or that use unexpected registers for parameter values." }, + { + .name = "btf_features", + .key = ARGP_btf_features, + .arg = "FEATURE_LIST", + .doc = "Specify supported BTF features in FEATURE_LIST or 'all' for all supported features. See the pahole manual page for the list of supported features." + }, { .name = NULL, } @@ -1796,7 +1924,7 @@ static error_t pahole__options_parser(int key, char *arg, case ARGP_btf_gen_floats: conf_load.btf_gen_floats = true; break; case ARGP_btf_gen_all: - conf_load.btf_gen_floats = true; break; + parse_btf_features("all"); break; case ARGP_with_flexible_array: show_with_flexible_array = true; break; case ARGP_prettify_input_filename: @@ -1826,6 +1954,8 @@ static error_t pahole__options_parser(int key, char *arg, conf_load.btf_gen_optimized = true; break; case ARGP_skip_encoding_btf_inconsistent_proto: conf_load.skip_encoding_btf_inconsistent_proto = true; break; + case ARGP_btf_features: + parse_btf_features(arg); break; default: return ARGP_ERR_UNKNOWN; } From patchwork Mon Oct 23 09:57:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Maguire X-Patchwork-Id: 13432699 X-Patchwork-Delegate: bpf@iogearbox.net Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D60614295 for ; Mon, 23 Oct 2023 09:58:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="lSwhhNuY" Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 75D331713 for ; Mon, 23 Oct 2023 02:58:25 -0700 (PDT) Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 39N6jrTg030564; Mon, 23 Oct 2023 09:57:54 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=corp-2023-03-30; bh=ri2DGNpIXhyi0bmfjNaeJSqPt7gbZUT11fBM5tpD3uU=; b=lSwhhNuYy7ZpRrKOam1XXz/7G86nS3aumpDz9t0jgEz0Yhf7nf2B7TjhXTOGhFqY91lZ 8ydAJ09tM8FmyB2bFIQfdMp86cbT4xj7Gux1JfWSbkKTqXss/D1EFJffMrkiAYThiGCc tR3xp+gv95+NbCrCh+KEre9g58JK3LnxH0ZND+qa6p3TJ0N6/Wo+qkYlrYM2XeiXlwm+ FWOahpDyygDqWW5KhFBHj2Ur9Pd7WZ4JpDIB74hKv1MJV0UAvvyKt5j0kJYhYvGJqQkv BHwDAspZvXg1bD5iTAChIG/UHLIBELAVpIV0SxDgc5RSCsHMI/UNTBkfxl9gBMMb3XeI LQ== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3tv68tar0n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 23 Oct 2023 09:57:54 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 39N7ZY80001475; Mon, 23 Oct 2023 09:57:53 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3tv53a815m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 23 Oct 2023 09:57:53 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 39N9t2cT039213; Mon, 23 Oct 2023 09:57:52 GMT Received: from bpf.uk.oracle.com (dhcp-10-175-206-92.vpn.oracle.com [10.175.206.92]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 3tv53a80w0-5; Mon, 23 Oct 2023 09:57:52 +0000 From: Alan Maguire To: acme@kernel.org, andrii.nakryiko@gmail.com Cc: jolsa@kernel.org, ast@kernel.org, daniel@iogearbox.net, eddyz87@gmail.com, martin.lau@linux.dev, song@kernel.org, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com, haoluo@google.com, mykolal@fb.com, bpf@vger.kernel.org, Alan Maguire , Andrii Nakryiko Subject: [PATCH v4 dwarves 4/5] pahole: add --supported_btf_features Date: Mon, 23 Oct 2023 10:57:25 +0100 Message-Id: <20231023095726.1179529-5-alan.maguire@oracle.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231023095726.1179529-1-alan.maguire@oracle.com> References: <20231023095726.1179529-1-alan.maguire@oracle.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-10-23_07,2023-10-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxlogscore=999 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2310170001 definitions=main-2310230085 X-Proofpoint-ORIG-GUID: lr6Qu1DfBci72nRVlbpvbaHEtK8SSTzs X-Proofpoint-GUID: lr6Qu1DfBci72nRVlbpvbaHEtK8SSTzs By design --btf_features=FEATURE1[,FEATURE2,...] will not complain if an unrecognized feature is specified. This allows the kernel build process to specify new features regardless of whether they are supported by the version of pahole used; in such cases we do not wish for every invocation of pahole to complain. However it is still valuable to have a way of knowing which BTF features pahole supports; this could be logged as part of the build process for example. By specifying --supported_btf_features a comma-separated list is returned; for example: $ pahole --supported_btf_features encode_force,var,float,decl_tag,type_tag,enum64,optimized_func,consistent_func Signed-off-by: Alan Maguire Acked-by: Jiri Olsa Acked-by: Andrii Nakryiko Acked-by: Eduard Zingerman --- man-pages/pahole.1 | 4 ++++ pahole.c | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/man-pages/pahole.1 b/man-pages/pahole.1 index a09885f..6148915 100644 --- a/man-pages/pahole.1 +++ b/man-pages/pahole.1 @@ -297,6 +297,10 @@ Encode BTF using the specified feature list, or specify 'all' for all features s So for example, specifying \-\-btf_encode=var,enum64 will result in a BTF encoding that (as well as encoding basic BTF information) will contain variables and enum64 values. +.TP +.B \-\-supported_btf_features +Show set of BTF features supported by \-\-btf_features option and exit. Useful for checking which features are supported since \-\-btf_features will not emit an error if an unrecognized feature is specified. + .TP .B \-l, \-\-show_first_biggest_size_base_type_member Show first biggest size base_type member. diff --git a/pahole.c b/pahole.c index fe1cc6a..37fd2a4 100644 --- a/pahole.c +++ b/pahole.c @@ -1230,6 +1230,7 @@ ARGP_PROGRAM_VERSION_HOOK_DEF = dwarves_print_version; #define ARGP_btf_gen_optimized 339 #define ARGP_skip_encoding_btf_inconsistent_proto 340 #define ARGP_btf_features 341 +#define ARGP_supported_btf_features 342 /* --btf_features=feature1[,feature2,..] allows us to specify * a list of requested BTF features or "all" to enable all features. @@ -1317,6 +1318,18 @@ static void enable_btf_feature(struct btf_feature *feature) *feature->conf_value = !feature->default_value; } +static void show_supported_btf_features(FILE *output) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(btf_features); i++) { + if (i > 0) + fprintf(output, ","); + fprintf(output, "%s", btf_features[i].name); + } + fprintf(output, "\n"); +} + /* Translate --btf_features=feature1[,feature2] into conf_load values. * Explicitly ignores unrecognized features to allow future specification * of new opt-in features. @@ -1779,6 +1792,11 @@ static const struct argp_option pahole__options[] = { .arg = "FEATURE_LIST", .doc = "Specify supported BTF features in FEATURE_LIST or 'all' for all supported features. See the pahole manual page for the list of supported features." }, + { + .name = "supported_btf_features", + .key = ARGP_supported_btf_features, + .doc = "Show list of btf_features supported by pahole and exit." + }, { .name = NULL, } @@ -1956,6 +1974,8 @@ static error_t pahole__options_parser(int key, char *arg, conf_load.skip_encoding_btf_inconsistent_proto = true; break; case ARGP_btf_features: parse_btf_features(arg); break; + case ARGP_supported_btf_features: + show_supported_btf_features(stdout); exit(0); default: return ARGP_ERR_UNKNOWN; } From patchwork Mon Oct 23 09:57:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Maguire X-Patchwork-Id: 13432701 X-Patchwork-Delegate: bpf@iogearbox.net Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8D00513AE8 for ; Mon, 23 Oct 2023 09:58:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="czy1XQHW" Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AD4701BC2 for ; Mon, 23 Oct 2023 02:58:41 -0700 (PDT) Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 39N6kNoK031080; Mon, 23 Oct 2023 09:58:23 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=corp-2023-03-30; bh=CKAc975VH4SNdzKGqXFmts/x7DS5CY8Im0FpTv/76Vs=; b=czy1XQHWNSZb1+nOqE3A4kL00yIG/ABlxwe5HsXVdREoEhujGbLPJsYEIgzUQbNQ7dkk SHSD/6wpeWMOvJUGjEwla/2h/prM3ZoUKwlOADaAYFnuIt1dL0n25b1UohkPgVrR94x7 LZok3n0e0wCPsIg5qrr7dWQBiXzR3dPP5Mwc3PGItvOFBFxIva8dLDzSQCf4tQUqHT/I wFAEcQCe/MXuxk5kgn5I9dt/1IkC7AuAutt+mjIJyInWCS675As9gkuFCcuFhbRFBuon bTeJGOMNJsqe1Dte2PGO9+mZIJ4DGPWc+/YDNm4vIleB4dJHKvSjPAH6YBtumUb18CHz 7g== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3tv68tar13-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 23 Oct 2023 09:58:23 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 39N7O37f001754; Mon, 23 Oct 2023 09:58:23 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3tv53a81cy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 23 Oct 2023 09:58:23 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 39N9t2cV039213; Mon, 23 Oct 2023 09:58:22 GMT Received: from bpf.uk.oracle.com (dhcp-10-175-206-92.vpn.oracle.com [10.175.206.92]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 3tv53a80w0-6; Mon, 23 Oct 2023 09:58:22 +0000 From: Alan Maguire To: acme@kernel.org, andrii.nakryiko@gmail.com Cc: jolsa@kernel.org, ast@kernel.org, daniel@iogearbox.net, eddyz87@gmail.com, martin.lau@linux.dev, song@kernel.org, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com, haoluo@google.com, mykolal@fb.com, bpf@vger.kernel.org, Alan Maguire , Andrii Nakryiko Subject: [PATCH v4 dwarves 5/5] pahole: add --btf_features_strict to reject unknown BTF features Date: Mon, 23 Oct 2023 10:57:26 +0100 Message-Id: <20231023095726.1179529-6-alan.maguire@oracle.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231023095726.1179529-1-alan.maguire@oracle.com> References: <20231023095726.1179529-1-alan.maguire@oracle.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-10-23_08,2023-10-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxlogscore=999 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2310170001 definitions=main-2310230086 X-Proofpoint-ORIG-GUID: qkUT3bN8QQcwzKZGtWhP_7EvOeZHTt4Y X-Proofpoint-GUID: qkUT3bN8QQcwzKZGtWhP_7EvOeZHTt4Y --btf_features is used to specify the list of requested features for BTF encoding. However, it is not strict in rejecting requests with unknown features; this allows us to use the same parameters regardless of pahole version. --btf_features_strict carries out the same encoding with the same feature set, but will fail if an unrecognized feature is specified. So pahole -J --btf_features=enum64,foo will succeed, while pahole -J --btf_features_strict=enum64,foo will not. Suggested-by: Andrii Nakryiko Suggested-by: Eduard Zingerman Signed-off-by: Alan Maguire Acked-by: Jiri Olsa Acked-by: Andrii Nakryiko Acked-by: Eduard Zingerman --- man-pages/pahole.1 | 4 ++++ pahole.c | 21 ++++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/man-pages/pahole.1 b/man-pages/pahole.1 index 6148915..ea9045c 100644 --- a/man-pages/pahole.1 +++ b/man-pages/pahole.1 @@ -297,6 +297,10 @@ Encode BTF using the specified feature list, or specify 'all' for all features s So for example, specifying \-\-btf_encode=var,enum64 will result in a BTF encoding that (as well as encoding basic BTF information) will contain variables and enum64 values. +.TP +.B \-\-btf_features_strict +Identical to \-\-btf_features above, but pahole will exit if it encounters an unrecognized feature. + .TP .B \-\-supported_btf_features Show set of BTF features supported by \-\-btf_features option and exit. Useful for checking which features are supported since \-\-btf_features will not emit an error if an unrecognized feature is specified. diff --git a/pahole.c b/pahole.c index 37fd2a4..768a2fe 100644 --- a/pahole.c +++ b/pahole.c @@ -1231,6 +1231,7 @@ ARGP_PROGRAM_VERSION_HOOK_DEF = dwarves_print_version; #define ARGP_skip_encoding_btf_inconsistent_proto 340 #define ARGP_btf_features 341 #define ARGP_supported_btf_features 342 +#define ARGP_btf_features_strict 343 /* --btf_features=feature1[,feature2,..] allows us to specify * a list of requested BTF features or "all" to enable all features. @@ -1334,7 +1335,7 @@ static void show_supported_btf_features(FILE *output) * Explicitly ignores unrecognized features to allow future specification * of new opt-in features. */ -static void parse_btf_features(const char *features) +static void parse_btf_features(const char *features, bool strict) { char *saveptr = NULL, *s, *feature_name; char f[BTF_MAX_FEATURE_STR]; @@ -1355,6 +1356,12 @@ static void parse_btf_features(const char *features) struct btf_feature *feature = find_btf_feature(feature_name); if (!feature) { + if (strict) { + fprintf(stderr, "Feature '%s' in '%s' is not supported. Supported BTF features are:\n", + feature_name, features); + show_supported_btf_features(stderr); + exit(EXIT_FAILURE); + } if (global_verbose) fprintf(stderr, "Ignoring unsupported feature '%s'\n", feature_name); @@ -1797,6 +1804,12 @@ static const struct argp_option pahole__options[] = { .key = ARGP_supported_btf_features, .doc = "Show list of btf_features supported by pahole and exit." }, + { + .name = "btf_features_strict", + .key = ARGP_btf_features_strict, + .arg = "FEATURE_LIST_STRICT", + .doc = "Specify supported BTF features in FEATURE_LIST_STRICT or 'all' for all supported features. Unlike --btf_features, unrecognized features will trigger an error." + }, { .name = NULL, } @@ -1942,7 +1955,7 @@ static error_t pahole__options_parser(int key, char *arg, case ARGP_btf_gen_floats: conf_load.btf_gen_floats = true; break; case ARGP_btf_gen_all: - parse_btf_features("all"); break; + parse_btf_features("all", false); break; case ARGP_with_flexible_array: show_with_flexible_array = true; break; case ARGP_prettify_input_filename: @@ -1973,9 +1986,11 @@ static error_t pahole__options_parser(int key, char *arg, case ARGP_skip_encoding_btf_inconsistent_proto: conf_load.skip_encoding_btf_inconsistent_proto = true; break; case ARGP_btf_features: - parse_btf_features(arg); break; + parse_btf_features(arg, false); break; case ARGP_supported_btf_features: show_supported_btf_features(stdout); exit(0); + case ARGP_btf_features_strict: + parse_btf_features(arg, true); break; default: return ARGP_ERR_UNKNOWN; }