core/kernel_linux/clients/umbra/umbra.c
/* finalize thread private data structure for umbra */
finalize thread private data structure for umbra
finalize thread private data structure for umbra
void
umbra_thread_exit(void *drcontext)
{
    umbra_info_t *info = 
        (umbra_info_t *)dr_get_tls_field(drcontext);
    print_stat_count(drcontext, info);
    instrument_thread_exit(drcontext, info);
    analyzer_thread_exit  (drcontext, info);
    shadow_thread_exit    (drcontext, info);
    cfg_thread_exit       (drcontext, info);
    if (proc_info.client.thread_exit != NULL)
        proc_info.client.thread_exit(drcontext, info);
    table_thread_exit     (drcontext, info);
    umbra_info_exit       (drcontext, info);
    dr_set_tls_field      (drcontext, NULL);
    dr_thread_free(drcontext, info, sizeof(umbra_info_t));
#ifdef LINUX_KERNEL
    __get_cpu_var(cpu_umbra_info) = NULL;
#endif
}
void umbra_thread_exit ( void * drcontext ) { umbra_info_t * info = ( umbra_info_t * ) dr_get_tls_field ( drcontext ) ; print_stat_count ( drcontext , info ) ; instrument_thread_exit ( drcontext , info ) ; analyzer_thread_exit ( drcontext , info ) ; shadow_thread_exit ( drcontext , info ) ; cfg_thread_exit ( drcontext , info ) ; if ( proc_info . client . thread_exit != NULL ) proc_info . client . thread_exit ( drcontext , info ) ; table_thread_exit ( drcontext , info ) ; umbra_info_exit ( drcontext , info ) ; dr_set_tls_field ( drcontext , NULL ) ; dr_thread_free ( drcontext , info , sizeof ( umbra_info_t ) ) ; #ifdef LINUX_KERNEL __get_cpu_var ( cpu_umbra_info ) = NULL ; #endif }
finalize thread private data structure for umbra
finalize thread private data structure for umbra