summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabe Black <gabeblack@chromium.org>2014-10-15 04:38:30 -0600
committerTom Rini <trini@ti.com>2014-10-27 11:04:01 -0400
commit0d296cc2d3b8e2ffa46b4a93d1398fa6bf85b504 (patch)
tree25c0cadf3c5056cbe0c72ab19c932293428b5615
parent4bf3a56f2b2c7c7bbf3825484d361d564a270783 (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--README5
-rw-r--r--arch/sandbox/include/asm/types.h5
-rw-r--r--arch/x86/include/asm/types.h5
-rw-r--r--config.mk5
-rw-r--r--include/compiler.h11
-rw-r--r--include/linux/types.h9
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 <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.