From patchwork Wed Oct 11 09:17:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Maguire X-Patchwork-Id: 13416932 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 1D7231A73E for ; Wed, 11 Oct 2023 09:18:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="wtoXjeTx" Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4193A9D for ; Wed, 11 Oct 2023 02:18:01 -0700 (PDT) Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 39B7mdsg022661; Wed, 11 Oct 2023 09:17:44 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=4WxWfQmLaq5rbEm4ssilFl5/Cjn0UMg9nv178gPcu8w=; b=wtoXjeTxvNDE8FHXpP7gLSgKMmkJ2D8Gff/xdzMzisE3qWa5Lv3LQIjHct9/BDljd/X1 RTD5fcTzBFQA1wBQvvstG2hgC9wc097zUNXUQHMG57Q1eIyPFKjcki2b+4UsEF657/di jzZeLM+HzsMgbBzFIXdrsmm2wKBnThiIMi0BXugp7qWptpleOlofrXExS1JutqAUPRIA cknW5m3BR1c51WOD7NS+bYaF9Bq0eZXvtLNUFEQbHUDWj6bj+PikHa+XAw1j3ssugN4V CgMY9hyWc1g8ZU1j8uDEuqz9g7xFilXpeIqOJgP0gxjSY4GdV2c7Zfxy7jNt3xhsQH3I Ng== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3tjx43qc4c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Oct 2023 09:17:44 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 39B8oWaI015079; Wed, 11 Oct 2023 09:17:43 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3tjws8d10m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Oct 2023 09:17:43 +0000 Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 39B9Hbxk020344; Wed, 11 Oct 2023 09:17:42 GMT Received: from bpf.uk.oracle.com (dhcp-10-175-183-173.vpn.oracle.com [10.175.183.173]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3tjws8d0tb-2; Wed, 11 Oct 2023 09:17: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 Subject: [RFC dwarves 1/4] btf_encoder, pahole: move btf encoding options into conf_load Date: Wed, 11 Oct 2023 10:17:29 +0100 Message-Id: <20231011091732.93254-2-alan.maguire@oracle.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231011091732.93254-1-alan.maguire@oracle.com> References: <20231011091732.93254-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.267,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-10-11_06,2023-10-10_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxlogscore=999 mlxscore=0 bulkscore=0 phishscore=0 suspectscore=0 spamscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2309180000 definitions=main-2310110081 X-Proofpoint-ORIG-GUID: 6P1qT4HTY_7_93iUGuzNkcjIQ3Fquq-O X-Proofpoint-GUID: 6P1qT4HTY_7_93iUGuzNkcjIQ3Fquq-O X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,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 X-Patchwork-State: RFC ...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 parameter. Signed-off-by: Alan Maguire Acked-by: Jiri Olsa --- 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 11 09:17:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Maguire X-Patchwork-Id: 13416933 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 EF3AE1A73C for ; Wed, 11 Oct 2023 09:18:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="KQlbc5Re" Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D1829D for ; Wed, 11 Oct 2023 02:18:06 -0700 (PDT) Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 39B7mrXQ022803; Wed, 11 Oct 2023 09:17:49 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=vBm4mi+hilPfYfH+WuzqqZk/Ytcz3nJuxfrcvINkGEw=; b=KQlbc5ReRDVFD9DUFy6Hi09IIsDNQj0SRdZTHPJxiVansfNiIIRWEQ/oJaxM0Se/A6Tx O+jeezZgEOElXV7I1vg6bd7urx7id4sbnZ8CwYbVozvQ4Q5Ni8Y910UhulqYLOgyxvIz qtCns4zh00x0Irc4NZxIhXJzWRE/6z/+fdEhWluLYP3ibsypTecIHJLJg4SUhmzQlQQD +9kMm7hYk+OAQ5hXiHD9s8zsZAmcuh+yWd4ueSlBkWUH5Lo/KyLd/kCS4iUXqs8WS6Z1 ksYfZPYNzRP1XdIzIaHTPkR2rl+nYbk0fHAtWjjHnrrfqOXsUE20N50BfZhqjSJnsAY/ wQ== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3tjx43qc5p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Oct 2023 09:17:48 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 39B7NR5Z014994; Wed, 11 Oct 2023 09:17:47 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3tjws8d12j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Oct 2023 09:17:47 +0000 Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 39B9Hbxm020344; Wed, 11 Oct 2023 09:17:47 GMT Received: from bpf.uk.oracle.com (dhcp-10-175-183-173.vpn.oracle.com [10.175.183.173]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3tjws8d0tb-3; Wed, 11 Oct 2023 09:17: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 Subject: [RFC dwarves 2/4] dwarves: move ARRAY_SIZE() to dwarves.h Date: Wed, 11 Oct 2023 10:17:30 +0100 Message-Id: <20231011091732.93254-3-alan.maguire@oracle.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231011091732.93254-1-alan.maguire@oracle.com> References: <20231011091732.93254-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.267,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-10-11_06,2023-10-10_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxlogscore=748 mlxscore=0 bulkscore=0 phishscore=0 suspectscore=0 spamscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2309180000 definitions=main-2310110081 X-Proofpoint-ORIG-GUID: 52hM7r9MRXqVBQT2_ApsMagg5Opd1yZm X-Proofpoint-GUID: 52hM7r9MRXqVBQT2_ApsMagg5Opd1yZm X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,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 X-Patchwork-State: RFC ...so it can be used by pahole.c too. Signed-off-by: Alan Maguire --- 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 11 09:17:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Maguire X-Patchwork-Id: 13416934 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 B89D11A73C for ; Wed, 11 Oct 2023 09:18:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="aLG43kGt" Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C449D91 for ; Wed, 11 Oct 2023 02:18:10 -0700 (PDT) Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 39B7mejX022735; Wed, 11 Oct 2023 09:17:53 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=eajcGv3Q0nZMWbEn/Kim6ne4hnfKLFcuDVWKEyoO2iM=; b=aLG43kGtpTNfQabWf+bsy7HuOulpxAxbcPwXx5a8eL6XIKFQ9SngvT5KhRr/JRbPvGPC EKz/ZP1QADGvNRQdz7tEzxVEXPGLYieiKFlhLWldd4h4+ARNxyacR00qlAsdvIccslTW R32rY0Jzdek+VuPbJoP80dyo15cTfbf4kqscEz74dCaOKubyU+Nm9AugaVIv9v4HfHnp GAFjs1496zYbFNDkwEfwIU7K9UuFrh0lIDXhbzw8Lh/Cy1T69scHET0pJm7yXyvGA6u0 7YU0wSPN3pL/H8jGfDY4E7LrH5z1BZdnwKJIsn3P9/nN4OkWekIqsBl8mUIVM62RHhtI BA== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3tjx43qc6u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Oct 2023 09:17:53 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 39B8eHjf015032; Wed, 11 Oct 2023 09:17:52 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3tjws8d16q-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Oct 2023 09:17:52 +0000 Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 39B9Hbxo020344; Wed, 11 Oct 2023 09:17:51 GMT Received: from bpf.uk.oracle.com (dhcp-10-175-183-173.vpn.oracle.com [10.175.183.173]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3tjws8d0tb-4; Wed, 11 Oct 2023 09:17:51 +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: [RFC dwarves 3/4] pahole: add --btf_features=feature1[,feature2...] support Date: Wed, 11 Oct 2023 10:17:31 +0100 Message-Id: <20231011091732.93254-4-alan.maguire@oracle.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231011091732.93254-1-alan.maguire@oracle.com> References: <20231011091732.93254-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.267,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-10-11_06,2023-10-10_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxlogscore=999 mlxscore=0 bulkscore=0 phishscore=0 suspectscore=0 spamscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2309180000 definitions=main-2310110081 X-Proofpoint-ORIG-GUID: 3AiKEQbUb6pG1NK3ZYsnWXq9tcS55vNL X-Proofpoint-GUID: 3AiKEQbUb6pG1NK3ZYsnWXq9tcS55vNL X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,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 X-Patchwork-State: RFC This allows consumers to specify an opt-in set of features they want to use in BTF encoding. Supported features are 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 Encode representations of optimized functions with suffixes like ".isra.0" etc consistent 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 it silently ignores it. These properties allow us to use the --btf_features option in the kernel pahole_flags.sh script to specify the desired set of features. If a new feature is not present in pahole but requested, pahole BTF encoding will not complain (but will not encode the feature). Suggested-by: Andrii Nakryiko Signed-off-by: Alan Maguire --- man-pages/pahole.1 | 20 +++++++++++ pahole.c | 87 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 106 insertions(+), 1 deletion(-) diff --git a/man-pages/pahole.1 b/man-pages/pahole.1 index c1b48de..7c072dc 100644 --- a/man-pages/pahole.1 +++ b/man-pages/pahole.1 @@ -273,6 +273,26 @@ 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 single parameter value can be used as an alternative to unsing multiple BTF-related options. Supported features are + +.nf + 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 Encode representations of optimized functions + with suffixes like ".isra.0" etc + consistent 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 + .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..4f00b08 100644 --- a/pahole.c +++ b/pahole.c @@ -1229,6 +1229,83 @@ 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,..] option allows us to specify + * opt-in features (or "all"); these are translated into conf_load + * values by specifying the associated bool offset and whether it + * is a skip option or not; btf_features is for opting _into_ features + * so for skip options we have to reverse the logic. For example + * "--skip_encoding_btf_type_tag --btf_gen_floats" translate to + * "--btf_features=type_tag,float" + */ +#define BTF_FEATURE(name, alias, skip) \ + { #name, #alias, offsetof(struct conf_load, alias), skip } + +struct btf_feature { + const char *name; + const char *option_alias; + size_t conf_load_offset; + bool skip; +} 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, btf_gen_optimized, false), + /* the "skip" in skip_encoding_btf_inconsistent_proto is misleading + * here; this is a positive feature to ensure consistency of + * representation rather than a negative option which we want + * to invert. So as a result, "skip" is false here. + */ + BTF_FEATURE(consistent, skip_encoding_btf_inconsistent_proto, false), +}; + +#define BTF_MAX_FEATURES 32 +#define BTF_MAX_FEATURE_STR 256 + +/* 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, struct conf_load *conf_load) +{ + char *feature_list[BTF_MAX_FEATURES] = {}; + char f[BTF_MAX_FEATURE_STR]; + bool encode_all = false; + int i, j, n = 0; + + strncpy(f, features, sizeof(f)); + + if (strcmp(features, "all") == 0) { + encode_all = true; + } else { + char *saveptr = NULL, *s = f, *t; + + while ((t = strtok_r(s, ",", &saveptr)) != NULL) { + s = NULL; + feature_list[n++] = t; + } + } + + for (i = 0; i < ARRAY_SIZE(btf_features); i++) { + bool *bval = (bool *)(((void *)conf_load) + btf_features[i].conf_load_offset); + bool match = encode_all; + + if (!match) { + for (j = 0; j < n; j++) { + if (strcmp(feature_list[j], btf_features[i].name) == 0) { + match = true; + break; + } + } + } + if (match) + *bval = btf_features[i].skip ? false : true; + } +} static const struct argp_option pahole__options[] = { { @@ -1651,6 +1728,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 +1879,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", &conf_load); break; case ARGP_with_flexible_array: show_with_flexible_array = true; break; case ARGP_prettify_input_filename: @@ -1826,6 +1909,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, &conf_load); break; default: return ARGP_ERR_UNKNOWN; } From patchwork Wed Oct 11 09:17:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Maguire X-Patchwork-Id: 13416935 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 D3FA61A73C for ; Wed, 11 Oct 2023 09:18:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="D34f4R2N" Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B81E49D for ; Wed, 11 Oct 2023 02:18:15 -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 39B7mndu024527; Wed, 11 Oct 2023 09:17:58 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=A6/0cVn28UHjX9zhN5PN3/Pe62BjfanR3vk+CHslrSA=; b=D34f4R2NCMi5fjQccBYsTk2oxYX+q6xh23puvWGDgN0FxDoULjhZrBjGJnXmS57lMTz6 wSV/PDQ205QtHJ6tzv+oKt5zlPYZOe6lQg/Bm6mqy60hkJ4X7Rfd4rd228F+P3rSp+j2 LSsY3MLfyuugko+ZWtaryCHOXnfx+/RC0fYscAXDf0i1jsUFs4Imb+pIsLDcRhvFbAFj gVJ6r1Hq/hhomP2mFat1CZQC2Wwv0zn8fMB3d8OGKAfLZ73MiAIMLAa5VVfG+Ua768Tg 7DDYRyL1mryVOFOHN3Z8h0qVH+vKCfAnVhNIYuZoCcQu0jffoCMjNBXgy1wSSOZrkZbZ pg== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3tjxxu7ax3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Oct 2023 09:17:57 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 39B8ahud014884; Wed, 11 Oct 2023 09:17:56 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3tjws8d18w-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Oct 2023 09:17:56 +0000 Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 39B9Hbxq020344; Wed, 11 Oct 2023 09:17:55 GMT Received: from bpf.uk.oracle.com (dhcp-10-175-183-173.vpn.oracle.com [10.175.183.173]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3tjws8d0tb-5; Wed, 11 Oct 2023 09:17:55 +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 Subject: [RFC dwarves 4/4] pahole: add --supported_btf_features to display feature support Date: Wed, 11 Oct 2023 10:17:32 +0100 Message-Id: <20231011091732.93254-5-alan.maguire@oracle.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231011091732.93254-1-alan.maguire@oracle.com> References: <20231011091732.93254-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.267,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-10-11_06,2023-10-10_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxlogscore=999 mlxscore=0 bulkscore=0 phishscore=0 suspectscore=0 spamscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2309180000 definitions=main-2310110081 X-Proofpoint-GUID: 5GoR8uNTMnFnMzis8WM0SySJHNa9Ze5p X-Proofpoint-ORIG-GUID: 5GoR8uNTMnFnMzis8WM0SySJHNa9Ze5p X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,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 X-Patchwork-State: RFC 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,consistent Signed-off-by: Alan Maguire --- man-pages/pahole.1 | 4 ++++ pahole.c | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/man-pages/pahole.1 b/man-pages/pahole.1 index 7c072dc..b094195 100644 --- a/man-pages/pahole.1 +++ b/man-pages/pahole.1 @@ -293,6 +293,10 @@ Encode BTF using the specified feature list, or specify 'all' for all features s in different CUs. .fi +.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 4f00b08..e828961 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,..] option allows us to specify * opt-in features (or "all"); these are translated into conf_load @@ -1307,6 +1308,19 @@ static void parse_btf_features(const char *features, struct conf_load *conf_load } } +static void show_supported_btf_features(void) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(btf_features); i++) { + if (i > 0) + printf(","); + printf("%s", btf_features[i].name); + } + printf("\n"); + exit(0); +} + static const struct argp_option pahole__options[] = { { .name = "bit_holes", @@ -1734,6 +1748,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, } @@ -1911,6 +1930,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, &conf_load); break; + case ARGP_supported_btf_features: + show_supported_btf_features(); break; default: return ARGP_ERR_UNKNOWN; }