static void event_exit(void) { file_t f; /* Display the results! */ char msg[512]; int len; len = dr_snprintf(msg, sizeof(msg)/sizeof(msg[0]), "Instrumentation results:\n" " saw %" STAT_FORMAT_CODE " flops\n", stats->num_flops); DR_ASSERT(len > 0); msg[sizeof(msg)/sizeof(msg[0])-1] = '\0'; #ifdef SHOW_RESULTS DISPLAY_STRING(msg); #endif /* SHOW_RESULTS */ /* On Windows we need an absolute path so we place it in * the same directory as our library. */ f = log_file_open(my_id, NULL, NULL /* client lib path */, "stats", 0); DR_ASSERT(f != INVALID_FILE); dr_fprintf(f, "%s\n", msg); dr_close_file(f); shared_memory_exit(); drx_exit(); if (!drmgr_unregister_bb_instrumentation_event(event_analyze_bb)) DR_ASSERT(false); drmgr_exit(); }
static void event_exit(void) { drx_exit(); drreg_exit(); drmgr_exit(); CHECK(counterB == 3 * counterA, "counter inc messed up"); dr_fprintf(STDERR, "event_exit\n"); }
static void event_exit(void) { if (!drmgr_unregister_thread_init_event(event_thread_init) || !drmgr_unregister_bb_insertion_event(event_app_instruction) || drreg_exit() != DRREG_SUCCESS) DR_ASSERT(false); drx_buf_free(buf); drmgr_exit(); drx_exit(); }
static void exit_event(void) { if (outf != STDERR) dr_close_file(outf); if (drsys_exit() != DRMF_SUCCESS) ASSERT(false, "drsys failed to exit"); drsym_exit(); drx_exit(); drmgr_exit(); hashtable_delete(&nconsts_table); }
static void event_exit(void) { if (!drmgr_unregister_tls_field(tls_idx) || !drmgr_unregister_thread_init_event(event_thread_init) || !drmgr_unregister_thread_exit_event(event_thread_exit) || !drmgr_unregister_bb_app2app_event(event_bb_app2app) || !drmgr_unregister_bb_insertion_event(event_app_instruction)) DR_ASSERT(false); drx_buf_free(write_buffer); drx_buf_free(trace_buffer); drutil_exit(); drreg_exit(); drmgr_exit(); drx_exit(); }
static void event_exit(void) { /* we are supposed to have faulted NUM_ITER times per thread, plus 2 more * because the callback is called on thread_exit(). Finally, two more for * drx_buf_insert_buf_memcpy(). */ CHECK(num_faults == NUM_ITER * 2 + 2 + 2, "the number of faults don't match up"); if (!drmgr_unregister_bb_insertion_event(event_app_instruction)) CHECK(false, "exit failed"); drx_buf_free(circular_fast); drx_buf_free(circular_slow); drx_buf_free(trace); drmgr_unregister_thread_init_event(event_thread_init); drmgr_exit(); drx_exit(); }
drcovlib_status_t drcovlib_exit(void) { int count = dr_atomic_add32_return_sum(&drcovlib_init_count, -1); if (count != 0) return DRCOVLIB_SUCCESS; if (!drcov_per_thread) { dump_drcov_data(NULL, global_data); global_data_destroy(global_data); } /* destroy module table */ drmodtrack_exit(); drmgr_unregister_tls_field(tls_idx); drx_exit(); drmgr_exit(); return DRCOVLIB_SUCCESS; }
static void event_exit(void) { int i; char msg[512]; int len; int j; uint64 xmod_xfer = 0; uint64 self_xfer = 0; for (i = 0; i < num_mods; i++) { dr_fprintf(logfile, "module %3d: %s\n", i, dr_module_preferred_name(mod_array[i].info) == NULL ? "<unknown>" : dr_module_preferred_name(mod_array[i].info)); dr_fprintf(logfile, "%20llu instruction executed\n", mod_cnt[i]); } if (mod_cnt[UNKNOW_MODULE_IDX] != 0) { dr_fprintf(logfile, "unknown modules:\n%20llu instruction executed\n", mod_cnt[UNKNOW_MODULE_IDX]); } for (i = 0; i < MAX_NUM_MODULES; i++) { for (j = 0; j < num_mods; j++) { if (xfer_cnt[i][j] != 0) { dr_fprintf(logfile, "mod %3d => mod %3d: %8u\n", i, j, xfer_cnt[i][j]); if (i == j) self_xfer += xfer_cnt[i][j]; else xmod_xfer += xfer_cnt[i][j]; } } } len = dr_snprintf(msg, sizeof(msg)/sizeof(msg[0]), "Instrumentation results:\n" "\t%10llu instructions executed\n" "\t%10llu (%2.3f%%) cross module indirect branches\n" "\t%10llu (%2.3f%%) intra-module indirect branches\n", ins_count, xmod_xfer, 100*(float)xmod_xfer/ins_count, self_xfer, 100*(float)self_xfer/ins_count); DR_ASSERT(len > 0); NULL_TERMINATE_BUFFER(msg); #ifdef SHOW_RESULTS DISPLAY_STRING(msg); #endif /* SHOW_RESULTS */ dr_fprintf(logfile, "%s\n", msg); dr_mutex_lock(mod_lock); for (i = 0; i < num_mods; i++) { DR_ASSERT(mod_array[i].info != NULL); dr_free_module_data(mod_array[i].info); } dr_mutex_unlock(mod_lock); dr_mutex_destroy(mod_lock); log_file_close(logfile); drx_exit(); if (!drmgr_unregister_bb_instrumentation_event(event_analyze_bb) || !drmgr_unregister_module_load_event(event_module_load) || !drmgr_unregister_module_unload_event(event_module_unload) || drreg_exit() != DRREG_SUCCESS) DR_ASSERT(false); drmgr_exit(); }