diff mbox

[U-Boot,7/7] Make BITS_PER_LONG compiler-dependent (MAD)

Message ID 1419243363-11542-8-git-send-email-yamada.m@jp.panasonic.com
State RFC
Delegated to: Tom Rini
Headers show

Commit Message

Masahiro Yamada Dec. 22, 2014, 10:16 a.m. UTC
Linux expects "unsigned long" has the same bit-width as the pointer,
i.e. the size of "unsigned long" is 4 on 32-bit compilers (ILP32)
and it is 8 on 64-bit compilers (LLP64).
It provides us the convenience in return of the limitation that
LP64 data model is not supported.

U-Boot used to follow Linux's way, but it does not now.

Including <stdint.h> means the width of "long" type is provided by
the compiler.

Use __SIZEOF_LONG__ instead of hard-coding BITS_PER_LONG.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Cc: Gabe Black <gabeblack@chromium.org>
Cc: Simon Glass <sjg@chromium.org>
Cc: Bill Richardson <wfrichar@google.com>
Cc: Tom Rini <trini@ti.com>
---

 arch/arc/include/asm/types.h        | 4 ++++
 arch/arm/include/asm/types.h        | 4 ++++
 arch/avr32/include/asm/types.h      | 4 ++++
 arch/blackfin/include/asm/types.h   | 4 ++++
 arch/m68k/include/asm/types.h       | 4 ++++
 arch/microblaze/include/asm/types.h | 4 ++++
 arch/mips/include/asm/types.h       | 4 ++++
 arch/nds32/include/asm/types.h      | 4 ++++
 arch/nios2/include/asm/types.h      | 4 ++++
 arch/openrisc/include/asm/types.h   | 4 ++++
 arch/powerpc/include/asm/types.h    | 4 ++++
 arch/sandbox/include/asm/types.h    | 4 ++++
 arch/sh/include/asm/types.h         | 4 ++++
 arch/sparc/include/asm/types.h      | 4 ++++
 arch/x86/include/asm/types.h        | 4 ++++
 15 files changed, 60 insertions(+)

Comments

Simon Glass Dec. 23, 2014, 4:51 a.m. UTC | #1
Hi Masahiro,

On 22 December 2014 at 03:16, Masahiro Yamada <yamada.m@jp.panasonic.com> wrote:
> Linux expects "unsigned long" has the same bit-width as the pointer,
> i.e. the size of "unsigned long" is 4 on 32-bit compilers (ILP32)
> and it is 8 on 64-bit compilers (LLP64).
> It provides us the convenience in return of the limitation that
> LP64 data model is not supported.
>
> U-Boot used to follow Linux's way, but it does not now.
>
> Including <stdint.h> means the width of "long" type is provided by
> the compiler.
>
> Use __SIZEOF_LONG__ instead of hard-coding BITS_PER_LONG.
>

From what I can tell the size of the types is no different with and
without stdint.h. It is just the names of the typedefs that are used
for each type that changes. So if we follow the kernel approach, maybe
this patch isn't needed either?

> Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
> Cc: Gabe Black <gabeblack@chromium.org>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Bill Richardson <wfrichar@google.com>
> Cc: Tom Rini <trini@ti.com>
> ---
>
>  arch/arc/include/asm/types.h        | 4 ++++
>  arch/arm/include/asm/types.h        | 4 ++++
>  arch/avr32/include/asm/types.h      | 4 ++++
>  arch/blackfin/include/asm/types.h   | 4 ++++
>  arch/m68k/include/asm/types.h       | 4 ++++
>  arch/microblaze/include/asm/types.h | 4 ++++
>  arch/mips/include/asm/types.h       | 4 ++++
>  arch/nds32/include/asm/types.h      | 4 ++++
>  arch/nios2/include/asm/types.h      | 4 ++++
>  arch/openrisc/include/asm/types.h   | 4 ++++
>  arch/powerpc/include/asm/types.h    | 4 ++++
>  arch/sandbox/include/asm/types.h    | 4 ++++
>  arch/sh/include/asm/types.h         | 4 ++++
>  arch/sparc/include/asm/types.h      | 4 ++++
>  arch/x86/include/asm/types.h        | 4 ++++
>  15 files changed, 60 insertions(+)
>

[snip]

Regards,
Simon
diff mbox

Patch

diff --git a/arch/arc/include/asm/types.h b/arch/arc/include/asm/types.h
index 5693e5f..71779e9 100644
--- a/arch/arc/include/asm/types.h
+++ b/arch/arc/include/asm/types.h
@@ -73,7 +73,11 @@  typedef signed long long s64;
 typedef unsigned long long u64;
 #endif
 
+#ifdef CONFIG_USE_STDINT
+#define BITS_PER_LONG ((__SIZEOF_LONG__) * 8)
+#else
 #define BITS_PER_LONG 32
+#endif
 
 /* Dma addresses are 32-bits wide. */
 
diff --git a/arch/arm/include/asm/types.h b/arch/arm/include/asm/types.h
index e24acc59..510b694 100644
--- a/arch/arm/include/asm/types.h
+++ b/arch/arm/include/asm/types.h
@@ -72,11 +72,15 @@  typedef unsigned long long u64;
 
 #endif
 
+#ifdef CONFIG_USE_STDINT
+#define BITS_PER_LONG ((__SIZEOF_LONG__) * 8)
+#else
 #ifdef	CONFIG_ARM64
 #define BITS_PER_LONG 64
 #else	/* CONFIG_ARM64 */
 #define BITS_PER_LONG 32
 #endif	/* CONFIG_ARM64 */
+#endif
 
 /* Dma addresses are 32-bits wide.  */
 
diff --git a/arch/avr32/include/asm/types.h b/arch/avr32/include/asm/types.h
index 032a765..5311daa 100644
--- a/arch/avr32/include/asm/types.h
+++ b/arch/avr32/include/asm/types.h
@@ -51,7 +51,11 @@  __extension__ typedef unsigned long long __u64;
  */
 #ifdef __KERNEL__
 
+#ifdef CONFIG_USE_STDINT
+#define BITS_PER_LONG ((__SIZEOF_LONG__) * 8)
+#else
 #define BITS_PER_LONG 32
+#endif
 
 #ifndef __ASSEMBLY__
 
diff --git a/arch/blackfin/include/asm/types.h b/arch/blackfin/include/asm/types.h
index 8cae642..2cdb0e8 100644
--- a/arch/blackfin/include/asm/types.h
+++ b/arch/blackfin/include/asm/types.h
@@ -88,7 +88,11 @@  typedef unsigned long long u64;
 
 #endif
 
+#ifdef CONFIG_USE_STDINT
+#define BITS_PER_LONG ((__SIZEOF_LONG__) * 8)
+#else
 #define BITS_PER_LONG 32
+#endif
 
 /* Dma addresses are 32-bits wide. */
 
diff --git a/arch/m68k/include/asm/types.h b/arch/m68k/include/asm/types.h
index 83de4d5..53414db 100644
--- a/arch/m68k/include/asm/types.h
+++ b/arch/m68k/include/asm/types.h
@@ -72,7 +72,11 @@  typedef unsigned long long u64;
 
 #endif
 
+#ifdef CONFIG_USE_STDINT
+#define BITS_PER_LONG ((__SIZEOF_LONG__) * 8)
+#else
 #define BITS_PER_LONG 32
+#endif
 
 /* DMA addresses are 32-bits wide */
 typedef u32 dma_addr_t;
diff --git a/arch/microblaze/include/asm/types.h b/arch/microblaze/include/asm/types.h
index afcd811..7418499 100644
--- a/arch/microblaze/include/asm/types.h
+++ b/arch/microblaze/include/asm/types.h
@@ -79,7 +79,11 @@  typedef unsigned long long u64;
 
 #endif
 
+#ifdef CONFIG_USE_STDINT
+#define BITS_PER_LONG ((__SIZEOF_LONG__) * 8)
+#else
 #define BITS_PER_LONG 32
+#endif
 
 /* Dma addresses are 32-bits wide.  */
 
diff --git a/arch/mips/include/asm/types.h b/arch/mips/include/asm/types.h
index f372c70..546a9c1 100644
--- a/arch/mips/include/asm/types.h
+++ b/arch/mips/include/asm/types.h
@@ -58,7 +58,11 @@  typedef unsigned long long __u64;
  */
 #ifdef __KERNEL__
 
+#ifdef CONFIG_USE_STDINT
+#define BITS_PER_LONG ((__SIZEOF_LONG__) * 8)
+#else
 #define BITS_PER_LONG _MIPS_SZLONG
+#endif
 
 #ifndef __ASSEMBLY__
 
diff --git a/arch/nds32/include/asm/types.h b/arch/nds32/include/asm/types.h
index 8416cef..6d0a2db 100644
--- a/arch/nds32/include/asm/types.h
+++ b/arch/nds32/include/asm/types.h
@@ -79,7 +79,11 @@  typedef unsigned long long u64;
 
 #endif
 
+#ifdef CONFIG_USE_STDINT
+#define BITS_PER_LONG ((__SIZEOF_LONG__) * 8)
+#else
 #define BITS_PER_LONG 32
+#endif
 
 #include <stddef.h>
 
diff --git a/arch/nios2/include/asm/types.h b/arch/nios2/include/asm/types.h
index 43c76cc..d5751e2 100644
--- a/arch/nios2/include/asm/types.h
+++ b/arch/nios2/include/asm/types.h
@@ -78,7 +78,11 @@  typedef unsigned long long u64;
 
 #endif
 
+#ifdef CONFIG_USE_STDINT
+#define BITS_PER_LONG ((__SIZEOF_LONG__) * 8)
+#else
 #define BITS_PER_LONG 32
+#endif
 
 /* Dma addresses are 32-bits wide.  */
 
diff --git a/arch/openrisc/include/asm/types.h b/arch/openrisc/include/asm/types.h
index 069c8d6..16a0ad9 100644
--- a/arch/openrisc/include/asm/types.h
+++ b/arch/openrisc/include/asm/types.h
@@ -84,7 +84,11 @@  typedef unsigned long long u64;
 
 #endif
 
+#ifdef CONFIG_USE_STDINT
+#define BITS_PER_LONG ((__SIZEOF_LONG__) * 8)
+#else
 #define BITS_PER_LONG 32
+#endif
 
 /* Dma addresses are 32-bits wide.  */
 
diff --git a/arch/powerpc/include/asm/types.h b/arch/powerpc/include/asm/types.h
index 71868ef..cba487c 100644
--- a/arch/powerpc/include/asm/types.h
+++ b/arch/powerpc/include/asm/types.h
@@ -71,7 +71,11 @@  typedef unsigned long long u64;
 
 #endif
 
+#ifdef CONFIG_USE_STDINT
+#define BITS_PER_LONG ((__SIZEOF_LONG__) * 8)
+#else
 #define BITS_PER_LONG 32
+#endif
 
 #ifdef CONFIG_PHYS_64BIT
 typedef unsigned long long dma_addr_t;
diff --git a/arch/sandbox/include/asm/types.h b/arch/sandbox/include/asm/types.h
index 1bb168c..6d69422 100644
--- a/arch/sandbox/include/asm/types.h
+++ b/arch/sandbox/include/asm/types.h
@@ -80,7 +80,11 @@  typedef __INT64_TYPE__ s64;
 typedef __UINT64_TYPE__ u64;
 #endif
 
+#ifdef CONFIG_USE_STDINT
+#define BITS_PER_LONG ((__SIZEOF_LONG__) * 8)
+#else
 #define BITS_PER_LONG	CONFIG_SANDBOX_BITS_PER_LONG
+#endif
 
 typedef unsigned long dma_addr_t;
 typedef u32 phys_addr_t;
diff --git a/arch/sh/include/asm/types.h b/arch/sh/include/asm/types.h
index eb47b0f..82884f4 100644
--- a/arch/sh/include/asm/types.h
+++ b/arch/sh/include/asm/types.h
@@ -46,7 +46,11 @@  __extension__ typedef unsigned long long __u64;
  */
 #ifdef __KERNEL__
 
+#ifdef CONFIG_USE_STDINT
+#define BITS_PER_LONG ((__SIZEOF_LONG__) * 8)
+#else
 #define BITS_PER_LONG 32
+#endif
 
 #ifndef __ASSEMBLY__
 
diff --git a/arch/sparc/include/asm/types.h b/arch/sparc/include/asm/types.h
index 79484c5..5794152 100644
--- a/arch/sparc/include/asm/types.h
+++ b/arch/sparc/include/asm/types.h
@@ -77,7 +77,11 @@  typedef unsigned int u32;
 typedef signed long long s64;
 typedef unsigned long long u64;
 
+#ifdef CONFIG_USE_STDINT
+#define BITS_PER_LONG ((__SIZEOF_LONG__) * 8)
+#else
 #define BITS_PER_LONG 32
+#endif
 
 /* DMA addresses are 32-bits wide */
 typedef u32 dma_addr_t;
diff --git a/arch/x86/include/asm/types.h b/arch/x86/include/asm/types.h
index 88c6645..7ff1520 100644
--- a/arch/x86/include/asm/types.h
+++ b/arch/x86/include/asm/types.h
@@ -75,7 +75,11 @@  typedef __INT64_TYPE__ s64;
 typedef __UINT64_TYPE__ u64;
 #endif
 
+#ifdef CONFIG_USE_STDINT
+#define BITS_PER_LONG ((__SIZEOF_LONG__) * 8)
+#else
 #define BITS_PER_LONG 32
+#endif
 
 /* Dma addresses are 32-bits wide.  */