Coder Social home page Coder Social logo

Comments (4)

system-thoughts avatar system-thoughts commented on June 25, 2024

This warning can be elimated by add -D__KERNEL__:

# Build BPF code
$(OUTPUT)/%.bpf.o: %.bpf.c $(wildcard %.h) | $(OUTPUT)
    $(call msg,BPF,$@)
    $(Q)$(CLANG) -g -O2 -target bpf \
    -D__KERNEL__ -D__TARGET_ARCH_$(ARCH) \
    $(LINUX_INCLUDE) $(CLANG_BPF_SYS_INCLUDES) -c $(filter %.c,$^) -o $@

However, other undeclared identifier error still exist.

from libbpf-bootstrap.

anakryiko avatar anakryiko commented on June 25, 2024

The recommendation is to use CO-RE and vmlinux.h. If you can't or don't want to, you'll have to make sure you are including the right headers with the right definitions. bool should come from just <stdbool.h>, there rest would come from either UAPI or kernel-internal headers (and kernel-internal is where you are running into issues, probably).

Check out bootstrap example for vmlinux.h usage. That makes everything much-much simpler (but you'll need kernel BTF, of course). You might want to check https://github.com/aquasecurity/btfhub and follow the BTFGen discussion which is currently happening upstream.

from libbpf-bootstrap.

system-thoughts avatar system-thoughts commented on June 25, 2024

The recommendation is to use CO-RE and vmlinux.h. If you can't or don't want to, you'll have to make sure you are including the right headers with the right definitions. bool should come from just <stdbool.h>, there rest would come from either UAPI or kernel-internal headers (and kernel-internal is where you are running into issues, probably).

Thanks for your reply. Because the BPF program will run Non-BTF OS(CONFIG_DEBUG_INFO_BTF is not set), So I imitated Minimal APP to write this BPF program.
Now, I decided to use vmlinux.h to slove the linux header problem, Howerver, is it possible to run such BPF program on Non-BTF OS?
Even though I delete #include <linux/stddef.h> line, the problem still exist, and the <stdbool.h> you mentioned is from standard libc or kernel internal implementaion?

from libbpf-bootstrap.

anakryiko avatar anakryiko commented on June 25, 2024

You can safely use vmlinux.h if you generated it from exactly the same vmlinux image that you are going to run on. Or if you are absolutely sure that you are using only types defined in kernel UAPI (which means they won't change their layout). But the latter doesn't seem true in your case, because you've tried to use internal kernel headers.

So, you can use vmlinux.h without relying on CO-RE, you'll just need to make sure that you have a matching vmlinux image. And you'll need to #define BPF_NO_PRESERVE_ACCESS_INDEX before #include "vmlinux.h" to disable CO-RE annotations.

stdbool.h was from standard libc, but you won't need it with vmlinux.h

from libbpf-bootstrap.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.