37#ifndef _RTEMS_SCORE_TLS_H
38#define _RTEMS_SCORE_TLS_H
40#include <rtems/score/cpuimpl.h>
113 uint32_t generation_number;
119#if defined(__i386__) || defined(__x86_64__)
127#if CPU_SIZEOF_POINTER == 4 || defined(AARCH64_MULTILIB_ARCH_V8)
145static inline uintptr_t _TLS_Get_thread_control_block_area_size(
149#if CPU_THREAD_LOCAL_STORAGE_VARIANT == 11
152 alignment = (uintptr_t) config->
alignment;
176static inline void _TLS_Copy_and_clear(
201static inline void _TLS_Initialize_TCB_and_DTV(
207#if defined(__i386__) || defined(__x86_64__)
213 dtv->generation_number = 1;
227static inline void *_TLS_Initialize_area(
void *tls_area )
235#if CPU_THREAD_LOCAL_STORAGE_VARIANT == 11
238#if CPU_THREAD_LOCAL_STORAGE_VARIANT == 20
240 uintptr_t alignment_2;
244 alignment = (uintptr_t) config->
alignment;
246#
if defined(__i386__) || defined(__x86_64__)
250 tls_area = (
char *) tls_area +
sizeof( *dtv );
253#if CPU_THREAD_LOCAL_STORAGE_VARIANT == 10
255 RTEMS_ALIGN_UP( (uintptr_t) tls_area +
sizeof( *tcb ), alignment );
258#elif CPU_THREAD_LOCAL_STORAGE_VARIANT == 11
264#elif CPU_THREAD_LOCAL_STORAGE_VARIANT == 20
266 tls_area = (
void *)
RTEMS_ALIGN_UP( (uintptr_t) tls_area, alignment_2 );
267 size = (uintptr_t) config->
size;
273#error "unexpected CPU_THREAD_LOCAL_STORAGE_VARIANT value"
276 _TLS_Initialize_TCB_and_DTV(
tls_data, tcb, dtv );
277 _TLS_Copy_and_clear( config,
tls_data );
#define RTEMS_ALIGN_UP(_value, _alignment)
Aligns up the value to the alignment.
Definition: basedefs.h:141
const volatile TLS_Configuration _TLS_Configuration
Provides the TLS configuration.
Definition: tlsallocsize.c:67
uintptr_t _TLS_Get_allocation_size(void)
Gets the allocation size of the thread-local storage area in bytes.
Definition: tlsallocsize.c:78
Represents the TLS configuration.
Definition: tls.h:65
const char * size
This member is initialized to _TLS_Size.
Definition: tls.h:89
const char * alignment
This member is initialized to _TLS_Alignment.
Definition: tls.h:94
const char * data_begin
This member is initialized to _TLS_Data_begin.
Definition: tls.h:69
const char * bss_size
This member is initialized to _TLS_BSS_size.
Definition: tls.h:84
const char * bss_begin
This member is initialized to _TLS_BSS_begin.
Definition: tls.h:79
const char * data_size
This member is initialized to _TLS_Data_size.
Definition: tls.h:74
Definition: rtl-mdreloc-aarch64.c:86