1#ifndef _ASM_TYPES_H 2#define _ASM_TYPES_H 3 4#include <asm-generic/int-ll64.h> 5 6/* 7 * The C99 types uintXX_t that are usually defined in 'stdint.h' are not as 8 * unambiguous on ARM as you would expect. For the types below, there is a 9 * difference on ARM between GCC built for bare metal ARM, GCC built for glibc 10 * and the kernel itself, which results in build errors if you try to build with 11 * -ffreestanding and include 'stdint.h' (such as when you include 'arm_neon.h' 12 * in order to use NEON intrinsics) 13 * 14 * As the typedefs for these types in 'stdint.h' are based on builtin defines 15 * supplied by GCC, we can tweak these to align with the kernel's idea of those 16 * types, so 'linux/types.h' and 'stdint.h' can be safely included from the same 17 * source file (provided that -ffreestanding is used). 18 * 19 * int32_t uint32_t uintptr_t 20 * bare metal GCC long unsigned long unsigned int 21 * glibc GCC int unsigned int unsigned int 22 * kernel int unsigned int unsigned long 23 */ 24 25#ifdef __INT32_TYPE__ 26#undef __INT32_TYPE__ 27#define __INT32_TYPE__ int 28#endif 29 30#ifdef __UINT32_TYPE__ 31#undef __UINT32_TYPE__ 32#define __UINT32_TYPE__ unsigned int 33#endif 34 35#ifdef __UINTPTR_TYPE__ 36#undef __UINTPTR_TYPE__ 37#define __UINTPTR_TYPE__ unsigned long 38#endif 39 40#endif /* _ASM_TYPES_H */ 41