Line data Source code
1 0 : /* 2 : * Copyright (c) 2017 Linaro Limited 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : #ifndef ZEPHYR_INCLUDE_ZEPHYR_TYPES_H_ 8 : #define ZEPHYR_INCLUDE_ZEPHYR_TYPES_H_ 9 : 10 : #include <stddef.h> 11 : #include <stdint.h> 12 : 13 : #ifdef __cplusplus 14 : extern "C" { 15 : #endif 16 : 17 : /* 18 : * A type with strong alignment requirements, similar to C11 max_align_t. It can 19 : * be used to force alignment of data structures allocated on the stack or as 20 : * return * type for heap allocators. 21 : */ 22 : typedef union { 23 : long long thelonglong; 24 : long double thelongdouble; 25 : uintmax_t theuintmax_t; 26 : size_t thesize_t; 27 : uintptr_t theuintptr_t; 28 : void *thepvoid; 29 : void (*thepfunc)(void); 30 : } z_max_align_t; 31 : 32 : /* 33 : * Thread local variables are declared with different keywords depending on 34 : * which C/C++ standard that is used. C++11 and C23 uses "thread_local" whilst 35 : * C11 uses "_Thread_local". Previously the GNU "__thread" keyword was used 36 : * which is the same in both gcc and g++. 37 : */ 38 : #ifndef Z_THREAD_LOCAL 39 : #if defined(__cplusplus) && (__cplusplus) >= 201103L /* C++11 */ 40 : #define Z_THREAD_LOCAL thread_local 41 : #elif defined(__STDC_VERSION__) && (__STDC_VERSION__) >= 202311L /* C23 */ 42 : #define Z_THREAD_LOCAL thread_local 43 : #elif defined(__STDC_VERSION__) && (__STDC_VERSION__) >= 201112L /* C11 */ 44 : #define Z_THREAD_LOCAL _Thread_local 45 : #else /* Default back to old behavior which used the GNU keyword. */ 46 : #define Z_THREAD_LOCAL __thread 47 : #endif 48 : #endif /* Z_THREAD_LOCAL */ 49 : 50 : #ifdef __cplusplus 51 : /* Zephyr requires an int main(void) signature with C linkage for the application main if present */ 52 : extern int main(void); 53 : #endif 54 : 55 : #ifdef __cplusplus 56 : } 57 : #endif 58 : 59 : #endif /* ZEPHYR_INCLUDE_ZEPHYR_TYPES_H_ */