44 lines
831 B
C

#include "elm_os.h"
#include "rtthread.h"
vg_lite_error_t elm_os_set_tls(void* tls)
{
if(tls == NULL)
return VG_LITE_INVALID_ARGUMENT;
rt_thread_t rt_TCB;
rt_TCB = rt_thread_self();
RT_ASSERT( rt_TCB != NULL );
rt_uint32_t * tls_ptr = (rt_uint32_t *)rt_TCB->user_data;
*(tls_ptr + 1) = (rt_uint32_t) tls;
return VG_LITE_SUCCESS;
}
void * elm_os_get_tls(void)
{
rt_thread_t rt_TCB;
void * pvReturn = NULL;
rt_TCB = rt_thread_self();
rt_uint32_t * tls_ptr = (rt_uint32_t *)rt_TCB->user_data;
pvReturn = (void *) *(tls_ptr + 1);
return pvReturn;
}
void elm_os_reset_tls(void)
{
rt_thread_t rt_TCB;
rt_TCB = rt_thread_self();
RT_ASSERT( rt_TCB != NULL );
rt_uint32_t * tls_ptr = (rt_uint32_t *)rt_TCB->user_data;
*(tls_ptr + 1) = NULL;
}