On Fri, Apr 20, 2018 at 3:53 PM, Jeffrey Walton <noloader@xxxxxxxxx> wrote: >> +#if !defined(__x86_64__) || !defined(__ilp32__) >> #include <asm-generic/msgbuf.h> >> +#else > > I understand there's some progress having Clang compile the kernel. > Clang treats __ILP32__ and friends differently than GCC. I believe > ILP32 shows up just about everywhere there are 32-bit ints, longs and > pointers. You might find it on Aarch64 or you might find it on MIPS64 > when using Clang. > > I think that means this may be a little suspicious: > > > +#if !defined(__x86_64__) || !defined(__ilp32__) > > I kind of felt LLVM was wandering away from the x32 ABI, but the LLVM > devs insisted they were within their purview. Also see > https://lists.llvm.org/pipermail/cfe-dev/2015-December/046300.html. > > Sorry about the top-post. I just wanted to pick out that one piece. It seems I made a typo and it needs to be __ILP32__ rather than __ilp32__ (corrected that locally, will resend once we have resolved this). Aside from that, the #if check seems to be correct to me: this is an x86-specific header, so it won't ever be seen on other architectures. On x86-32, __x86_64__ isn't set, so we don't care about whether __ilp32__ is set or not, and on x86-64 (lp64), __ilp32__ is never set, so we still get the asm-generic header. Arnd