1 #include "elm_os.h"
2 #include "rtthread.h"
3 
elm_os_set_tls(void * tls)4 vg_lite_error_t elm_os_set_tls(void* tls)
5 {
6     if(tls == NULL)
7         return VG_LITE_INVALID_ARGUMENT;
8 
9     rt_thread_t rt_TCB;
10 
11     rt_TCB = rt_thread_self();
12     RT_ASSERT( rt_TCB != NULL );
13 
14 
15     rt_uint32_t * tls_ptr = (rt_uint32_t *)rt_TCB->user_data;
16     *(tls_ptr + 1) = (rt_uint32_t) tls;
17         return VG_LITE_SUCCESS;
18 }
19 
elm_os_get_tls(void)20 void * elm_os_get_tls(void)
21 {
22     rt_thread_t rt_TCB;
23 
24     void * pvReturn = NULL;
25 
26     rt_TCB = rt_thread_self();
27 
28     rt_uint32_t * tls_ptr = (rt_uint32_t *)rt_TCB->user_data;
29     pvReturn = (void *) *(tls_ptr + 1);
30 
31     return pvReturn;
32 }
33 
elm_os_reset_tls(void)34 void elm_os_reset_tls(void)
35 {
36     rt_thread_t rt_TCB;
37 
38     rt_TCB = rt_thread_self();
39     RT_ASSERT( rt_TCB != NULL );
40 
41     rt_uint32_t * tls_ptr = (rt_uint32_t *)rt_TCB->user_data;
42     *(tls_ptr + 1) = NULL;
43 }
44