Files
2026-07-30 11:19:44 +05:30

96 lines
2.4 KiB
C

/* tlsLibP.h - TLS private interface header */
/*
* Copyright (c) 2006-2010 Wind River Systems, Inc.
*
* The right to copy, distribute, modify or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
/*
modification history
--------------------
01g,10sep10,jpb Added function pointer _func_tlsSizeGet.
01f,23jul10,gvm updates for 64-bit user side TLS ABI
01f,12jul10,gvm ICC implements __tls_varp
01e,14oct09,gvm Fix for defect WIND00104917
01e,23sep09,gvm adapted to LP64
01d,12apr08,mcm Using the same definition of TLS_VAR_ADDR for both compilers
01c,14jun07,jpb Changed definition of TLS_VAR_ADDR based on compiler
01b,25apr07,gls ported to user side
01a,19oct06,dbt written
*/
#ifndef __INCtlsLibPh
#define __INCtlsLibPh
#ifdef __cplusplus
extern "C" {
#endif
/* type declaration */
struct __tls__var;
/* variable declarations */
#ifdef _WRS_KERNEL
IMPORT UCHAR wrs_kernel_tls_data_start [];
IMPORT UCHAR wrs_kernel_tls_data_size [];
IMPORT UCHAR wrs_kernel_tls_vars_start [];
IMPORT UCHAR wrs_kernel_tls_vars_size [];
IMPORT UCHAR wrs_kernel_tls_data_align [];
#else
IMPORT UCHAR __wrs_rtp_tls_data_start [];
IMPORT UCHAR __wrs_rtp_tls_data_size [];
IMPORT UCHAR __wrs_rtp_tls_vars_start [];
IMPORT UCHAR __wrs_rtp_tls_vars_size [];
IMPORT UCHAR __wrs_rtp_tls_data_align [];
#endif
/* defines */
/* Get the pointer on a __thread variable structure given its name */
#if defined(__RTP__) && defined(_WRS_CONFIG_LP64)
#define TLS_VAR_ADDR(x) (&(x))
#else
#define TLS_VAR_ADDR(x) __tls_varp(&(x))
#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
#define __tls_varp __builtin___tls_varp
#endif /* __GNUC__ && !__INTEL_COMPILER */
#endif /* __RTP__ && _WRS_CONFIG_LP64 */
/* function declarations */
#if defined(__RTP__) && defined(_WRS_CONFIG_LP64)
extern void * tlsByTaskLookup (void * pTlsVar, TASK_ID tid);
#else
extern void * tlsByTaskLookup (struct __tls__var * pTlsVar,
TASK_ID tid);
#endif /* __RTP__ && _WRS_CONFIG_LP64 */
#ifdef _WRS_KERNEL
extern void tlsLibInit (void * tlsVarsAddr,
UINT32 tlsVarsSize,
void * tlsDataAddr,
UINT32 tlsDataSize,
UINT32 tlsDataAlignment);
extern void tlsLoadLibInit (void);
#endif /* _WRS_KERNEL */
/* function pointers */
#ifndef _WRS_KERNEL
extern int (*_func_tlsSizeGet)(void);
#endif /* !_WRS_KERNEL */
#ifdef __cplusplus
}
#endif
#endif /* __INCtlsLibPh */