Skip to content

Commit 8eeece8

Browse files
committed
picolibc-freertos.h: Add #ifndef guards around TLS_BLOCK macros.
1 parent c1980ce commit 8eeece8

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

include/picolibc-freertos.h

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,27 +41,31 @@
4141

4242
#define configUSE_C_RUNTIME_TLS_SUPPORT 1
4343

44-
#define configTLS_BLOCK_TYPE void *
44+
#ifndef configTLS_BLOCK_TYPE
45+
#define configTLS_BLOCK_TYPE void *
46+
#endif
4547

4648
#define picolibcTLS_SIZE ( ( portPOINTER_SIZE_TYPE ) _tls_size() )
4749
#define picolibcSTACK_ALIGNMENT_MASK ( ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK )
4850

51+
/*
52+
* Picolibc 1.8 and newer have explicit alignment values provided
53+
* by the _tls_align() inline
54+
*/
4955
#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 */
5356
#define picolibcTLS_ALIGNMENT_MASK ( ( portPOINTER_SIZE_TYPE ) ( _tls_align() - 1 ) )
54-
#else
5557

5658
/* For older Picolibc versions, use the general port alignment value */
59+
#else
5760
#define picolibcTLS_ALIGNMENT_MASK ( ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK )
5861
#endif
5962

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 )
6569
#define configINIT_TLS_BLOCK( xTLSBlock, pxTopOfStack ) \
6670
do { \
6771
pxTopOfStack = ( StackType_t * ) ( ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack ) \
@@ -71,20 +75,25 @@
7175
xTLSBlock = pxTopOfStack; \
7276
_init_tls( xTLSBlock ); \
7377
} while( 0 )
74-
#else /* portSTACK_GROWTH */
78+
79+
#elif ( !defined( configINIT_TLS_BLOCK ) ) && ( portSTACK_GROWTH == 1 )
7580
#define configINIT_TLS_BLOCK( xTLSBlock, pxTopOfStack ) \
7681
do { \
7782
xTLSBlock = ( void * ) ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack + \
7883
picolibcTLS_ALIGNMENT_MASK ) & ~picolibcTLS_ALIGNMENT_MASK ); \
7984
pxTopOfStack = ( StackType_t * ) ( ( ( ( ( portPOINTER_SIZE_TYPE ) xTLSBlock ) + \
8085
picolibcTLS_SIZE ) + picolibcSTACK_ALIGNMENT_MASK ) & \
81-
~picolibcSTACK_ALIGNMENT_MASK ); \
86+
( ~picolibcSTACK_ALIGNMENT_MASK ) ); \
8287
_init_tls( xTLSBlock ); \
8388
} while( 0 )
84-
#endif /* portSTACK_GROWTH */
89+
#endif /* !configINIT_TLS_BLOCK && portSTACK_GROWTH */
8590

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 */
8794

88-
#define configDEINIT_TLS_BLOCK( xTLSBlock )
95+
#ifndef configDEINIT_TLS_BLOCK
96+
#define configDEINIT_TLS_BLOCK( xTLSBlock )
97+
#endif /* configDEINIT_TLS_BLOCK */
8998

9099
#endif /* INC_PICOLIBC_FREERTOS_H */

0 commit comments

Comments
 (0)