From 0d296cc2d3b8e2ffa46b4a93d1398fa6bf85b504 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Wed, 15 Oct 2014 04:38:30 -0600 Subject: [PATCH] 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 Reviewed-by: Gabe Black Tested-by: Gabe Black Reviewed-by: Bill Richardson 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 --- README | 5 +++++ arch/sandbox/include/asm/types.h | 5 +++++ arch/x86/include/asm/types.h | 5 +++++ config.mk | 5 +++++ include/compiler.h | 11 ++++++++--- include/linux/types.h | 9 ++++++++- 6 files changed, 36 insertions(+), 4 deletions(-) diff --git a/README b/README index 2808dd1eb9..7663f7a8c5 100644 --- a/README +++ b/README @@ -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 diff --git a/config.mk b/config.mk index 00805bdc5b..64c2951ac1 100644 --- a/config.mk +++ b/config.mk @@ -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 +#else +/* Type for `void *' pointers. */ +typedef unsigned long int uintptr_t; +#endif + #include #include #include @@ -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. -- 2.25.1