Re: Confusion in usr/include/asm-generic/fcntl.h

From: H. Peter Anvin
Date: Tue Jan 20 2009 - 19:48:31 EST

David Miller wrote:
From: Jaswinder Singh Rajput <jaswinder@xxxxxxxxxx>
Date: Wed, 21 Jan 2009 05:34:17 +0530

usr/include/asm-generic/fcntl.h is giving 2 'make headers_check' warnings:
usr/include/asm-generic/fcntl.h:127: leaks CONFIG_64BIT to userspace where it is not valid
usr/include/asm-generic/fcntl.h:149: leaks CONFIG_64BIT to userspace where it is not valid

#ifndef CONFIG_64BIT will always be true for userspace. So what is the use of #ifndef CONFIG_64BIT ?

Good catch.

This file needs to test for 64-bit'ness using some non-CONFIG_*
test. And the standard built-in CPP macros which can be used
to check for that are different on every platform.

There are a few ways to check for 64-bitness that are platform-independent, unfortunately each of them have drawbacks.

a) the gcc-specific way:

#if __SIZEOF_POINTER__ == 8


#ifdef __LP64__

or any other number of variants.

It has the obvious disadvantage of being gcc-specific, although
it seems rather likely that other Linux-supporting compilers might
also define these macros.

b) the standard C way:

#include <limits.h>

#if LONG_MAX > 2147483647L

it has the obvious disadvantage of needing to include <limits.h>...

We can, of course, also do our own thing as DaveM suggested; this is probably the best option. FWIW, glibc has _WORDSIZE which is equivalent to what we call BITS_PER_LONG. We might as well export it under that name (presumably under #ifndef).

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at