<div dir="ltr"><div>How is the user/system integrator supposed to figure out the size of the TLS? It is not known until the application is linked and thus varies based on the total set of code linked. </div><div><br></div><div>As far as I can tell, this makes this type of task creation unsuitable for use in libraries where the end system is unknown. </div><div><br></div><div>It is at least fragile in tightly controlled applications and subject to someone guessing a number larger than required which wastes memory and goes against the intent of the statically allocated thread resources.</div><div><br></div><div>If there is a practical and portable way to know this number, it needs to be explained quite well in the documentation and always used in any tests or examples.</div><div><br></div><div>--joel</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Sep 10, 2020 at 9:33 AM Sebastian Huber <<a href="mailto:sebastian.huber@embedded-brains.de">sebastian.huber@embedded-brains.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Document this application configuration option.<br>
<br>
Update #4074.<br>
---<br>
 c-user/config/classic-api.rst | 35 +++++++++++++++++++++++++++++++++++<br>
 1 file changed, 35 insertions(+)<br>
<br>
diff --git a/c-user/config/classic-api.rst b/c-user/config/classic-api.rst<br>
index f0fbe6f..d7002ad 100644<br>
--- a/c-user/config/classic-api.rst<br>
+++ b/c-user/config/classic-api.rst<br>
@@ -366,6 +366,41 @@ NOTES:<br>
     the addition of a new configuration parameter to specify the number of<br>
     tasks which enable floating point support.<br>
<br>
+.. index:: CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE<br>
+<br>
+.. _CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE:<br>
+<br>
+CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE<br>
+-------------------------------------------<br>
+<br>
+CONSTANT:<br>
+    ``CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE``<br>
+<br>
+OPTION TYPE:<br>
+    This configuration option is an integer define.<br>
+<br>
+DEFAULT VALUE:<br>
+    The default value is 0.<br>
+<br>
+VALUE CONSTRAINTS:<br>
+    The value of this configuration option shall be greater than or equal to 0<br>
+    and less than or equal to `SIZE_MAX <<a href="https://en.cppreference.com/w/c/types/limits" rel="noreferrer" target="_blank">https://en.cppreference.com/w/c/types/limits</a>>`_.<br>
+<br>
+DESCRIPTION:<br>
+    If the value of this configuration option is greater than zero, then it<br>
+    defines the maximum thread-local storage size, otherwise the thread-local<br>
+    storage size is defined by the linker depending on the thread-local storage<br>
+    objects used by the application in the statically-linked executable.<br>
+<br>
+NOTES:<br>
+    This configuration option can be used to reserve space for the dynamic linking<br>
+    of modules with thread-local storage objects.<br>
+<br>
+    If the thread-local storage size defined by the thread-local storage<br>
+    objects used by the application in the statically-linked executable is greater<br>
+    than a non-zero value of this configuration option, then a fatal error will<br>
+    occur during system initialization.<br>
+<br>
 .. index:: CONFIGURE_MAXIMUM_TIMERS<br>
<br>
 .. _CONFIGURE_MAXIMUM_TIMERS:<br>
-- <br>
2.26.2<br>
<br>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" target="_blank">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a><br>
</blockquote></div></div>