BPF List
 help / color / mirror / Atom feed
From: Sam James <sam@gentoo.org>
To: Andrew Pinski via Gcc <gcc@gcc.gnu.org>
Cc: Ihor Solodrai <ihor.solodrai@pm.me>,
	 Andrew Pinski <pinskia@gmail.com>,
	Cupertino Miranda <cupertino.miranda@oracle.com>,
	 David Faust <david.faust@oracle.com>,
	 Elena Zannoni <elena.zannoni@oracle.com>,
	"Jose E. Marchesi" <jose.marchesi@oracle.com>,
	 Alexei Starovoitov <alexei.starovoitov@gmail.com>,
	 Manu Bretelle <chantra@meta.com>,
	 Eduard Zingerman <eddyz87@gmail.com>,
	 Mykola Lysenko <mykolal@meta.com>,
	Yonghong Song <yonghong.song@linux.dev>,
	 bpf <bpf@vger.kernel.org>
Subject: Re: Errors compiling BPF programs from Linux selftests/bpf with GCC
Date: Mon, 30 Dec 2024 20:36:49 +0000	[thread overview]
Message-ID: <87v7v0oqla.fsf@gentoo.org> (raw)
In-Reply-To: <CA+=Sn1ktCrXZMjrC0b1TNxfz1BnQfG24XUdVuktS8kRWeEP2kA@mail.gmail.com> (Andrew Pinski via Gcc's message of "Mon, 30 Dec 2024 12:24:32 -0800")

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.

>
> 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
>>
>>

  reply	other threads:[~2024-12-30 20:36 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-30 20:08 Errors compiling BPF programs from Linux selftests/bpf with GCC Ihor Solodrai
2024-12-30 20:24 ` Andrew Pinski
2024-12-30 20:36   ` Sam James [this message]
2024-12-30 20:59     ` Ihor Solodrai
2024-12-30 21:08       ` Sam James
2024-12-31  0:42       ` Alexei Starovoitov
2024-12-31  1:26         ` Ihor Solodrai
2024-12-31  4:09           ` Alexei Starovoitov
2025-01-02  9:47 ` Jose E. Marchesi
2025-01-02 17:35   ` Ihor Solodrai
2025-01-02 18:24     ` Jose E. Marchesi
2025-01-03  0:42       ` Eduard Zingerman
2025-01-03 13:23         ` Jose E. Marchesi
2025-01-02 23:04   ` Eduard Zingerman
2025-01-03  0:16     ` Jose E. Marchesi
2025-01-03  0:46       ` Eduard Zingerman
2025-01-03 10:17         ` Jose E. Marchesi
2025-01-03 12:52           ` Jose E. Marchesi
2025-01-03 23:48 ` Ihor Solodrai
2025-01-03 23:56   ` Andrew Pinski
2025-01-04  8:05   ` Jose E. Marchesi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87v7v0oqla.fsf@gentoo.org \
    --to=sam@gentoo.org \
    --cc=alexei.starovoitov@gmail.com \
    --cc=bpf@vger.kernel.org \
    --cc=chantra@meta.com \
    --cc=cupertino.miranda@oracle.com \
    --cc=david.faust@oracle.com \
    --cc=eddyz87@gmail.com \
    --cc=elena.zannoni@oracle.com \
    --cc=gcc@gcc.gnu.org \
    --cc=ihor.solodrai@pm.me \
    --cc=jose.marchesi@oracle.com \
    --cc=mykolal@meta.com \
    --cc=pinskia@gmail.com \
    --cc=yonghong.song@linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox