From patchwork Wed Oct 18 12:29: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: 13426972 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 7758A1F5E7 for ; Wed, 18 Oct 2023 12:29:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="B6sQrmRZ" Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 135A710E for ; Wed, 18 Oct 2023 05:29:58 -0700 (PDT) Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 39IBJHc2017152; Wed, 18 Oct 2023 12:29: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=SKD49PR8Hh1+coXYMJPSB7PdXAsJ12tr9iz9sC7xzYE=; b=B6sQrmRZITbOKnJMmJlsnOahTSKhiEASdmW2N6UYblWYLMKsKOciQr/cljkCbS2LLB4+ CoHB9CXf6ojC/lqHw5CNJeyn5bhJ65HNY24Ngl2XgGM/yrd5xOsuu/K9wYXFRPhuMv8w fo/2DhMZVLUQTWwv8wKNkaxqRmtelkWwomlSOCgO7dylBMh9W3bJR2xPlsGK2Xsrtsig U8n30PDgMHjv1UQPvfv7QZncQn/fazOVEf1LtefT6jnYTMyZBg2U5c8o7glvJbWtt27z q2dI4w0JozuxcydVkwzaVLcZieuOXpNZhQVPC8lAPXEnekNHxvV31ThRLp+VSSjdrqJU ww== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3tqjy1fbxj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 18 Oct 2023 12:29:37 +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 39IBowNp040586; Wed, 18 Oct 2023 12:29:36 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3trfynp8g0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 18 Oct 2023 12:29:36 +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 39ICTUEU034930; Wed, 18 Oct 2023 12:29:35 GMT Received: from bpf.uk.oracle.com (dhcp-10-175-178-90.vpn.oracle.com [10.175.178.90]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 3trfynp8bs-2; Wed, 18 Oct 2023 12:29:35 +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 v3 dwarves 1/5] btf_encoder, pahole: move btf encoding options into conf_load Date: Wed, 18 Oct 2023 13:29:22 +0100 Message-Id: <20231018122926.735416-2-alan.maguire@oracle.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231018122926.735416-1-alan.maguire@oracle.com> References: <20231018122926.735416-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-18_11,2023-10-18_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 phishscore=0 spamscore=0 suspectscore=0 malwarescore=0 bulkscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2309180000 definitions=main-2310180103 X-Proofpoint-GUID: G-JAyiwB0QR_loybkzETBJM2ot6WtDL5 X-Proofpoint-ORIG-GUID: G-JAyiwB0QR_loybkzETBJM2ot6WtDL5 X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net ...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 --- 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 Wed Oct 18 12:29: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: 13426974 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 D4DEE347C7 for ; Wed, 18 Oct 2023 12:30:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="qQdorI1Q" Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 70503A3 for ; Wed, 18 Oct 2023 05:30:02 -0700 (PDT) Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 39IBJWip017456; Wed, 18 Oct 2023 12:29:42 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=bytAvguS1Z0gWAu7TmhxZ7lZvlSwRDTczlmteUBI5HI=; b=qQdorI1QWTCo6+hSiWyzokvMuKl6rpvwzvLtp/Xl0yxwBtfHrm0y8HIqqY4zGGAfZ5Mt CgCzmmmkwDkb2nVw6nWntuw+awX8zG5ExwZo2BJs8RHFtfeeRDw26UwN9dxOnPxjQY4q P4OZs3A7KiN4T1Dretd2IQJmi8OBky3+m1V5sm6jxv7cJlJVq4Btrr0prVj54TmBR39s flWCazaxUgX64f5I2ytyZ4s8deleRjUem4bBFYxpdc1VHawHSA/bR/0hA9Wkds+365UP JSJb5AebDMq1PXcTvjRfqKmrMCu0pxVS83y75BS3WdJQ7SDTOe44jkjcVJ5V++l2klB5 8g== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3tqjy1fbxt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 18 Oct 2023 12:29:42 +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 39IB6vJs040556; Wed, 18 Oct 2023 12:29:40 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3trfynp8ja-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 18 Oct 2023 12:29:40 +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 39ICTUEW034930; Wed, 18 Oct 2023 12:29:40 GMT Received: from bpf.uk.oracle.com (dhcp-10-175-178-90.vpn.oracle.com [10.175.178.90]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 3trfynp8bs-3; Wed, 18 Oct 2023 12:29:39 +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 v3 dwarves 2/5] dwarves: move ARRAY_SIZE() to dwarves.h Date: Wed, 18 Oct 2023 13:29:23 +0100 Message-Id: <20231018122926.735416-3-alan.maguire@oracle.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231018122926.735416-1-alan.maguire@oracle.com> References: <20231018122926.735416-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-18_11,2023-10-18_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=808 adultscore=0 phishscore=0 spamscore=0 suspectscore=0 malwarescore=0 bulkscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2309180000 definitions=main-2310180103 X-Proofpoint-GUID: oOGDRR0z_3fvIJ47huc-NSHsfMN_83HP X-Proofpoint-ORIG-GUID: oOGDRR0z_3fvIJ47huc-NSHsfMN_83HP X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net ...so it can be used by pahole.c too. Signed-off-by: Alan Maguire Acked-by: Jiri Olsa Acked-by: Andrii Nakryiko --- 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 Wed Oct 18 12:29: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: 13426975 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 AF5A234CD3 for ; Wed, 18 Oct 2023 12:30:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="OX6CThzV" Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DB27C98 for ; Wed, 18 Oct 2023 05:30:05 -0700 (PDT) Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 39IBJKnU017191; Wed, 18 Oct 2023 12:29:47 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=93ymm43Cqm+8BO2QFwFTMOQf5seYsKa748RcVhuLX/I=; b=OX6CThzVH4hifl1DmbdVgFtNoy6uErTWy6p/wyDNAlfymWcFJ99Y/mtKMMVgNUH4cT+4 xj7ozloTi5VYPuOCKhYhjHB4CeRT2/eA7pqiuw5bM8LhIluPHm6qesXAMFYqSZSP83IS 7YmIY0K7o6uoTugpn5RWHsz9xxd3jLPZ9oTtu5qm6sqRL3eThmxiSvEncJXXbgzpmalT HxztMfYYmecVVdwihAXp+xZDN7SOYHyYk/Ys6Cu3VIPmf1fb93ZK741SNrYP3GA50xHl vayD4/r7vguEev8CCtL9h9fXGl+AcMVoLCVqaPl+7466m9soegzHR/fS4h/G8qztbLFg Lg== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3tqjy1fby4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 18 Oct 2023 12:29:46 +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 39IBXlGm040525; Wed, 18 Oct 2023 12:29:45 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3trfynp8m3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 18 Oct 2023 12:29:45 +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 39ICTUEY034930; Wed, 18 Oct 2023 12:29:44 GMT Received: from bpf.uk.oracle.com (dhcp-10-175-178-90.vpn.oracle.com [10.175.178.90]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 3trfynp8bs-4; Wed, 18 Oct 2023 12:29:44 +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 v3 dwarves 3/5] pahole: add --btf_features support Date: Wed, 18 Oct 2023 13:29:24 +0100 Message-Id: <20231018122926.735416-4-alan.maguire@oracle.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231018122926.735416-1-alan.maguire@oracle.com> References: <20231018122926.735416-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-18_11,2023-10-18_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 phishscore=0 spamscore=0 suspectscore=0 malwarescore=0 bulkscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2309180000 definitions=main-2310180103 X-Proofpoint-GUID: uta7UXNezZqXihNmoyzDxEEQS7_JKxdr X-Proofpoint-ORIG-GUID: uta7UXNezZqXihNmoyzDxEEQS7_JKxdr X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net 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 --- man-pages/pahole.1 | 24 ++++++++ pahole.c | 137 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 160 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..0e889cf 100644 --- a/pahole.c +++ b/pahole.c @@ -1229,6 +1229,133 @@ 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_FEATURES 32 +#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 *feature_list[BTF_MAX_FEATURES] = {}; + char *saveptr = NULL, *s, *t; + char f[BTF_MAX_FEATURE_STR]; + int i, n = 0; + + init_btf_features(); + + if (strcmp(features, "all") == 0) { + for (i = 0; i < ARRAY_SIZE(btf_features); i++) + enable_btf_feature(&btf_features[i]); + return; + } + + strncpy(f, features, sizeof(f)); + s = f; + while ((t = strtok_r(s, ",", &saveptr)) != NULL && n < BTF_MAX_FEATURES) { + s = NULL; + feature_list[n++] = t; + } + + for (i = 0; i < n; i++) { + struct btf_feature *feature = find_btf_feature(feature_list[i]); + + if (!feature) { + if (global_verbose) + fprintf(stderr, "Ignoring unsupported feature '%s'\n", + feature_list[i]); + } else { + enable_btf_feature(feature); + } + } +} static const struct argp_option pahole__options[] = { { @@ -1651,6 +1778,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 +1929,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 +1959,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 Wed Oct 18 12:29: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: 13426977 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 C5C9034CCD for ; Wed, 18 Oct 2023 12:30:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="I+ySdB65" Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 88B2498 for ; Wed, 18 Oct 2023 05:30:19 -0700 (PDT) Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 39IBJHpH030415; Wed, 18 Oct 2023 12:29:51 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=Fgp8FVLcr6ducD3BzssdFVzNaLK1BC5/7A5wZzBUNtQ=; b=I+ySdB65VwN/S89TQGdCxpa91kSBQ/gCTmbOTEgww+Oi3UmuMupQ8PF0alOk6U9Ms45B MBDsuyhbcyK7rvn+1D3RK6qbLAxVbs4Dhvc5SLr5LXZCCaqWMGzq8Q7D6TG5U9U44wz4 GCjEVJL6hXEWhzhFuIQIDmYDPw4Ce0tC8vE8DLg9BhqE79sLQ71kujX9+0DmngxyyitO rhGrxDDAE15xAZoxWZl2K+4V9Mc4WHR62EyidxDf7mXBu90Y+U31FVQ+ZaX06LW7h481 TDE9v/dzFVrSQItMrZmo74zDoJOo9VtMSJ9YjXCS4WP4rzC2Ww+Cy1GHtNQWe/9LNgAh HQ== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3tqkhu7e78-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 18 Oct 2023 12:29:51 +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 39IBalQl040437; Wed, 18 Oct 2023 12:29:49 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3trfynp8p5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 18 Oct 2023 12:29: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 39ICTUEa034930; Wed, 18 Oct 2023 12:29:48 GMT Received: from bpf.uk.oracle.com (dhcp-10-175-178-90.vpn.oracle.com [10.175.178.90]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 3trfynp8bs-5; Wed, 18 Oct 2023 12:29:48 +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 v3 dwarves 4/5] pahole: add --supported_btf_features Date: Wed, 18 Oct 2023 13:29:25 +0100 Message-Id: <20231018122926.735416-5-alan.maguire@oracle.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231018122926.735416-1-alan.maguire@oracle.com> References: <20231018122926.735416-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-18_11,2023-10-18_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 phishscore=0 spamscore=0 suspectscore=0 malwarescore=0 bulkscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2309180000 definitions=main-2310180103 X-Proofpoint-GUID: OFQQUXEHrc1_-ioSnhMVECb6YMKZXv0O X-Proofpoint-ORIG-GUID: OFQQUXEHrc1_-ioSnhMVECb6YMKZXv0O X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net 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 --- 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 0e889cf..b5790be 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. @@ -1318,6 +1319,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. @@ -1784,6 +1797,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, } @@ -1961,6 +1979,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 Wed Oct 18 12:29: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: 13426976 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 4873234CD3 for ; Wed, 18 Oct 2023 12:30:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="FL1EtxtO" Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0366510E for ; Wed, 18 Oct 2023 05:30:15 -0700 (PDT) Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 39IBJJA3000459; Wed, 18 Oct 2023 12:29:56 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=O6yT2s/6stDr9E3FfdiwCAqiH2JkEkduSx+rUMiK6JI=; b=FL1EtxtONUsSo4TF21R17yxf6xoEjUwIwDuraQ2o5NRKsBBu+fPvV5ZmM62LFkP2oe/E 8BRYYxo3OIomkMDXteGLSHBZ5am29ESAMXcPTv8/rH3/6cQDY5afMLwnWIN4uXwMrHU7 letruPThT+7uY72kS+alRy+X0rOmpmRTe54kwRP8lYYe0lnocP3bDeeiXAiOPt1xxWlV +E7jUb/mUGrRsKmDBikq+bVlAMsX/I3jMobJ+TwoSYklg7wCvNr/nNmO/f8hICWWY7oo 9FeHYhJazhbwa/P8m4vvLyPs27vn2SO5hgSWSQn7AqXM7cPmgQcioW32sR0Y4ClX1mJl Uw== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3tqk3jqds1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 18 Oct 2023 12:29:55 +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 39IBRB9g040453; Wed, 18 Oct 2023 12:29:54 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3trfynp8r6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 18 Oct 2023 12:29: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 39ICTUEc034930; Wed, 18 Oct 2023 12:29:53 GMT Received: from bpf.uk.oracle.com (dhcp-10-175-178-90.vpn.oracle.com [10.175.178.90]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 3trfynp8bs-6; Wed, 18 Oct 2023 12:29:53 +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 v3 dwarves 5/5] pahole: add --btf_features_strict to reject unknown BTF features Date: Wed, 18 Oct 2023 13:29:26 +0100 Message-Id: <20231018122926.735416-6-alan.maguire@oracle.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231018122926.735416-1-alan.maguire@oracle.com> References: <20231018122926.735416-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-18_11,2023-10-18_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 phishscore=0 spamscore=0 suspectscore=0 malwarescore=0 bulkscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2309180000 definitions=main-2310180103 X-Proofpoint-GUID: KodrxNugFLyBxxWRg9XiCxQ03l8WFuPU X-Proofpoint-ORIG-GUID: KodrxNugFLyBxxWRg9XiCxQ03l8WFuPU X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net --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 --- 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 b5790be..2b6c965 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. @@ -1335,7 +1336,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 *feature_list[BTF_MAX_FEATURES] = {}; char *saveptr = NULL, *s, *t; @@ -1361,6 +1362,12 @@ static void parse_btf_features(const char *features) struct btf_feature *feature = find_btf_feature(feature_list[i]); if (!feature) { + if (strict) { + fprintf(stderr, "Feature '%s' in '%s' is not supported. Supported BTF features are:\n", + feature_list[i], features); + show_supported_btf_features(stderr); + exit(EXIT_FAILURE); + } if (global_verbose) fprintf(stderr, "Ignoring unsupported feature '%s'\n", feature_list[i]); @@ -1802,6 +1809,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 or 'all' for all supported features. Unlike --btf_features, unrecognized features will trigger an error." + }, { .name = NULL, } @@ -1947,7 +1960,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: @@ -1978,9 +1991,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; }