Closed ghost closed 10 months ago
Thanks for the report! Would you have a complete minimal C file that I could use to try and reproduce? I've tested on my side with the definition of that map and an empty BPF program, but could observe no issue with the current master
head (or from tag v7.1.0
).
Using libbpf v1.1.0 if that matters
I will make minimal c
On the system there is bpftool v7.0.0 installed:
bpftool v7.0.0
using libbpf v1.0
features: libbpf_strict, skeletons
Get libbpf-bootstrap repo
git clone --recurse-submodules https://github.com/libbpf/libbpf-bootstrap
try to compile for Android via xmake according to the readme file:
$ git submodule update --init --recursive # check out libbpf
$ cd examples/c
$ xmake f -p android
$ xmake
works.
Update the bpftool to v7.1.0
git clone --depth 1 --branch v7.1.0 ... && make install
bpftool version
:
bpftool v7.1.0
using libbpf v1.1
features: llvm, skeletons
try again to compile via xmake:
[ 13%]: compiling.bpf uprobe.bpf.c
[ 13%]: compiling.bpf minimal.bpf.c
[ 13%]: compiling.bpf fentry.bpf.c
[ 13%]: compiling.bpf minimal_legacy.bpf.c
[ 17%]: cache compiling.release ../../libbpf/src/libbpf.c
[ 33%]: cache compiling.release ../../libbpf/src/netlink.c
[ 44%]: cache compiling.release ../../libbpf/src/bpf.c
[ 44%]: compiling.bpf bootstrap.bpf.c
libbpf: map 'my_pid_map': unsupported map linkage static.
Error: failed to open BPF object file: Operation not supported
error: execv(bpftool gen skeleton build/.gens/minimal_legacy/android/armeabi-v7a/release/rules/bpf/minimal_legacy.bpf.o) failed(161)
failed.
Seems like its for all .maps not only ringbuf.
This made me install xmake and some Android-related packages (I think?), it's not exactly minimal :).
So now I can reproduce, but it also fails without even switching to v7.1.0. But then I'm not familiar with xmake
, and not sure what bpftool binary it invoked, it could be picking the one installed on my system. Do you know how I could check what binary xmake
is using, or how I can make it point to a specific binary?
Scratch that, xmake
gives me the bpftool command that it runs so I can run that directly. Yeah I confirm I see the same, v7.0.0 works but v7.1.0 fails with the same error.
yep, you can run bpftool gen skeleton build/.gens/minimal_legacy/android/armeabi-v7a/release/rules/bpf/minimal_legacy.bpf.o
on generated object file, it works on 7.0.0 but failes on 7.1.0
Unfortunately, I'm not very familiar to xmake too, its just what libbpf-bootstrap provided for Android builds.
The change comes from libbpf. Bisecting between 1.0.0 and 1.1.0 for bpftool (using bpftool 7.0.0), it looks like the issue was introduced in commit https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=4fcac46c7e107a93030d19c6ea7b90540fc80b1b (https://github.com/libbpf/libbpf/commit/3cd45b660ce26f3b6f80a6eac6f9fab7fb56bcb4). I haven't looked at the details.
I note that there's a commit fixing that one (https://github.com/libbpf/libbpf/commit/ce8d078ac762df56a8407456601debd25457672e) but that doesn't seem helpful here, it's in the version used by the master branch of bpftool, which fails to generate the skeleton as well.
Should I move the issue to libbpf repo? https://github.com/libbpf/libbpf/issues
Probably worth involving libbpf folks indeed, it seems likely that any fix to bring will be on libbpf side anyway.
But the issue tracker on that repo is mostly to track the work on the GitHub mirror and libbpf CI, what I would recommend is to report directly on the BPF mailing list (see also this doc). Please keep me in copy. You'll get an answer much faster there than by waiting for me to get to the bottom of the issue :).
I have fixed this error. https://github.com/libbpf/libbpf-bootstrap/pull/237
we can use bpftool 7.2.0 now.
Thank you!
I have following map:
under v7.0.0 it works, under v7.1.0 getting an error:
bpftool gen skeleton build/.gens/xxx/android/x86_64/release/rules/bpf/xxx.bpf.o -d -p