Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Thu, 3 Mar 2016 11:00:54 -0500
From: Rich Felker <dalias@...c.org>
To: musl@...ts.openwall.com
Subject: Re: iproute2 & other software

On Thu, Mar 03, 2016 at 11:10:06AM +0100, Szabolcs Nagy wrote:
> * Rich Felker <dalias@...c.org> [2016-03-02 18:30:50 -0500]:
> > On Wed, Mar 02, 2016 at 09:49:41PM +0100, Szabolcs Nagy wrote:
> > > * Loganaden Velvindron <loganaden@...il.com> [2016-03-02 19:19:13 +0000]:
> > > > "
> > > > Sorry, I have to reject this.
> > > > All include files in include/linux come from headers automatically
> > > > generated from upstream
> > > > Linux source. This is the only way to ensure long term ABI/API consistency
> > > > with kernel.
> > > > 
> > > > Either fix musl or submit patches to upstream kernel and get them merged.
> > > > "
> > > > 
> > > > Can we look into providing somekind of compatibility layer for header files
> > > > so that it's easier to get upstream projects like iproute2 to support musl ?
> > > > 
> > > 
> > > in theory the correct solution is to fix the kernel headers
> > > so they don't collide with posix types in libc headers.
> > > 
> > > in practice old kernel headers should work too and it's unlikely
> > > that a complete uapi fix would be accepted into linux any time
> > > soon so applications should avoid including both libc and kernel
> > > headers into the same tu.
> > > 
> > > unfortunately glibc added workarounds into libc and uapi headers
> > > that make it seem as if mixing linux and libc headers work, so
> > > now application programmers don't have the incentive to fix this.
> > > 
> > > musl cannot use the same workarounds because they use ifdef __GLIBC__
> > > (which is a major bug for linux uapi headers to depend on):
> > > https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/libc-compat.h
> > 
> > Would it help for us to define the __UAPI_DEF_* macros? If so I'd be
> 
> no, because they are defined unconditionally in libc-compat.h,
> however we could define _UAPI_LIBC_COMPAT_H to make the conflicting
> type definitions disappear.
> 
> but that is still fragile: any libc header would disable all
> typedefs, while in glibc the checks are more fine grained.

That sounds viable (we never want _any_ kernel definitions that
conflict with standard ones) but I don't like the mechanism (poking at
their multiple-inclusion-guard macro). Likewise I don't like how
they're peeking at libc's private multiple-inclusion-guard macros.

> we could also submit a linux patch to make the non-__GLIBC__
> case more reasonable (e.g. check for existing definition of
> the macros).

I think that sounds more reasonable.

What would be ideal would be a macro we could define from features.h
or even stdc-predef.h that says "libc defines all the standard types;
we don't want kernel headers trying to define them", which the kernel
headers would honor via:

#ifdef _LIBC_DEFINES_STD_TYPES
#include <netinet/in.h>
#else
/* their own definitions */
#endif

but I suspect that would be controversial on the kernel side.

Rich

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.