Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
ghost opened this issue Feb 24, 2023 · 12 comments
Labels
bug Something isn't working

Comments

@ghost
Copy link

ghost commented Feb 24, 2023

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
Copy link
Member

qmonnet commented Feb 24, 2023

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
Copy link
Author

ghost commented Feb 24, 2023

Using libbpf v1.1.0 if that matters

I will make minimal c

@ghost
Copy link
Author

ghost commented Feb 24, 2023

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.

@ghost ghost changed the title failed to open BPF object file: Operation not supported failed to open BPF object file: Operation not supported (Android Build via xmake) Feb 24, 2023
@qmonnet
Copy link
Member

qmonnet commented Feb 24, 2023

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
Copy link
Member

qmonnet commented Feb 24, 2023

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
Copy link
Author

ghost commented Feb 24, 2023

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
Copy link
Member

qmonnet commented Feb 24, 2023

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 (libbpf/libbpf@3cd45b6). I haven't looked at the details.

I note that there's a commit fixing that one (libbpf/libbpf@ce8d078) 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.

@qmonnet qmonnet added the bug Something isn't working label Feb 24, 2023
@ghost
Copy link
Author

ghost commented Feb 24, 2023

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

@qmonnet
Copy link
Member

qmonnet commented Feb 27, 2023

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
Copy link

waruqi commented Nov 2, 2023

@waruqi
Copy link

waruqi commented Nov 2, 2023

I have fixed this error. libbpf/libbpf-bootstrap#237

we can use bpftool 7.2.0 now.

@qmonnet
Copy link
Member

qmonnet commented Nov 6, 2023

Thank you!

@qmonnet qmonnet closed this as completed Nov 6, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants