void * mycalloc(size_t nmemb, size_t bytes) { void *r = mymalloc(bytes * nmemb); memset(r, 0, bytes * nmemb); if(r == NULL) { memtrace(); tracelog(TRACE_NO_PROP, TRACE_ERROR, "MEMORY", "calloc(%d,%d) failed", (int)nmemb, (int)bytes); errno = ENOMEM; } return r; }
static void event_thread_exit(void *drcontext) { per_thread_t *data; memtrace(drcontext); /* dump any remaining buffer entries */ data = drmgr_get_tls_field(drcontext, tls_idx); dr_mutex_lock(mutex); num_refs += data->num_refs; dr_mutex_unlock(mutex); log_stream_close(data->logf); /* closes fd too */ dr_raw_mem_free(data->buf_base, MEM_BUF_SIZE); dr_thread_free(drcontext, data, sizeof(per_thread_t)); }
void *memalign(size_t align, size_t bytes) { void *r; if(bytes == 0) return NULL; hts_lwmutex_lock(&mutex); r = tlsf_memalign(gpool, align, bytes); hts_lwmutex_unlock(&mutex); if(r == NULL) { memtrace(); panic("OOM: memalign(%d, %d)", (int)align, (int)bytes); } return r; }
void * myrealloc(void *ptr, size_t bytes) { hts_lwmutex_lock(&mutex); void *r = tlsf_realloc(gpool, ptr, bytes); hts_lwmutex_unlock(&mutex); if(r == NULL) { memtrace(); tracelog(TRACE_NO_PROP, TRACE_ERROR, "MEMORY", "realloc(%d) failed", (int)bytes); errno = ENOMEM; } return r; }
void *malloc(size_t bytes) { void *r; if(bytes == 0) return NULL; hts_lwmutex_lock(&mutex); r = tlsf_malloc(gpool, bytes); hts_lwmutex_unlock(&mutex); if(r == NULL) { memtrace(); panic("OOM: malloc(%d)", (int)bytes); } return r; }
void *mymemalign(size_t align, size_t bytes) { if(bytes == 0) return NULL; hts_lwmutex_lock(&mutex); void *r = tlsf_memalign(gpool, align, bytes); hts_lwmutex_unlock(&mutex); if(r == NULL) { memtrace(); tracelog(TRACE_NO_PROP, TRACE_ERROR, "MEMORY", "memalign(%d,%d) failed", (int)align, (int)bytes); errno = ENOMEM; } return r; }
void *realloc(void *ptr, size_t bytes) { void *r; if(bytes == 0) { free(ptr); return NULL; } hts_lwmutex_lock(&mutex); r = tlsf_realloc(gpool, ptr, bytes); hts_lwmutex_unlock(&mutex); if(r == NULL) { memtrace(); panic("OOM: realloc(%p, %d)", ptr, (int)bytes); } return r; }
void * mymalloc(size_t bytes) { if(bytes == 0) return NULL; hts_mutex_lock(&mutex); void *r = tlsf_malloc(gpool, bytes); hts_mutex_unlock(&mutex); if(r == NULL) { memtrace(); trace(TRACE_NO_PROP, TRACE_ERROR, "MEMORY", "malloc(%d) failed", (int)bytes); errno = ENOMEM; } return r; }
void memtrace_thread_exit(void *drcontext) { per_thread_t *data; memtrace(drcontext); data = drmgr_get_tls_field(drcontext, tls_index); dr_mutex_lock(mutex); num_refs += data->num_refs; dr_mutex_unlock(mutex); if (log_mode){ dr_close_file(data->logfile); } dr_close_file(data->outfile); dr_thread_free(drcontext, data->buf_base, MEM_BUF_SIZE); dr_thread_free(drcontext, data, sizeof(per_thread_t)); DEBUG_PRINT("%s - exiting thread done %d\n", ins_pass_name, dr_get_thread_id(drcontext)); }
static void event_thread_exit(void *drcontext) { per_thread_t *data; memtrace(drcontext); data = drmgr_get_tls_field(drcontext, tls_index); dr_mutex_lock(mutex); num_refs += data->num_refs; dr_mutex_unlock(mutex); #ifdef OUTPUT_TEXT log_stream_close(data->logf); /* closes fd too */ #else log_file_close(data->log); #endif dr_thread_free(drcontext, data->buf_base, MEM_BUF_SIZE); dr_thread_free(drcontext, data, sizeof(per_thread_t)); }
/* clean_call dumps the memory reference info to the log file */ static void clean_call(void) { void *drcontext = dr_get_current_drcontext(); memtrace(drcontext); }