Hi Andrii, A user of bpf2go [1] recently ran into the problem of PT_REGS not being defined after including bpf_tracing.h. It turns out this is because we by default compile for bpfel / bpfeb so the logic in the header file doesn't kick in. I originally filed [2] as a quick fix, but looking at the issue some more made me wonder how to fit this into bpf2go better. Basically, the convention of bpf2go is that the compiled BPF is checked into the source code repository to facilitate distributing BPF as part of Go packages (as opposed to libbpf tooling which doesn't include generated source). To make this portable, bpf2go by default generates both bpfel and bpfeb variants of the C. However, code using bpf_tracing.h is inherently non-portable since the fields of struct pt_regs differ in name between platforms. It seems like this forces one to compile to each possible __TARGET_ARCH separately. If that is correct, could we extend CO-RE somehow to cover this as well? If that isn't possible, I want to avoid compiling and shipping BPF for each possible __TARGET_ARCH_xxx by default. Instead I would like to achieve: * Code that doesn't use bpf_tracing.h is distributed in bpfel and bpfeb variants * Code that uses bpf_tracing.h has to explicitly opt into the supported platforms via a flag to bpf2go The latter point is because the go tooling has to know the target arch to be able to generate the correct Go wrappers. How would you feel about adding something like the following to bpf_tracing.h: --- a/tools/lib/bpf/bpf_tracing.h +++ b/tools/lib/bpf/bpf_tracing.h @@ -25,6 +25,9 @@ #define bpf_target_sparc #define bpf_target_defined #else + #if defined(BPF_REQUIRE_EXPLICIT_TARGET_ARCH) + #error BPF_REQUIRE_EXPLICIT_TARGET_ARCH set and no target arch defined + #endif #undef bpf_target_defined #endif bpf2go would always define BPF_REQUIRE_EXPLICIT_TARGET_ARCH. If the user included bpf_tracing.h they get this error. They can then add -target amd64, etc. and the tooling then defines __TARGET_ARCH_x86_64 1: https://pkg.go.dev/github.com/cilium/ebpf/cmd/bpf2go 2: https://github.com/cilium/ebpf/issues/305 -- Lorenz Bauer | Systems Engineer 6th Floor, County Hall/The Riverside Building, SE1 7PB, UK www.cloudflare.com