DR_EXPORT void dr_client_main(client_id_t id, int argc, const char *argv[]) { uint i; dr_set_client_name("DynamoRIO Sample Client 'stats'", "http://dynamorio.org/issues"); my_id = id; /* Make it easy to tell by looking at the log which client executed. */ dr_log(NULL, LOG_ALL, 1, "Client 'stats' initializing\n"); if (!drmgr_init()) DR_ASSERT(false); drx_init(); stats = shared_memory_init(); memset(stats, 0, sizeof(stats)); stats->num_stats = NUM_STATS; stats->pid = dr_get_process_id(); for (i=0; i<NUM_STATS; i++) { strncpy(stats->names[i], stat_names[i], CLIENTSTAT_NAME_MAX_LEN); stats->names[i][CLIENTSTAT_NAME_MAX_LEN-1] = '\0'; } dr_register_exit_event(event_exit); if (!drmgr_register_bb_instrumentation_event(event_analyze_bb, event_insert_instrumentation, NULL)) DR_ASSERT(false); }
void drmemory_abort(void) { if (op_pause_at_assert) { char buf[64]; /* very useful to have the pid */ dr_snprintf(buf, BUFFER_SIZE_ELEMENTS(buf), "Dr. Memory is paused at an assert in pid=%d", dr_get_process_id()); wait_for_user(buf); } dr_abort(); }
/**************************************************************************** * Utility Functions */ static file_t log_file_create_helper(void *drcontext, const char *suffix, char *buf, size_t buf_els) { file_t log = drx_open_unique_appid_file(options.logdir, drcontext == NULL ? dr_get_process_id() : dr_get_thread_id(drcontext), "drcov", suffix, #ifndef WINDOWS DR_FILE_CLOSE_ON_FORK | #endif DR_FILE_ALLOW_LARGE, buf, buf_els); if (log != INVALID_FILE) { dr_log(drcontext, DR_LOG_ALL, 1, "drcov: log file is %s\n", buf); NOTIFY(1, "<created log file %s>\n", buf); } return log; }
static void open_log_file(void) { char buf[MAXIMUM_PATH]; if (strcmp(options.logdir, "-") == 0) outf = STDERR; else { outf = drx_open_unique_appid_file(options.logdir, dr_get_process_id(), "drstrace", "log", #ifndef WINDOWS DR_FILE_CLOSE_ON_FORK | #endif DR_FILE_ALLOW_LARGE, buf, BUFFER_SIZE_ELEMENTS(buf)); ASSERT(outf != INVALID_FILE, "failed to open log file"); ALERT(1, "<drstrace log file is %s>\n", buf); } }
DR_EXPORT void dr_init( client_id_t id ) { dr_printf( "In dr_init()\n" ); // Initialize extensions. drsym_error_t rc = drsym_init( 0 ); if( DRSYM_SUCCESS != rc ) { dr_printf( "drsym_init() failed: %i\n", rc ); exit( 1 ); } bool wrapInit = drwrap_init(); if( !wrapInit ) { dr_printf( "drwrap_init() failed\n" ); exit( 1 ); } // Set up output. char fileName[256]; unsigned int pid = (unsigned int)dr_get_process_id(); dr_snprintf( fileName, sizeof( fileName ), "objcount-%u.out", pid ); fileName[sizeof( fileName ) - 1] = 0; outFile = dr_open_file( fileName, DR_FILE_WRITE_OVERWRITE ); outMutex = dr_mutex_create(); // Set up hashtable. hashtable_init_ex( &wraps, // table 16, // num_bits HASH_INTPTR, // hashtype false, // str_dup false, // synch &free_wrap, // free_payload_func NULL, // hash_key_func NULL ); // cmp_key_func // Register for events. dr_register_module_load_event( onLoad ); dr_register_exit_event( onExit ); }