From patchwork Mon May 13 18:38:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Xu X-Patchwork-Id: 13663635 X-Patchwork-Delegate: bpf@iogearbox.net Received: from wflow7-smtp.messagingengine.com (wflow7-smtp.messagingengine.com [64.147.123.142]) (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 B24373C099; Mon, 13 May 2024 18:39:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.142 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715625558; cv=none; b=EB4qCFESl7HMAYgQaNMn1qTQ6IL5bPAzlPoZrNGPWXavwY9H0XDIbePlNuiBpl5cpvK87Xp/bw8OPpM7w/GEldV1TEknyoe1TsB4/EMKHHwgj9mNgAduRpfySrkn4pCIDrd8LcbfkGxl7IKYLYVE0QSs2KLrDyziUhWsyvERa08= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715625558; c=relaxed/simple; bh=jPKiXJOmnQNOWhBvYnpso6oXP7ZkLGQqjW8y3RqzOPA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FcdGvWIv/6SVu6dbQMxQ9+ndTCj+YPyPcuCM44XvVJvQv9cl5ojJgZjEPnrcLiZJiXXR9VAu7d4c9Q8oXkanv6p1mlkrSfvm9OoZXiG6PlTaszrR1AdosqhOC0GWjpwsnVuOZVxwvW4ACaQBUJ634JBILyzAiIwa5It29PaWkq4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dxuuu.xyz; spf=pass smtp.mailfrom=dxuuu.xyz; dkim=pass (2048-bit key) header.d=dxuuu.xyz header.i=@dxuuu.xyz header.b=dwiVjUOi; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=RZD3jzFe; arc=none smtp.client-ip=64.147.123.142 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dxuuu.xyz Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=dxuuu.xyz Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=dxuuu.xyz header.i=@dxuuu.xyz header.b="dwiVjUOi"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="RZD3jzFe" Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailflow.west.internal (Postfix) with ESMTP id 1B58B2CC0328; Mon, 13 May 2024 14:39:14 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Mon, 13 May 2024 14:39:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dxuuu.xyz; h=cc :cc:content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm2; t=1715625553; x= 1715632753; bh=E8COH8IZC+TlbAgPPssdPSgDjYfCZqEAwY2cntHhuEA=; b=d wiVjUOi/+ghg09jSj01shwt8krvgo55aQzaPUc9fh32xOVtqZB6SzaJ7jwLxrnn6 npU1RKvin/DnzpPXGrCVlsBCs+9aEnZ2LbnXeO7HboavfvdhYs63pteHquTIrEUG ups9zVYK4NrGp9K88HYWkPS6AWHpxK4NSTqw3mqdk+c4GeoYg8fp7MyhY1ntvT6M LS2X0MmRBhbWYsepQ8GHJPrSdoZdxIHiEdh1S5y9NzvMml9uRXUtzMOQUM4Z/moD XSPpbsPFidykiZk78dpgOUo0JO3hNfyIwZo9AY3ifY4Z8UaDWMtTOSdUhfOE7fWO OIQiavgRmqCVsBBb6PlCQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1715625553; x= 1715632753; bh=E8COH8IZC+TlbAgPPssdPSgDjYfCZqEAwY2cntHhuEA=; b=R ZD3jzFeAjyI+thEnFw5uAI9Wk6Pq3nyO+ELKhud7H7uc3ce11BWVqrh0GkdVBr+B OON0Rsdo7NkZFwLedE7YZhKCo9PUi74N2WTK6ffNz7UiObuFVPstJxZOAigayl/a XuJtrd2oQeloLnpQlJHJVS+exRN2MIsEC54/Dab22Z3lhUF/+9eebyqUfHgkvhfq uF5qRqH7EA1QGavmMs8yLpDwP0oxmt/me7kAHgiPK1NyUU/JFDpI0IQtO0gwkwJA XfIuEFa08vc3zowevAQ+pENtKgPIl9DIhmhPpvDGxt2HhOKhN39rWyULs9UvDBvZ KnZ/ut/7Gpnva+mgj3NhQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedguddvjecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecufghrlhcuvffnffculdefhedmnecujfgurhephf fvvefufffkofgjfhgggfestdekredtredttdenucfhrhhomhepffgrnhhivghlucgiuhcu oegugihusegugihuuhhurdighiiiqeenucggtffrrghtthgvrhhnpeelieduhefhteffie dutdejgfdutdekudelueelveekjeeitdefueeutdelhedvfeenucffohhmrghinhepkhgv rhhnvghlrdhorhhgnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilh hfrhhomhepugiguhesugiguhhuuhdrgiihii X-ME-Proxy: Feedback-ID: i6a694271:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 14:39:11 -0400 (EDT) From: Daniel Xu To: ast@kernel.org, daniel@iogearbox.net, masahiroy@kernel.org, andrii@kernel.org, olsajiri@gmail.com, quentin@isovalent.com, alan.maguire@oracle.com, acme@kernel.org, eddyz87@gmail.com Cc: nathan@kernel.org, nicolas@fjasle.eu, martin.lau@linux.dev, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com, haoluo@google.com, jolsa@kernel.org, linux-kbuild@vger.kernel.org, bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v3 1/2] kbuild: bpf: Tell pahole to DECL_TAG kfuncs Date: Mon, 13 May 2024 12:38:58 -0600 Message-ID: <09085a7207265b153d0c81eee30906009c66cb82.1715625447.git.dxu@dxuuu.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net With [0], pahole can now discover kfuncs and inject DECL_TAG into BTF. With this commit, we will start shipping said DECL_TAGs to downstream consumers if pahole supports it. This is useful for feature probing kfuncs as well as generating compilable prototypes. This is particularly important as kfuncs do not have stable ABI. [0]: https://git.kernel.org/pub/scm/devel/pahole/pahole.git/commit/?h=next&id=72e88f29c6f7e14201756e65bd66157427a61aaf Signed-off-by: Daniel Xu --- scripts/Makefile.btf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/Makefile.btf b/scripts/Makefile.btf index 2d6e5ed9081e..d9ec6c85ffa7 100644 --- a/scripts/Makefile.btf +++ b/scripts/Makefile.btf @@ -21,7 +21,7 @@ endif else # Switch to using --btf_features for v1.26 and later. -pahole-flags-$(call test-ge, $(pahole-ver), 126) = -j --btf_features=encode_force,var,float,enum64,decl_tag,type_tag,optimized_func,consistent_func +pahole-flags-$(call test-ge, $(pahole-ver), 126) = -j --btf_features=encode_force,var,float,enum64,decl_tag,type_tag,optimized_func,consistent_func,decl_tag_kfuncs endif From patchwork Mon May 13 18:38:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Xu X-Patchwork-Id: 13663636 X-Patchwork-Delegate: bpf@iogearbox.net Received: from wfout8-smtp.messagingengine.com (wfout8-smtp.messagingengine.com [64.147.123.151]) (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 99D4E4122C; Mon, 13 May 2024 18:39:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.151 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715625562; cv=none; b=Q0j+d7vZpUcJBPvqY5D9Y/kGZRTf/UJwgc3QdUSyybeM7LFucQf25bqkG1gdBduGyWASPDsLood9YTqzpE9ESFSP7FhrFWYG8g0CxJQ9Gd2XfoMLEyu5Z8/7Z+cd1FGRi7+8RAvk4UqYf10ZmyUG8E6v+nfakR/ufv0jCJzZq98= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715625562; c=relaxed/simple; bh=tKxiTZ7Piwzo+n8B9PvgH/MrVub9dU8oHMgoZXlPvhQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Yrj43UF5yXcNixSiIIFvTFZ9ZiZABMtkBC58uc7RfDtZ4eOJrSRuEyp4BVvDl4uJIjeWzq8rF7qmkx9Za1uvIisVtYpZgZ6NVQMcFFAyr7QNhxpuMDpAixKxAMKo1NC00DtfuDMFUSfBxNFENWMNl3bNUjEqKZ4OfImW1l/YD6o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dxuuu.xyz; spf=pass smtp.mailfrom=dxuuu.xyz; dkim=pass (2048-bit key) header.d=dxuuu.xyz header.i=@dxuuu.xyz header.b=zmkxFfoM; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=PXkZHJU+; arc=none smtp.client-ip=64.147.123.151 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dxuuu.xyz Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=dxuuu.xyz Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=dxuuu.xyz header.i=@dxuuu.xyz header.b="zmkxFfoM"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="PXkZHJU+" Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailfout.west.internal (Postfix) with ESMTP id 3DE771C0011E; Mon, 13 May 2024 14:39:18 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Mon, 13 May 2024 14:39:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dxuuu.xyz; h=cc :cc:content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm2; t=1715625557; x= 1715711957; bh=ctZJO2jvzoYQqwAjIQezBewCGUnMWZUcctd5HrLkCsA=; b=z mkxFfoMabiP4sYpqC0/Yp1RU/b2gDpf9cpDfbNGmNenqHsQF/eHz9YPs9bZ7IThs jg4XA8rQAUxkqHjsZ3+KD7f178DhvDgkR/KJenhTksLeoKrgduyYiNQnduusoy/f PE5dtuvCiCioLTONOvB65FQKk8oR9m4IWXyWuecaiCAGZZDXHu3y23d+6y0VS2aV vqGl5WDFH2B2mAE029sSi6G35JHIh5eEz5Raj4MOiaVS7JfBJGzwA+XOsH/GLGC0 vciu4R5w1ZNJQHRLe7IvzcOzWcrakGv8lEdZh1sZnXdrT+vhGTkDIg8b7jyHzYeT oUKAV+/qtKUYZS7sbq2xQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1715625557; x= 1715711957; bh=ctZJO2jvzoYQqwAjIQezBewCGUnMWZUcctd5HrLkCsA=; b=P XkZHJU+gPIBQ6ylUCMOfgeIxvyr8vQnTWmhXUhSpLWoNZsnIcgsNa6+IkbmHP9qU vdkIwPE6B31kysi3A5cK8suxVP/nzG+hli4fr8BGeyqbbu+daoUX0qC27gFt+8Zk O050553vD46XlNKmnKf6diN1AoZpn3ixAk1PGQ3yMUZa0ZEZVhN+eW2CnHCf0GhA Wt6Jb+OtFGPh6QzZSBDurbovq31wtIskbBvU1prsPp4DNvqlG1gx91n5mM5rkd1f 2EkuN/qJALMpfOT7LqnqAKE5sv7e4858xewZ/6mqeWbrLm6oV/A32HTy1AXPH0Ji 9G0OTNheJyymH9HzLGnSw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedguddviecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecufghrlhcuvffnffculdejtddmnecujfgurhephf fvvefufffkofgjfhgggfestdekredtredttdenucfhrhhomhepffgrnhhivghlucgiuhcu oegugihusegugihuuhhurdighiiiqeenucggtffrrghtthgvrhhnpefgfefggeejhfduie ekvdeuteffleeifeeuvdfhheejleejjeekgfffgefhtddtteenucevlhhushhtvghrufhi iigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpegugihusegugihuuhhurdighiii X-ME-Proxy: Feedback-ID: i6a694271:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 14:39:16 -0400 (EDT) From: Daniel Xu To: ast@kernel.org, daniel@iogearbox.net, qmo@kernel.org, andrii@kernel.org, olsajiri@gmail.com, quentin@isovalent.com, alan.maguire@oracle.com, acme@kernel.org, eddyz87@gmail.com Cc: martin.lau@linux.dev, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com, haoluo@google.com, jolsa@kernel.org, bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v3 2/2] bpftool: Support dumping kfunc prototypes from BTF Date: Mon, 13 May 2024 12:38:59 -0600 Message-ID: <6b16417c2c05019e83e420240c6d9796f9324a6c.1715625447.git.dxu@dxuuu.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net This patch enables dumping kfunc prototypes from bpftool. This is useful b/c with this patch, end users will no longer have to manually define kfunc prototypes. For the kernel tree, this also means we can optionally drop kfunc prototypes from: tools/testing/selftests/bpf/bpf_kfuncs.h tools/testing/selftests/bpf/bpf_experimental.h Example usage: $ make PAHOLE=/home/dxu/dev/pahole/build/pahole -j30 vmlinux $ ./tools/bpf/bpftool/bpftool btf dump file ./vmlinux format c | rg "__ksym;" | head -3 extern void cgroup_rstat_updated(struct cgroup *cgrp, int cpu) __weak __ksym; extern void cgroup_rstat_flush(struct cgroup *cgrp) __weak __ksym; extern struct bpf_key *bpf_lookup_user_key(u32 serial, u64 flags) __weak __ksym; Signed-off-by: Daniel Xu --- tools/bpf/bpftool/btf.c | 54 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/tools/bpf/bpftool/btf.c b/tools/bpf/bpftool/btf.c index 91fcb75babe3..884af6589f0d 100644 --- a/tools/bpf/bpftool/btf.c +++ b/tools/bpf/bpftool/btf.c @@ -20,6 +20,8 @@ #include "json_writer.h" #include "main.h" +#define KFUNC_DECL_TAG "bpf_kfunc" + static const char * const btf_kind_str[NR_BTF_KINDS] = { [BTF_KIND_UNKN] = "UNKNOWN", [BTF_KIND_INT] = "INT", @@ -454,6 +456,48 @@ static int dump_btf_raw(const struct btf *btf, return 0; } +static int dump_btf_kfuncs(struct btf_dump *d, const struct btf *btf) +{ + LIBBPF_OPTS(btf_dump_emit_type_decl_opts, opts); + int cnt = btf__type_cnt(btf); + int i; + + printf("\n/* BPF kfuncs */\n"); + + for (i = 1; i < cnt; i++) { + const struct btf_type *t = btf__type_by_id(btf, i); + const char *name; + int err; + + if (!btf_is_decl_tag(t)) + continue; + + if (btf_decl_tag(t)->component_idx != -1) + continue; + + name = btf__name_by_offset(btf, t->name_off); + if (strncmp(name, KFUNC_DECL_TAG, sizeof(KFUNC_DECL_TAG))) + continue; + + t = btf__type_by_id(btf, t->type); + if (!btf_is_func(t)) + continue; + + printf("extern "); + + opts.field_name = btf__name_by_offset(btf, t->name_off); + err = btf_dump__emit_type_decl(d, t->type, &opts); + if (err) + return err; + + printf(" __weak __ksym;\n"); + } + + printf("\n"); + + return 0; +} + static void __printf(2, 0) btf_dump_printf(void *ctx, const char *fmt, va_list args) { @@ -476,6 +520,12 @@ static int dump_btf_c(const struct btf *btf, printf("#ifndef BPF_NO_PRESERVE_ACCESS_INDEX\n"); printf("#pragma clang attribute push (__attribute__((preserve_access_index)), apply_to = record)\n"); printf("#endif\n\n"); + printf("#ifndef __ksym\n"); + printf("#define __ksym __attribute__((section(\".ksyms\")))\n"); + printf("#endif\n\n"); + printf("#ifndef __weak\n"); + printf("#define __weak __attribute__((weak))\n"); + printf("#endif\n\n"); if (root_type_cnt) { for (i = 0; i < root_type_cnt; i++) { @@ -491,6 +541,10 @@ static int dump_btf_c(const struct btf *btf, if (err) goto done; } + + err = dump_btf_kfuncs(d, btf); + if (err) + goto done; } printf("#ifndef BPF_NO_PRESERVE_ACCESS_INDEX\n");