diff options
author | Gabe Black <gabeblack@chromium.org> | 2014-10-15 04:38:30 -0600 |
---|---|---|
committer | Tom Rini <trini@ti.com> | 2014-10-27 11:04:01 -0400 |
commit | 0d296cc2d3b8e2ffa46b4a93d1398fa6bf85b504 (patch) | |
tree | 25c0cadf3c5056cbe0c72ab19c932293428b5615 | |
parent | 4bf3a56f2b2c7c7bbf3825484d361d564a270783 (diff) |
Provide option to avoid defining a custom version of uintptr_t.
There's a definition in stdint.h (provided by gcc) which will be more correct
if available.
Define CONFIG_USE_STDINT to use this feature, or USE_STDINT=1 on the 'make'
commmand.
This adjusts the settings for x86 and sandbox, with both have 64-bit options.
Signed-off-by: Gabe Black <gabeblack@google.com>
Reviewed-by: Gabe Black <gabeblack@chromium.org>
Tested-by: Gabe Black <gabeblack@chromium.org>
Reviewed-by: Bill Richardson <wfrichar@google.com>
Rewritten to be an option, since stdint.h is often available only in glibc.
Changed to preserve a clear boundary between stdint and non-stdint
Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r-- | README | 5 | ||||
-rw-r--r-- | arch/sandbox/include/asm/types.h | 5 | ||||
-rw-r--r-- | arch/x86/include/asm/types.h | 5 | ||||
-rw-r--r-- | config.mk | 5 | ||||
-rw-r--r-- | include/compiler.h | 11 | ||||
-rw-r--r-- | include/linux/types.h | 9 |
6 files changed, 36 insertions, 4 deletions
@@ -4054,6 +4054,11 @@ Configuration Settings: be asserted. See doc/README.omap-reset-time for details on how the value can be calulated on a given board. +- CONFIG_USE_STDINT + If stdint.h is available with your toolchain you can define this + option to enable it. You can provide option 'USE_STDINT=1' when + building U-Boot to enable this. + The following definitions that deal with the placement and management of environment data (variable area); in general, we support the following configurations: diff --git a/arch/sandbox/include/asm/types.h b/arch/sandbox/include/asm/types.h index 6d3eb1f3de..42c09e2fff 100644 --- a/arch/sandbox/include/asm/types.h +++ b/arch/sandbox/include/asm/types.h @@ -42,8 +42,13 @@ typedef unsigned short u16; typedef signed int s32; typedef unsigned int u32; +#if !defined(CONFIG_USE_STDINT) || !defined(__INT64_TYPE__) typedef signed long long s64; typedef unsigned long long u64; +#else +typedef __INT64_TYPE__ s64; +typedef __UINT64_TYPE__ u64; +#endif #define BITS_PER_LONG CONFIG_SANDBOX_BITS_PER_LONG diff --git a/arch/x86/include/asm/types.h b/arch/x86/include/asm/types.h index e9fde88f7d..e272c90eb7 100644 --- a/arch/x86/include/asm/types.h +++ b/arch/x86/include/asm/types.h @@ -36,8 +36,13 @@ typedef unsigned short u16; typedef signed int s32; typedef unsigned int u32; +#if !defined(CONFIG_USE_STDINT) || !defined(__INT64_TYPE__) typedef signed long long s64; typedef unsigned long long u64; +#else +typedef __INT64_TYPE__ s64; +typedef __UINT64_TYPE__ u64; +#endif #define BITS_PER_LONG 32 @@ -59,6 +59,11 @@ ifdef FTRACE PLATFORM_CPPFLAGS += -finstrument-functions -DFTRACE endif +# Allow use of stdint.h if available +ifneq ($(USE_STDINT),) +PLATFORM_CPPFLAGS += -DCONFIG_USE_STDINT +endif + ######################################################################### RELFLAGS := $(PLATFORM_RELFLAGS) diff --git a/include/compiler.h b/include/compiler.h index 21036022d7..47c296e202 100644 --- a/include/compiler.h +++ b/include/compiler.h @@ -112,6 +112,14 @@ typedef unsigned int uint; #else /* !USE_HOSTCC */ +#ifdef CONFIG_USE_STDINT +/* Provided by gcc. */ +#include <stdint.h> +#else +/* Type for `void *' pointers. */ +typedef unsigned long int uintptr_t; +#endif + #include <linux/string.h> #include <linux/types.h> #include <asm/byteorder.h> @@ -128,9 +136,6 @@ typedef unsigned int uint; #define __WORDSIZE 32 #endif -/* Type for `void *' pointers. */ -typedef unsigned long int uintptr_t; - #endif /* USE_HOSTCC */ #define likely(x) __builtin_expect(!!(x), 1) diff --git a/include/linux/types.h b/include/linux/types.h index 9aebc4e8cf..c9a8d9a8c2 100644 --- a/include/linux/types.h +++ b/include/linux/types.h @@ -104,7 +104,8 @@ typedef __u8 uint8_t; typedef __u16 uint16_t; typedef __u32 uint32_t; -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) && \ + (!defined(CONFIG_USE_STDINT) || !defined(__INT64_TYPE__)) typedef __u64 uint64_t; typedef __u64 u_int64_t; typedef __s64 int64_t; @@ -112,6 +113,12 @@ typedef __s64 int64_t; #endif /* __KERNEL_STRICT_NAMES */ +#if defined(CONFIG_USE_STDINT) && defined(__INT64_TYPE__) +typedef __UINT64_TYPE__ uint64_t; +typedef __UINT64_TYPE__ u_int64_t; +typedef __INT64_TYPE__ int64_t; +#endif + /* * Below are truly Linux-specific types that should never collide with * any application/library that wants linux/types.h. |