mirror of
				https://github.com/FreeRTOS/FreeRTOS-Kernel.git
				synced 2025-11-04 11:09:01 +01:00 
			
		
		
		
	Fix pxTopOfStack calculation in configINIT_TLS_BLOCK for picolib (#739)
The pxTopOfStack calculation in configINIT_TLS_BLOCK for picolib needs to decrement pxTopOfStack in order to meet the expectation of pxPortInitialiseStack function.
This commit is contained in:
		
							parent
							
								
									05d93e0990
								
							
						
					
					
						commit
						b5f670f826
					
				@ -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 )                                          \
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user