3 * Low-level TLS support
6 * Rodrigo Kumpera (kumpera@gmail.com)
8 * Copyright 2011 Novell, Inc (http://www.novell.com)
9 * Copyright 2011 Xamarin, Inc (http://www.xamarin.com)
10 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
13 #ifndef __MONO_TLS_INLINE_H__
14 #define __MONO_TLS_INLINE_H__
19 * Gets the tls offset associated with the key. This offset is set at key
20 * initialization (at runtime). Certain targets can implement computing
21 * this offset and using it at runtime for fast inlined tls access.
25 mono_tls_get_tls_offset (MonoTlsKey key
)
27 g_assert (mono_tls_offsets
[key
]);
28 return mono_tls_offsets
[key
];
31 // Casts on getters are for the !MONO_KEYWORD_THREAD case.
33 /* Getters for each tls key */
35 MonoInternalThread
*mono_tls_get_thread (void)
37 return (MonoInternalThread
*)MONO_TLS_GET_VALUE (mono_tls_thread
, mono_tls_key_thread
);
40 #define mono_get_jit_tls mono_tls_get_jit_tls
43 MonoJitTlsData
*mono_tls_get_jit_tls (void)
45 return (MonoJitTlsData
*)MONO_TLS_GET_VALUE (mono_tls_jit_tls
, mono_tls_key_jit_tls
);
49 MonoDomain
*mono_tls_get_domain (void)
51 return (MonoDomain
*)MONO_TLS_GET_VALUE (mono_tls_domain
, mono_tls_key_domain
);
55 SgenThreadInfo
*mono_tls_get_sgen_thread_info (void)
57 return (SgenThreadInfo
*)MONO_TLS_GET_VALUE (mono_tls_sgen_thread_info
, mono_tls_key_sgen_thread_info
);
60 #define mono_get_lmf_addr mono_tls_get_lmf_addr
63 MonoLMF
**mono_tls_get_lmf_addr (void)
65 return (MonoLMF
**)MONO_TLS_GET_VALUE (mono_tls_lmf_addr
, mono_tls_key_lmf_addr
);
68 /* Setters for each tls key */
70 void mono_tls_set_thread (MonoInternalThread
*value
)
72 MONO_TLS_SET_VALUE (mono_tls_thread
, mono_tls_key_thread
, value
);
76 void mono_tls_set_jit_tls (MonoJitTlsData
*value
)
78 MONO_TLS_SET_VALUE (mono_tls_jit_tls
, mono_tls_key_jit_tls
, value
);
82 void mono_tls_set_domain (MonoDomain
*value
)
84 MONO_TLS_SET_VALUE (mono_tls_domain
, mono_tls_key_domain
, value
);
88 void mono_tls_set_sgen_thread_info (SgenThreadInfo
*value
)
90 MONO_TLS_SET_VALUE (mono_tls_sgen_thread_info
, mono_tls_key_sgen_thread_info
, value
);
94 void mono_tls_set_lmf_addr (MonoLMF
**value
)
96 MONO_TLS_SET_VALUE (mono_tls_lmf_addr
, mono_tls_key_lmf_addr
, value
);
99 #endif /* __MONO_TLS_INLINE_H__ */