[Aboriginal] [musl] Re: musl and kernel headers [was Re: system-images 1.4.2: od is broken; bzip2 is missing]

Denys Vlasenko vda.linux at googlemail.com
Fri Oct 9 12:11:08 PDT 2015

On Thu, Oct 8, 2015 at 6:58 PM, Rich Felker <dalias at aerifal.cx> wrote:
>> > Including kernel headers is just really problematic. These days they
>> > try to make it work on glibc with a complex dance between glibc's
>> > headers and the kernel headers. You're likely to have the best luck by
>> > including the libc headers first.
>> brctl.c  was including <linux/if_bridge.h> after <netinet/in.h>
> The problem is linux/libc-compat.h, which should fix this, only works
> on glibc, by design. See:
> #ifndef _LIBC_COMPAT_H
> #define _LIBC_COMPAT_H
> /* We have included glibc headers... */
> #if defined(__GLIBC__)
> /* Coordinate with glibc netinet/in.h header. */
> #if defined(_NETINET_IN_H)
> If you patch it like this:
> -#if defined(__GLIBC__)
> +#if 1
> then it should mostly work but it's still all a big hack. I think
> that's what distros are doing. The problem is that the same header is
> trying to do two different things:
> 1. Provide extra linux-kernel-API stuff that's not in the
>    libc/userspace headers.
> 2. Provide definitions of the standard types and constants for uClibc
>    and klibc, which don't have complete libc headers and rely on the
>    kernel headers for definitions.
> These two uses really should be separated out into separate headers so
> that the latter only get included explicitly by uClibc and klibc and
> otherwise remain completely unused. But that would require coordinated
> changes/upgrades which are unlikely to happen. :(

Looking at kernel's libc-compat.h, it looks like you can get away
with using __UAPI_DEF_foo's like this?

/* kernel already defined the struct, do nothing */
struct sockaddr_in {
/* tell kernel to not define the struct */

More information about the Aboriginal mailing list