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.

>
>> 
>
>> > [...]

Reply via email to