1 #include "elm_os.h" 2 #include "rtthread.h" 3 elm_os_set_tls(void * tls)4vg_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)20void * 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)34void 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