Line data Source code
1 0 : /* 2 : * Copyright (c) 2019 BayLibre SAS 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : #ifndef ZEPHYR_INCLUDE_TOOLCHAIN_STDINT_H_ 8 : #define ZEPHYR_INCLUDE_TOOLCHAIN_STDINT_H_ 9 : 10 : /* 11 : * Some gcc versions and/or configurations as found in the Zephyr SDK 12 : * (questionably) define __INT32_TYPE__ and derivatives as a long int 13 : * which makes the printf format checker to complain about long vs int 14 : * mismatch when %u is given a uint32_t argument, and uint32_t pointers not 15 : * being compatible with int pointers. Let's redefine them to follow 16 : * common expectations and usage. 17 : */ 18 : 19 : #if __SIZEOF_INT__ != 4 20 : #error "unexpected int width" 21 : #endif 22 : 23 : #undef __INT32_TYPE__ 24 : #undef __UINT32_TYPE__ 25 : #undef __INT_FAST32_TYPE__ 26 : #undef __UINT_FAST32_TYPE__ 27 : #undef __INT_LEAST32_TYPE__ 28 : #undef __UINT_LEAST32_TYPE__ 29 : #undef __INT64_TYPE__ 30 : #undef __UINT64_TYPE__ 31 : #undef __INT_FAST64_TYPE__ 32 : #undef __UINT_FAST64_TYPE__ 33 : #undef __INT_LEAST64_TYPE__ 34 : #undef __UINT_LEAST64_TYPE__ 35 : 36 : #define __INT32_TYPE__ int 37 : #define __UINT32_TYPE__ unsigned int 38 : #define __INT_FAST32_TYPE__ __INT32_TYPE__ 39 : #define __UINT_FAST32_TYPE__ __UINT32_TYPE__ 40 : #define __INT_LEAST32_TYPE__ __INT32_TYPE__ 41 : #define __UINT_LEAST32_TYPE__ __UINT32_TYPE__ 42 : #define __INT64_TYPE__ long long int 43 : #define __UINT64_TYPE__ unsigned long long int 44 : #define __INT_FAST64_TYPE__ __INT64_TYPE__ 45 : #define __UINT_FAST64_TYPE__ __UINT64_TYPE__ 46 : #define __INT_LEAST64_TYPE__ __INT64_TYPE__ 47 : #define __UINT_LEAST64_TYPE__ __UINT64_TYPE__ 48 : 49 : /* 50 : * The confusion also exists with __INTPTR_TYPE__ which is either an int 51 : * (even when __INT32_TYPE__ is a long int) or a long int. Let's redefine 52 : * it to a long int to get some uniformity. Doing so also makes it compatible 53 : * with LP64 (64-bit) targets where a long is always 64-bit wide. 54 : */ 55 : 56 : #if __SIZEOF_POINTER__ != __SIZEOF_LONG__ 57 : #error "unexpected size difference between pointers and long ints" 58 : #endif 59 : 60 : #undef __INTPTR_TYPE__ 61 : #undef __UINTPTR_TYPE__ 62 : #define __INTPTR_TYPE__ long int 63 : #define __UINTPTR_TYPE__ long unsigned int 64 : 65 : /* 66 : * Re-define the INTN_C(value) integer constant expression macros to match the 67 : * integer types re-defined above. 68 : */ 69 : 70 : #undef __INT32_C 71 : #undef __UINT32_C 72 : #undef __INT64_C 73 : #undef __UINT64_C 74 : #define __INT32_C(c) c 75 : #define __UINT32_C(c) c ## U 76 : #define __INT64_C(c) c ## LL 77 : #define __UINT64_C(c) c ## ULL 78 : 79 : #endif /* ZEPHYR_INCLUDE_TOOLCHAIN_STDINT_H_ */