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 |