Ensure that CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE meets the task storage alignment requirement. --- cpukit/doxygen/appl-config.h | 14 +++++++++++--- cpukit/include/rtems/confdefs/threads.h | 8 +++++++- 2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/cpukit/doxygen/appl-config.h b/cpukit/doxygen/appl-config.h index 092e02ccca..4b18ac29a7 100644 --- a/cpukit/doxygen/appl-config.h +++ b/cpukit/doxygen/appl-config.h @@ -887,9 +887,17 @@ * The default value is 0. * * @par Value Constraints - * The value of this configuration option shall be greater than or equal to 0 - * and less than or equal to <a - * href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>. + * @parblock + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to <a + * href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>. + * + * * It shall be an integral multiple of #RTEMS_TASK_STORAGE_ALIGNMENT. + * @endparblock * * @par Notes * @parblock diff --git a/cpukit/include/rtems/confdefs/threads.h b/cpukit/include/rtems/confdefs/threads.h index 97508068e2..a9c8a271b5 100644 --- a/cpukit/include/rtems/confdefs/threads.h +++ b/cpukit/include/rtems/confdefs/threads.h @@ -138,8 +138,14 @@ typedef union { const size_t _Thread_Maximum_name_size = CONFIGURE_MAXIMUM_THREAD_NAME_SIZE; +#define _CONFIGURE_ASSERT_TASK_STORAGE_ALIGNMENT( _value ) \ + ( ( _value ) % RTEMS_TASK_STORAGE_ALIGNMENT == 0 ? ( _value ) : \ + sizeof( int[ ( _value ) % RTEMS_TASK_STORAGE_ALIGNMENT == 0 ? 1 : -1 ] ) ) + const size_t _Thread_Maximum_TLS_size = - CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE; + _CONFIGURE_ASSERT_TASK_STORAGE_ALIGNMENT( + CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE + ); struct Thread_Configured_control { Thread_Control Control; -- 2.26.2 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel