diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2009-05-13 18:56:25 -0400 |
|---|---|---|
| committer | Arnd Bergmann <arnd@klappe2.(none)> | 2009-06-11 15:02:14 -0400 |
| commit | c31ae4bb4a9fa4606a74c0a4fb61b74f804e861e (patch) | |
| tree | 7694b1a05bc1ac660ac26eb9997200556ccd3933 /include/asm-generic | |
| parent | 63b852a6b67d0820d388b0ecd0da83ccb4048b8d (diff) | |
asm-generic: introduce asm/bitsperlong.h
This provides a reliable way for asm-generic/types.h and other
files to find out if it is running on a 32 or 64 bit platform.
We cannot use CONFIG_64BIT for this in headers that are included
from user space because CONFIG symbols are not available there.
We also cannot do it inside of asm/types.h because some headers
need the word size but cannot include types.h.
The solution is to introduce a new header <asm/bitsperlong.h>
that defines both __BITS_PER_LONG for user space and
BITS_PER_LONG for usage in the kernel. The asm-generic
version falls back to 32 bit unless the architecture overrides
it, which I did for all 64 bit platforms.
Signed-off-by: Remis Lima Baima <remis.developer@googlemail.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'include/asm-generic')
| -rw-r--r-- | include/asm-generic/Kbuild | 1 | ||||
| -rw-r--r-- | include/asm-generic/Kbuild.asm | 1 | ||||
| -rw-r--r-- | include/asm-generic/bitsperlong.h | 32 | ||||
| -rw-r--r-- | include/asm-generic/int-l64.h | 2 | ||||
| -rw-r--r-- | include/asm-generic/int-ll64.h | 2 |
5 files changed, 38 insertions, 0 deletions
diff --git a/include/asm-generic/Kbuild b/include/asm-generic/Kbuild index 460b08d51e2e..cbb437875f5c 100644 --- a/include/asm-generic/Kbuild +++ b/include/asm-generic/Kbuild | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | header-y += bitsperlong.h | ||
| 1 | header-y += errno-base.h | 2 | header-y += errno-base.h |
| 2 | header-y += errno.h | 3 | header-y += errno.h |
| 3 | header-y += fcntl.h | 4 | header-y += fcntl.h |
diff --git a/include/asm-generic/Kbuild.asm b/include/asm-generic/Kbuild.asm index 70d185534b9d..290910e4ede4 100644 --- a/include/asm-generic/Kbuild.asm +++ b/include/asm-generic/Kbuild.asm | |||
| @@ -9,6 +9,7 @@ unifdef-y += a.out.h | |||
| 9 | endif | 9 | endif |
| 10 | unifdef-y += auxvec.h | 10 | unifdef-y += auxvec.h |
| 11 | unifdef-y += byteorder.h | 11 | unifdef-y += byteorder.h |
| 12 | unifdef-y += bitsperlong.h | ||
| 12 | unifdef-y += errno.h | 13 | unifdef-y += errno.h |
| 13 | unifdef-y += fcntl.h | 14 | unifdef-y += fcntl.h |
| 14 | unifdef-y += ioctl.h | 15 | unifdef-y += ioctl.h |
diff --git a/include/asm-generic/bitsperlong.h b/include/asm-generic/bitsperlong.h new file mode 100644 index 000000000000..4ae54e07de83 --- /dev/null +++ b/include/asm-generic/bitsperlong.h | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | #ifndef __ASM_GENERIC_BITS_PER_LONG | ||
| 2 | #define __ASM_GENERIC_BITS_PER_LONG | ||
| 3 | |||
| 4 | /* | ||
| 5 | * There seems to be no way of detecting this automatically from user | ||
| 6 | * space, so 64 bit architectures should override this in their | ||
| 7 | * bitsperlong.h. In particular, an architecture that supports | ||
| 8 | * both 32 and 64 bit user space must not rely on CONFIG_64BIT | ||
| 9 | * to decide it, but rather check a compiler provided macro. | ||
| 10 | */ | ||
| 11 | #ifndef __BITS_PER_LONG | ||
| 12 | #define __BITS_PER_LONG 32 | ||
| 13 | #endif | ||
| 14 | |||
| 15 | #ifdef __KERNEL__ | ||
| 16 | |||
| 17 | #ifdef CONFIG_64BIT | ||
| 18 | #define BITS_PER_LONG 64 | ||
| 19 | #else | ||
| 20 | #define BITS_PER_LONG 32 | ||
| 21 | #endif /* CONFIG_64BIT */ | ||
| 22 | |||
| 23 | /* | ||
| 24 | * FIXME: The check currently breaks x86-64 build, so it's | ||
| 25 | * temporarily disabled. Please fix x86-64 and reenable | ||
| 26 | */ | ||
| 27 | #if 0 && BITS_PER_LONG != __BITS_PER_LONG | ||
| 28 | #error Inconsistent word size. Check asm/bitsperlong.h | ||
| 29 | #endif | ||
| 30 | |||
| 31 | #endif /* __KERNEL__ */ | ||
| 32 | #endif /* __ASM_GENERIC_BITS_PER_LONG */ | ||
diff --git a/include/asm-generic/int-l64.h b/include/asm-generic/int-l64.h index 2af9b75d77db..1ca3efc976cc 100644 --- a/include/asm-generic/int-l64.h +++ b/include/asm-generic/int-l64.h | |||
| @@ -8,6 +8,8 @@ | |||
| 8 | #ifndef _ASM_GENERIC_INT_L64_H | 8 | #ifndef _ASM_GENERIC_INT_L64_H |
| 9 | #define _ASM_GENERIC_INT_L64_H | 9 | #define _ASM_GENERIC_INT_L64_H |
| 10 | 10 | ||
| 11 | #include <asm/bitsperlong.h> | ||
| 12 | |||
| 11 | #ifndef __ASSEMBLY__ | 13 | #ifndef __ASSEMBLY__ |
| 12 | /* | 14 | /* |
| 13 | * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the | 15 | * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the |
diff --git a/include/asm-generic/int-ll64.h b/include/asm-generic/int-ll64.h index f9bc9ac29b36..f394147c0739 100644 --- a/include/asm-generic/int-ll64.h +++ b/include/asm-generic/int-ll64.h | |||
| @@ -8,6 +8,8 @@ | |||
| 8 | #ifndef _ASM_GENERIC_INT_LL64_H | 8 | #ifndef _ASM_GENERIC_INT_LL64_H |
| 9 | #define _ASM_GENERIC_INT_LL64_H | 9 | #define _ASM_GENERIC_INT_LL64_H |
| 10 | 10 | ||
| 11 | #include <asm/bitsperlong.h> | ||
| 12 | |||
| 11 | #ifndef __ASSEMBLY__ | 13 | #ifndef __ASSEMBLY__ |
| 12 | /* | 14 | /* |
| 13 | * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the | 15 | * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the |
