Andrew Pinski via Gcc <gcc@xxxxxxxxxxx> writes: > On Mon, Dec 30, 2024 at 12:11 PM Ihor Solodrai via Gcc <gcc@xxxxxxxxxxx> wrote: >> >> Hello everyone. >> >> I picked up the work adding GCC BPF backend to BPF CI pipeline [1], >> originally done by Cupertino Miranda [2]. >> >> I encountered issues compiling BPF objects for selftests/bpf with >> recent GCC 15 snapshots. An additional test runner binary is supposed >> to be generated by tools/testing/selftests/bpf/Makefile if BPF_GCC is >> set to a directory with GCC binaries for BPF backend. The runner >> binary depends on BPF binaries, which are produced by GCC. >> >> The first issue is compilation errors on vmlinux.h: >> >> In file included from progs/linked_maps1.c:4: >> /ci/workspace/tools/testing/selftests/bpf/tools/include/vmlinux.h:8483:9: error: expected identifier before ‘false’ >> 8483 | false = 0, >> | ^~~~~ >> >> A snippet from vmlinux.h: >> >> enum { >> false = 0, >> true = 1, >> }; >> >> And: >> >> /ci/workspace/tools/testing/selftests/bpf/tools/include/vmlinux.h:23539:15: error: two or more data types in declaration specifiers >> 23539 | typedef _Bool bool; >> | ^~~~ >> >> Full log at [3], and also at [4]. > > > These are simple, the selftests/bpf programs need to compile with > -std=gnu17 or -std=gnu11 since GCC has changed the default to C23 > which defines false and bool as keywords now and can't be redeclared > like before. Yes, the kernel has various issues like this: https://lore.kernel.org/linux-kbuild/20241119044724.GA2246422@thelio-3990X/. Unfortunately, not all the Makefiles correctly declare that they need gnu11. Clang will hit issues like this too when they change default to gnu23. > > Thanks, > Andrew Pinski > >> >> You can easily reproduce the errors with a dummy program: >> >> #include "vmlinux.h" >> >> int main() { >> return 0; >> } >> >> The vmlinux.h is generated from BTF, produced by pahole v1.28 from >> DWARF data contained in the vmlinux binary. The vmlinux binary I used >> in these experiments is v6.12 (adc218676eef) compiled with gcc 13.3.0 >> (default Ubuntu installation). >> >> You can download the specific vmlinux.h I tried using a link below [5]. >> >> I bisected recent GCC snapshots and determined that the errors related >> to the bool declarations started happening on GCC 15-20241117. >> >> Older versions compile the dummy program without errors, however on >> attempt to build the selftests there is a different issue: conflicting >> int64 definitions (full log at [6]). >> >> In file included from /usr/include/x86_64-linux-gnu/sys/types.h:155, >> from /usr/include/x86_64-linux-gnu/bits/socket.h:29, >> from /usr/include/x86_64-linux-gnu/sys/socket.h:33, >> from /usr/include/linux/if.h:28, >> from /usr/include/linux/icmp.h:23, >> from progs/test_cls_redirect_dynptr.c:10: >> /usr/include/x86_64-linux-gnu/bits/stdint-intn.h:27:19: error: conflicting types for ‘int64_t’; have ‘__int64_t’ {aka ‘long long int’} >> 27 | typedef __int64_t int64_t; >> | ^~~~~~~ >> In file included from progs/test_cls_redirect_dynptr.c:6: >> /ci/workspace/bpfgcc.20240922/lib/gcc/bpf-unknown-none/15.0.0/include/stdint.h:43:24: note: previous declaration of ‘int64_t’ with type ‘int64_t’ {aka ‘long int’} >> 43 | typedef __INT64_TYPE__ int64_t; >> | ^~~~~~~ >> >> This is on a typical ubuntu:noble system: >> >> $ dpkg -s libc6 | grep Version >> Version: 2.39-0ubuntu8.3 >> >> I got this with snapshots 15-20241110 and 15-20240922 (the oldest I >> tested). This problem may or may not be present in the most recent >> versions, I can't tell for sure. >> >> GCC team, please investigate and let me know if you're aware of >> workarounds or if there is a specific GCC version that you know is >> capable of building BPF programs in selftests/bpf. >> >> If you suspect something might be wrong with the includes for BPF >> programs, or GCC snapshot build etc, please also let me know. I mostly >> relied on Cupertino scripts when setting that up, and assumed the >> selftests/bpf/Makefile is handling BPF_GCC correctly. >> >> Thank you, and happy holidays! >> >> [1] https://github.com/libbpf/ci/pull/164 >> [2] https://github.com/libbpf/ci/pull/144 >> [3] https://gist.github.com/theihor/98883c4266b3489cee69e5d5aa532e79 >> [4] https://github.com/libbpf/ci/actions/runs/12522053128/job/34929897322 >> [5] https://gist.github.com/theihor/785bb250dd1cce3612e70b5f6d258401 >> [6] https://gist.github.com/theihor/a8aa7201b30ac6b48df77bb1ea3ec0b2 >> >>