Netdev Archive on
help / color / mirror / Atom feed
From: Quentin Monnet <>
To: Alexei Starovoitov <>,
	Daniel Borkmann <>,
	Andrii Nakryiko <>
	Quentin Monnet <>
Subject: [PATCH bpf-next 6/6] tools: bpftool: support dumping split BTF by id
Date: Wed, 14 Jul 2021 15:15:32 +0100	[thread overview]
Message-ID: <> (raw)
In-Reply-To: <>

Split BTF objects are typically BTF objects for kernel modules, which
are incrementally built on top of kernel BTF instead of redefining all
kernel symbols they need. We can use bpftool with its -B command-line
option to dump split BTF objects. It works well when the handle provided
for the BTF object to dump is a "path" to the BTF object, typically
under /sys/kernel/btf, because bpftool internally calls
btf__parse_split() which can take a "base_btf" pointer and resolve the
BTF reconstruction (although in that case, the "-B" option is
unnecessary because bpftool performs autodetection).

However, it did not work so far when passing the BTF object through its
id, because bpftool would call btf__get_from_id() which did not provide
a way to pass a "base_btf" pointer.

In other words, the following works:

    # bpftool btf dump file /sys/kernel/btf/i2c_smbus -B /sys/kernel/btf/vmlinux

But this was not possible:

    # bpftool btf dump id 6 -B /sys/kernel/btf/vmlinux

The libbpf API has recently changed, and btf__get_from_id() has been
deprecated in favour of btf__load_from_kernel_by_id() and its version
with support for split BTF, btf__load_from_kernel_by_id_split(). Let's
update bpftool to make it able to dump the BTF object in the second case
as well.

Signed-off-by: Quentin Monnet <>
 tools/bpf/bpftool/btf.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/bpf/bpftool/btf.c b/tools/bpf/bpftool/btf.c
index 2296e8eba0ff..b77a59225f5b 100644
--- a/tools/bpf/bpftool/btf.c
+++ b/tools/bpf/bpftool/btf.c
@@ -580,7 +580,7 @@ static int do_dump(int argc, char **argv)
 	if (!btf) {
-		err = btf__load_from_kernel_by_id(btf_id, &btf);
+		err = btf__load_from_kernel_by_id_split(btf_id, &btf, base_btf);
 		if (err) {
 			p_err("get btf by id (%u): %s", btf_id, strerror(err));
 			goto done;

  parent reply	other threads:[~2021-07-14 14:15 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-14 14:15 [PATCH bpf-next 0/6] libbpf: rename btf__get_from_id() and btf__load() APIs, support split BTF Quentin Monnet
2021-07-14 14:15 ` [PATCH bpf-next 1/6] libbpf: rename btf__load() as btf__load_into_kernel() Quentin Monnet
2021-07-16  4:32   ` Andrii Nakryiko
2021-07-21 15:36     ` Quentin Monnet
2021-07-14 14:15 ` [PATCH bpf-next 2/6] libbpf: rename btf__get_from_id() as btf__load_from_kernel_by_id() Quentin Monnet
2021-07-16  4:35   ` Andrii Nakryiko
2021-07-14 14:15 ` [PATCH bpf-next 3/6] tools: replace btf__get_from_id() with btf__load_from_kernel_by_id() Quentin Monnet
2021-07-14 14:15 ` [PATCH bpf-next 4/6] libbpf: explicitly mark btf__load() and btf__get_from_id() as deprecated Quentin Monnet
2021-07-16  4:42   ` Andrii Nakryiko
2021-07-14 14:15 ` [PATCH bpf-next 5/6] libbpf: add split BTF support for btf__load_from_kernel_by_id() Quentin Monnet
2021-07-16  4:44   ` Andrii Nakryiko
2021-07-14 14:15 ` Quentin Monnet [this message]
2021-07-16  3:28 ` [PATCH bpf-next 0/6] libbpf: rename btf__get_from_id() and btf__load() APIs, support split BTF John Fastabend

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \ \ \ \ \ \ \ \
    --subject='Re: [PATCH bpf-next 6/6] tools: bpftool: support dumping split BTF by id' \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).