Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 9 Oct 2015 21:11:08 +0200
From: Denys Vlasenko <>
To: Rich Felker <>
Cc: Rob Landley <>, Aboriginal Linux <>, 
	musl <>
Subject: Re: Re: musl and kernel headers [was Re: system-images 1.4.2:
 od is broken; bzip2 is missing]

On Thu, Oct 8, 2015 at 6:58 PM, Rich Felker <> 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 */

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.