|
41 | 41 |
|
42 | 42 | #define configUSE_C_RUNTIME_TLS_SUPPORT 1
|
43 | 43 |
|
44 |
| -#define configTLS_BLOCK_TYPE void * |
| 44 | +#ifndef configTLS_BLOCK_TYPE |
| 45 | + #define configTLS_BLOCK_TYPE void * |
| 46 | +#endif |
45 | 47 |
|
46 | 48 | #define picolibcTLS_SIZE ( ( portPOINTER_SIZE_TYPE ) _tls_size() )
|
47 | 49 | #define picolibcSTACK_ALIGNMENT_MASK ( ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK )
|
48 | 50 |
|
| 51 | +/* |
| 52 | + * Picolibc 1.8 and newer have explicit alignment values provided |
| 53 | + * by the _tls_align() inline |
| 54 | + */ |
49 | 55 | #if __PICOLIBC_MAJOR__ > 1 || __PICOLIBC_MINOR__ >= 8
|
50 |
| - |
51 |
| -/* Picolibc 1.8 and newer have explicit alignment values provided |
52 |
| - * by the _tls_align() inline */ |
53 | 56 | #define picolibcTLS_ALIGNMENT_MASK ( ( portPOINTER_SIZE_TYPE ) ( _tls_align() - 1 ) )
|
54 |
| -#else |
55 | 57 |
|
56 | 58 | /* For older Picolibc versions, use the general port alignment value */
|
| 59 | +#else |
57 | 60 | #define picolibcTLS_ALIGNMENT_MASK ( ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK )
|
58 | 61 | #endif
|
59 | 62 |
|
60 |
| -/* Allocate thread local storage block off the end of the |
61 |
| -* stack. The _tls_size() function returns the size (in |
62 |
| -* bytes) of the total TLS area used by the application */ |
63 |
| -#if ( portSTACK_GROWTH < 0 ) |
64 |
| - |
| 63 | +/* |
| 64 | + * Allocate thread local storage block off the end of the |
| 65 | + * stack. The _tls_size() function returns the size (in |
| 66 | + * bytes) of the total TLS area used by the application. |
| 67 | + */ |
| 68 | +#if ( !defined( configINIT_TLS_BLOCK ) ) && ( portSTACK_GROWTH == -1 ) |
65 | 69 | #define configINIT_TLS_BLOCK( xTLSBlock, pxTopOfStack ) \
|
66 | 70 | do { \
|
67 | 71 | pxTopOfStack = ( StackType_t * ) ( ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack ) \
|
|
71 | 75 | xTLSBlock = pxTopOfStack; \
|
72 | 76 | _init_tls( xTLSBlock ); \
|
73 | 77 | } while( 0 )
|
74 |
| -#else /* portSTACK_GROWTH */ |
| 78 | + |
| 79 | +#elif ( !defined( configINIT_TLS_BLOCK ) ) && ( portSTACK_GROWTH == 1 ) |
75 | 80 | #define configINIT_TLS_BLOCK( xTLSBlock, pxTopOfStack ) \
|
76 | 81 | do { \
|
77 | 82 | xTLSBlock = ( void * ) ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack + \
|
78 | 83 | picolibcTLS_ALIGNMENT_MASK ) & ~picolibcTLS_ALIGNMENT_MASK ); \
|
79 | 84 | pxTopOfStack = ( StackType_t * ) ( ( ( ( ( portPOINTER_SIZE_TYPE ) xTLSBlock ) + \
|
80 | 85 | picolibcTLS_SIZE ) + picolibcSTACK_ALIGNMENT_MASK ) & \
|
81 |
| - ~picolibcSTACK_ALIGNMENT_MASK ); \ |
| 86 | + ( ~picolibcSTACK_ALIGNMENT_MASK ) ); \ |
82 | 87 | _init_tls( xTLSBlock ); \
|
83 | 88 | } while( 0 )
|
84 |
| -#endif /* portSTACK_GROWTH */ |
| 89 | +#endif /* !configINIT_TLS_BLOCK && portSTACK_GROWTH */ |
85 | 90 |
|
86 |
| -#define configSET_TLS_BLOCK( xTLSBlock ) _set_tls( xTLSBlock ) |
| 91 | +#ifndef configSET_TLS_BLOCK |
| 92 | + #define configSET_TLS_BLOCK( xTLSBlock ) _set_tls( xTLSBlock ) |
| 93 | +#endif /* configSET_TLS_BLOCK */ |
87 | 94 |
|
88 |
| -#define configDEINIT_TLS_BLOCK( xTLSBlock ) |
| 95 | +#ifndef configDEINIT_TLS_BLOCK |
| 96 | + #define configDEINIT_TLS_BLOCK( xTLSBlock ) |
| 97 | +#endif /* configDEINIT_TLS_BLOCK */ |
89 | 98 |
|
90 | 99 | #endif /* INC_PICOLIBC_FREERTOS_H */
|
0 commit comments