Ihor Solodrai <ihor.solod...@pm.me> writes: > On Monday, December 30th, 2024 at 12:36 PM, Sam James <s...@gentoo.org> wrote: > >> > >> > >> Andrew Pinski via Gcc gcc@gcc.gnu.org writes: >> > >> > On Mon, Dec 30, 2024 at 12:11 PM Ihor Solodrai via Gcc gcc@gcc.gnu.org >> > 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. > > Andrew, Sam, thank you for a swift response.
Thank you for working on CI for this! > > vmlinux.h is generated code, so for the booleans perhaps it's more > appropriate to generate a condition, for example: > > #if __STDC_VERSION__ < 202311L > enum { > false = 0, > true = 1, > }; > #endif > > Any drawbacks to this? > I think this is fine (enough), given the kernel isn't interested in using _Bool as far as I know. > Also if vmlinux was built with GCC C23 then I assume DWARF wouldn't > contain the debug info for the enum, hence it wouldn't be present in > vmlinux.h. > > I don't think downgrading the standard for a relatively new backend > makes sense, especially in the context of CI testing. The issue is that the kernel overall isn't yet worried about being built as C23. > >> > >> > [...]