nuttx/libs/libc/tls/Kconfig
Gregory Nutt 9ce03b1660 Move pthread-specific data into TLS
1. Move pthread-specific data files from sched/pthread/ to libs/libc/pthread.
2. Remove pthread-specific data functions from syscalls.
3. Implement tls_alloc() and tls_free() with system calls.
4. Reimplement pthread_key_create() and pthread_key_free() using tls_alloc() and tls_free().
5. Reimplement pthread_set_specific() and pthread_get_specicif() using tls_set_value() and tls_get_value()
2020-05-08 18:05:04 +01:00

58 lines
2.1 KiB
Plaintext

#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#
menu "Thread Local Storage (TLS)"
config TLS_ALIGNED
bool "Require stack alignment"
default y if BUILD_KERNEL
default n if !BUILD_KERNEL
---help---
Aligned TLS works by fetching 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
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 an
AND operation on the current stack pointer. The disadvantages
are that the alignment (1) causes memory fragmentation which can
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 can 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
alignable memory (and fail memory allocations), and (2) smaller
values will limit the maximum size of the stack (hence the naming
of this configuration value).
config TLS_NELEM
int "Number of TLS elements"
default 4
---help---
The number of unique TLS elements. These can be accessed with
the user library functions tls_get_value() and tls_set_value()
and the OS interfaces tls_alloc() and tls_free().
NOTE that the special value of CONFIG_TLS_NELEM disables these
TLS interfaces.
endmenu # Thread Local Storage (TLS)