9ce03b1660
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()
58 lines
2.1 KiB
Plaintext
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)
|