You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ag...@apache.org on 2020/05/05 17:56:40 UTC
[incubator-nuttx] 01/04: libs/libc/tls/Kconfig: Add
CONFIG_TLS_ALIGNED
This is an automated email from the ASF dual-hosted git repository.
aguettouche pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit b1071cca0043a2c81e1bb032660560c53df888d5
Author: Gregory Nutt <gn...@nuttx.org>
AuthorDate: Tue May 5 07:28:04 2020 -0600
libs/libc/tls/Kconfig: Add CONFIG_TLS_ALIGNED
CONFIG_TLS_ALIGNED will select the (legacy) aligned stack implementation of TLS. If CONFIG_TLS_ALIGNED is not defined, then the new, implementation of TLS using an unaligned stack will be enabled.
---
libs/libc/tls/Kconfig | 32 ++++++++++++++++++++++++++------
1 file changed, 26 insertions(+), 6 deletions(-)
diff --git a/libs/libc/tls/Kconfig b/libs/libc/tls/Kconfig
index 8cc17fc..55d0050 100644
--- a/libs/libc/tls/Kconfig
+++ b/libs/libc/tls/Kconfig
@@ -21,17 +21,37 @@ config TLS
if TLS
-config TLS_LOG2_MAXSTACK
- int "Maximum stack size (log2)"
- default 13
- range 11 24
+config TLS_ALIGNED
+ bool "Require stack alignment"
+ default y if BUILD_KERNEL
+ default n if !BUILD_KERNEL
---help---
- Stack based TLS works by fetch thread information from the beginning
+ Aligned TLS works by fetch thread information from the beginning
of the stack memory allocation. In order to do this, the memory
must be aligned in such a way that the executing logic can simply
- masking the current stack pointer to get the beginning of the stack
+ mask the current stack pointer to get the beginning of the stack
allocation.
+ The advantage of using an aligned stack is no OS interface need
+ be called to get the beginning of the stack. It is simply and
+ AND operation on the current stack pointer. The disadvantages
+ are that the alignment (1) causes memory fragmentation which
+ be a serious problem for memory limited systems, and (2) limits
+ the maximum size of the stack. Any mask places a limit on the
+ maximum size of the stack; stack sizes about that would map to
+ an incorrect address.
+
+ In general, CONFIG_TLS_ALIGNED is preferred for the KERNEL
+ build where the virtualized stack address an be aligned with
+ no implications to physical memory. In other builds, the
+ unaligned stack implementation is usually superior.
+
+config TLS_LOG2_MAXSTACK
+ int "Maximum stack size (log2)"
+ default 13
+ range 11 24
+ depends on TLS_ALIGNED
+ ---help---
This setting specifies the alignment of the stack as a power of 2:
11=2KB, 12=4KB, 13=8KB, etc. The exact alignment is not so critical
except that (1) a very large value can cause you to run out of