diff --git a/include/picolibc-freertos.h b/include/picolibc-freertos.h index 467f7a970..ef6b7570c 100644 --- a/include/picolibc-freertos.h +++ b/include/picolibc-freertos.h @@ -58,18 +58,19 @@ #endif /* Allocate thread local storage block off the end of the -* stack. The _tls_size() function returns the size (in -* bytes) of the total TLS area used by the application */ + * stack. The picolibcTLS_SIZE macro returns the size (in + * bytes) of the total TLS area used by the application. + * Calculate the top of stack address. */ #if ( portSTACK_GROWTH < 0 ) - #define configINIT_TLS_BLOCK( xTLSBlock, pxTopOfStack ) \ - do { \ - pxTopOfStack = ( StackType_t * ) ( ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack ) \ - - picolibcTLS_SIZE ) & ~ \ - configMAX( picolibcSTACK_ALIGNMENT_MASK, \ - picolibcTLS_ALIGNMENT_MASK ) ); \ - xTLSBlock = pxTopOfStack; \ - _init_tls( xTLSBlock ); \ + #define configINIT_TLS_BLOCK( xTLSBlock, pxTopOfStack ) \ + do { \ + xTLSBlock = ( void * ) ( ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack ) - \ + picolibcTLS_SIZE ) & \ + ~picolibcTLS_ALIGNMENT_MASK ); \ + pxTopOfStack = ( StackType_t * ) ( ( ( ( portPOINTER_SIZE_TYPE ) xTLSBlock ) - 1 ) & \ + ~picolibcSTACK_ALIGNMENT_MASK ); \ + _init_tls( xTLSBlock ); \ } while( 0 ) #else /* portSTACK_GROWTH */ #define configINIT_TLS_BLOCK( xTLSBlock, pxTopOfStack ) \