summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-03-03 09:36:45 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-03-05 06:58:33 +0100
commit1de00d685d4ad5af7c6b09711b34369dc7d31bae (patch)
tree0a6e8c8df435d09dfe0fee5c528acf1ce77e01bc
parentvalidation: Fix for 64-bit targets (diff)
downloadrtems-1de00d685d4ad5af7c6b09711b34369dc7d31bae.tar.bz2
CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE
Ensure that CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE meets the task storage alignment requirement.
-rw-r--r--cpukit/doxygen/appl-config.h14
-rw-r--r--cpukit/include/rtems/confdefs/threads.h5
-rw-r--r--testsuites/sptests/spfatal33/init.c12
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 <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..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"