> On Fri, 2025-01-03 at 01:16 +0100, Jose E. Marchesi wrote:
>
> [...]
>
>> Yes, in the GCC BPF backend we are using
>>
>> use_gcc_stdint=provide
>>
>> which makes GCC to provide the version of stdint.h that assumes
>> freestanding ("baremetal") mode. If we changed it to use
>>
>> use_gcc_stdint=wrap
>>
>> then it would install a stdint.h that does somethins similar to what
>> clang does, at least in hosts providing C99 headers (note the lack of
>> __has_include_next):
>>
>> #ifndef _GCC_WRAP_STDINT_H
>> #if __STDC_HOSTED__
>> # if defined __cplusplus && __cplusplus >= 201103L
>> # undef __STDC_LIMIT_MACROS
>> # define __STDC_LIMIT_MACROS
>> # undef __STDC_CONSTANT_MACROS
>> # define __STDC_CONSTANT_MACROS
>> # endif
>> #pragma GCC diagnostic push
>> #pragma GCC diagnostic ignored "-Wpedantic" // include_next
>> # include_next <stdint.h>
>> #pragma GCC diagnostic pop
>> #else
>> # include "stdint-gcc.h"
>> #endif
>> #define _GCC_WRAP_STDINT_H
>> #endif
>>
>> We could switch to "wrap" to align with clang, but in that case it would
>> be up to the user to provide a "host" stdint.h that contains sensible
>> definitions for BPF. The kernel selftests, for example, would need to
>> do so to avoid including /usr/include/stdint.h that more likely than not
>> will provide incorrect definitions for int64_t and friends...
>
> Would it be possible to push a branch that uses '=wrap' thing
> somewhere? So that it could be further tested to see if there are
> more issues with selftests.
No need. After reflecting a bit I can't see why the requirements on the
"host" stdint.h must be different for BPF than for any other target: its
contents must match the expectations of the compiler for the arch. If
it doesn't... well, it is not the responsibility of the compiler to
assure that. I will install a patch to switch to the wrapper stdint.h.