Re: [PATCH] libbpf: Support raw btf placed in the default path

From: Tao Chen
Date: Mon Sep 12 2022 - 11:38:11 EST


在 2022/9/10 上午3:00, Andrii Nakryiko 写道:
On Sun, Aug 28, 2022 at 10:36 PM Tao Chen
<chentao.kernel@xxxxxxxxxxxxxxxxx> wrote:

Hi Nakryiko, thank you for your reply. Yes, i happed to put the raw
BTF made by myself in /boot on kernel4.19, unluckly it reported error.
So is it possible to allow the raw BTF in /boot directly, athough we
can set the specified btf location again to solve the problem with the
bpf_object_open_opts interface.

As you say, maybe we can remove the locations[i].raw_btf check, just
use the btf__parse, It looks more concise.

Please don't top post, reply inline (that's kernel mail lists rules).

But yes, I think we can just use btf__parse and let libbpf figure out.
Please send a patch.


Thank you, i will send the patch in v2.

在 2022/8/26 上午4:26, Andrii Nakryiko 写道:

On Wed, Aug 24, 2022 at 7:05 AM chentao.ct
<chentao.kernel@xxxxxxxxxxxxxxxxx> wrote:

Now only elf btf can be placed in the default path, raw btf should
also can be there.

It's not clear what you are trying to achieve. Do you want libbpf to
attempt to load /boot/vmlinux-%1$s as raw BTF as well (so you can sort
of sneak in pregenerated BTF), or what exactly?
btf__load_vmlinux_btf() code already supports loading raw BTF, it just
needs to be explicitly specified in locations table.

So with your change locations[i].raw_btf check doesn't make sense and
we need to clean this up.

But first, let's discuss the use case, instead of your specific solution.


Signed-off-by: chentao.ct <chentao.kernel@xxxxxxxxxxxxxxxxx>
---
tools/lib/bpf/btf.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c
index bb1e06e..b22b5b3 100644
--- a/tools/lib/bpf/btf.c
+++ b/tools/lib/bpf/btf.c
@@ -4661,7 +4661,7 @@ struct btf *btf__load_vmlinux_btf(void)
} locations[] = {
/* try canonical vmlinux BTF through sysfs first */
{ "/sys/kernel/btf/vmlinux", true /* raw BTF */ },
- /* fall back to trying to find vmlinux ELF on disk otherwise */
+ /* fall back to trying to find vmlinux RAW/ELF on disk otherwise */
{ "/boot/vmlinux-%1$s" },
{ "/lib/modules/%1$s/vmlinux-%1$s" },
{ "/lib/modules/%1$s/build/vmlinux" },
@@ -4686,7 +4686,7 @@ struct btf *btf__load_vmlinux_btf(void)
if (locations[i].raw_btf)
btf = btf__parse_raw(path);
else
- btf = btf__parse_elf(path, NULL);
+ btf = btf__parse(path, NULL);
err = libbpf_get_error(btf);
pr_debug("loading kernel BTF '%s': %d\n", path, err);
if (err)
--
2.2.1