core/kernel_linux/clients/umbra/umbra.c
/* invocated on basic block building event */
invocated on basic block building event
invocated on basic block building event
dr_emit_flags_t
umbra_basic_block(void *drcontext, 
                  void *tag, 
                  instrlist_t *ilist,
                  bool  for_trace,
                  bool  translating)
{
    umbra_info_t *info = (umbra_info_t *)dr_get_tls_field(drcontext);
    basic_block_t *bb;
    if (proc_info.client.app_to_app_transformation) {
        proc_info.client.app_to_app_transformation(drcontext, info, tag, ilist,
                                                   for_trace);
    }
    if (info->stack_ref_cache == NULL) 
        add_stack_module(drcontext, info);
    bb = cfg_basic_block(drcontext, info, tag, ilist);
    instrument_basic_block(drcontext, info, bb, ilist,
                           for_trace);
    return DR_EMIT_STORE_TRANSLATIONS;
}
dr_emit_flags_t umbra_basic_block ( void * drcontext , void * tag , instrlist_t * ilist , bool for_trace , bool translating ) { umbra_info_t * info = ( umbra_info_t * ) dr_get_tls_field ( drcontext ) ; basic_block_t * bb ; if ( proc_info . client . app_to_app_transformation ) { proc_info . client . app_to_app_transformation ( drcontext , info , tag , ilist , for_trace ) ; } if ( info -> stack_ref_cache == NULL ) add_stack_module ( drcontext , info ) ; bb = cfg_basic_block ( drcontext , info , tag , ilist ) ; instrument_basic_block ( drcontext , info , bb , ilist , for_trace ) ; return DR_EMIT_STORE_TRANSLATIONS ; }
invocated on basic block building event
invocated on basic block building event
/* retrive the basic block data structure */ /* instrument the basic block code */ /* let DR store the translation information */