libbpf / bpftool

Automated upstream mirror for bpftool stand-alone build.
Other
379 stars 69 forks source link

failed to open BPF object file: Operation not supported (Android Build via xmake) #77

Closed ghost closed 10 months ago

ghost commented 1 year ago

I have following map:

struct
{
  __uint(type, BPF_MAP_TYPE_RINGBUF);
  __uint(max_entries, MAX_ENTRIES);
} ring_map SEC(".maps");

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

...
libbpf: map 'xxx': unsupported map linkage static.
{
    "error": "failed to open BPF object file: Operation not supported"
}
qmonnet commented 1 year 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).

ghost commented 1 year ago

Using libbpf v1.1.0 if that matters

I will make minimal c

ghost commented 1 year ago

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.

qmonnet commented 1 year ago

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?

qmonnet commented 1 year ago

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.

ghost commented 1 year ago

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.

qmonnet commented 1 year ago

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.

ghost commented 1 year ago

Should I move the issue to libbpf repo? https://github.com/libbpf/libbpf/issues

qmonnet commented 1 year ago

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 :).

waruqi commented 10 months ago

see https://github.com/libbpf/libbpf-bootstrap/pull/236 https://github.com/libbpf/libbpf-bootstrap/issues/228#issuecomment-1790049947

waruqi commented 10 months ago

I have fixed this error. https://github.com/libbpf/libbpf-bootstrap/pull/237

we can use bpftool 7.2.0 now.

qmonnet commented 10 months ago

Thank you!