From 1de00d685d4ad5af7c6b09711b34369dc7d31bae Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 3 Mar 2021 09:36:45 +0100 Subject: CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE 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 | 5 +++++ testsuites/sptests/spfatal33/init.c | 12 ++++++------ 3 files changed, 22 insertions(+), 9 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 SIZE_MAX. + * @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 SIZE_MAX. + * + * * 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..279c6264db 100644 --- a/cpukit/include/rtems/confdefs/threads.h +++ b/cpukit/include/rtems/confdefs/threads.h @@ -138,6 +138,11 @@ typedef union { const size_t _Thread_Maximum_name_size = CONFIGURE_MAXIMUM_THREAD_NAME_SIZE; +RTEMS_STATIC_ASSERT( + CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE % RTEMS_TASK_STORAGE_ALIGNMENT == 0, + CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE +); + const size_t _Thread_Maximum_TLS_size = CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE; diff --git a/testsuites/sptests/spfatal33/init.c b/testsuites/sptests/spfatal33/init.c index 3cdce7d931..a7218c596f 100644 --- a/testsuites/sptests/spfatal33/init.c +++ b/testsuites/sptests/spfatal33/init.c @@ -36,20 +36,20 @@ #define FATAL_ERROR_EXPECTED_SOURCE INTERNAL_ERROR_CORE #define FATAL_ERROR_EXPECTED_ERROR INTERNAL_ERROR_TOO_LARGE_TLS_SIZE -static _Thread_local short tls; +static _Thread_local int tls[ RTEMS_TASK_STORAGE_ALIGNMENT ]; -static void force_error(void) +static void force_error( void ) { - long var; + int var; - var = tls; + var = tls[ 0 ]; RTEMS_OBFUSCATE_VARIABLE( var ); - tls = var; + tls[ 0 ] = var; /* Not reached */ rtems_test_assert( 0 ); } -#define CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE 1 +#define CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE RTEMS_TASK_STORAGE_ALIGNMENT #include "../spfatal_support/spfatalimpl.h" -- cgit v1.2.3