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