Ejemplo n.º 1
0
static
dr_emit_flags_t bb_event2(void *dcontext, void *tag, instrlist_t *bb,
                          bool for_trace, bool translating)
{
    inc_count_second(EVENT_BB_2);
    if (!dr_unregister_bb_event(bb_event2))
        dr_fprintf(STDERR, "unregister failed!\n");
    return DR_EMIT_DEFAULT;
}
Ejemplo n.º 2
0
static bool
drmgr_bb_cb_remove(cb_entry_t **list,
                   drmgr_xform_cb_t xform_func,
                   drmgr_analysis_cb_t analysis_func,
                   /* for quartet */
                   drmgr_app2app_ex_cb_t app2app_ex_func,
                   drmgr_ilist_ex_cb_t analysis_ex_func,
                   drmgr_ilist_ex_cb_t instru2instru_ex_func)
{
    bool res = false;
    cb_entry_t *e, *prev_e;
    ASSERT(list != NULL, "invalid internal params");
    ASSERT((xform_func != NULL && analysis_func == NULL) ||
           (xform_func == NULL && analysis_func != NULL), "invalid internal params");

    dr_rwlock_write_lock(bb_cb_lock);

    for (prev_e = NULL, e = *list; e != NULL; prev_e = e, e = e->next) {
        if ((xform_func != NULL && xform_func == e->cb.xform_cb) ||
            (analysis_func != NULL && analysis_func == e->cb.pair.analysis_cb) ||
            (app2app_ex_func != NULL && app2app_ex_func == e->cb.app2app_ex_cb) ||
            (analysis_ex_func != NULL &&
             analysis_ex_func == e->cb.pair_ex.analysis_ex_cb) ||
            (instru2instru_ex_func != NULL &&
             instru2instru_ex_func == e->cb.instru2instru_ex_cb))
            break;
    }
    if (e != NULL) {
        res = true;
        if (prev_e == NULL)
            *list = e->next;
        else
            prev_e->next = e->next;
        dr_global_free(e, sizeof(*e));

        if (e->has_quartet)
            quartet_count--;
        else if (xform_func == NULL)
            pair_count--;

        bb_event_count--;
        if (bb_event_count == 0)
            dr_unregister_bb_event(drmgr_bb_event);
    }

    dr_rwlock_write_unlock(bb_cb_lock);
    return res;
}
Ejemplo n.º 3
0
void dr_exit() {
  dr_fprintf(STDERR, "info: stopping dtrace..\n");

  tb_delete(trace_buffer);
  dr_mutex_destroy(trace_buffer_lock);

  dr_close_file(trace_file);
  dr_mutex_destroy(trace_file_lock);

  hashtable_delete(&tags);
  dr_mutex_destroy(tags_lock);

  dr_unregister_exit_event(&dr_exit);
  dr_unregister_thread_init_event(&handle_thread_init);
  dr_unregister_thread_exit_event(&handle_thread_exit);
  dr_unregister_bb_event(&handle_bb);
  dr_unregister_trace_event(&handle_trace);
  dr_unregister_delete_event(&handle_delete);
  dr_unregister_signal_event(&handle_signal);
  dr_unregister_restore_state_event(&handle_restore_state);
}
Ejemplo n.º 4
0
static
void unregister()
{
    dr_unregister_bb_event(bb_event);
}