void vt_memhook_init() { uint32_t fid; uint32_t gid; #if (defined(VT_MT) || defined(VT_HYB) || defined(VT_JAVA)) vt_error_msg("Memory tracing by GNU C malloc-hooks for threaded application " "not yet supported"); #endif /* VT_MT || VT_HYB || VT_JAVA */ if( vt_memhook_is_initialized ) return; vt_malloc_hook_org = __malloc_hook; vt_realloc_hook_org = __realloc_hook; vt_free_hook_org = __free_hook; /* define source */ fid = vt_def_scl_file(VT_CURRENT_THREAD, "MEM"); /* define regions */ memhook_regid[MEMHOOK_REG_MALLOC] = vt_def_region(VT_CURRENT_THREAD, "malloc", fid, VT_NO_LNO, VT_NO_LNO, NULL, VT_MEMORY); memhook_regid[MEMHOOK_REG_REALLOC] = vt_def_region(VT_CURRENT_THREAD, "realloc", fid, VT_NO_LNO, VT_NO_LNO, NULL, VT_MEMORY); memhook_regid[MEMHOOK_REG_FREE] = vt_def_region(VT_CURRENT_THREAD, "free", fid, VT_NO_LNO, VT_NO_LNO, NULL, VT_MEMORY); /* define markers, if necessary */ if( (memalloc_marker = vt_env_memtrace_marker()) ) { memalloc_mid[MEMHOOK_MARK_ALLOC] = vt_def_marker(VT_CURRENT_THREAD, "Memory Allocation", VT_MARKER_HINT); memalloc_mid[MEMHOOK_MARK_FREE] = vt_def_marker(VT_CURRENT_THREAD, "Memory Deallocation", VT_MARKER_HINT); } /* define counter group */ gid = vt_def_counter_group(VT_CURRENT_THREAD, "Memory"); /* define counter */ memalloc_cid = vt_def_counter(VT_CURRENT_THREAD, "MEM_ALLOC", VT_CNTR_ABS | VT_CNTR_NEXT, gid, "Bytes"); vt_memhook_is_initialized = 1; }
void vt_mallocwrap_init() { /* define memory related counter group */ mallocwrap_counter_group_id = vt_def_counter_group(VT_CURRENT_THREAD, "Memory"); /* define memory allocation counter */ mallocwrap_counter_id = vt_def_counter(VT_CURRENT_THREAD, "Memory Allocation", "Bytes", VT_CNTR_ABS | VT_CNTR_NEXT, mallocwrap_counter_group_id, 0); /* define memory (de)allocation markers, if desired (env. VT_MEMTRACE_MARKER) */ if( (mallocwrap_write_markers = vt_env_memtrace_marker()) ) { mallocwrap_marker_alloc_id = vt_def_marker(VT_CURRENT_THREAD, "Memory Allocation", VT_MARKER_HINT); mallocwrap_marker_free_id = vt_def_marker(VT_CURRENT_THREAD, "Memory Deallocation", VT_MARKER_HINT); } }
unsigned int VT_User_marker_def__(const char* mname, int mtype) { uint32_t mid; uint32_t _mtype = VT_MARKER_UNKNOWN; VT_INIT; VT_SUSPEND_MALLOC_TRACING(VT_CURRENT_THREAD); switch(mtype) { case VT_MARKER_TYPE_ERROR: { _mtype = VT_MARKER_ERROR; break; } case VT_MARKER_TYPE_WARNING: { _mtype = VT_MARKER_WARNING; break; } case VT_MARKER_TYPE_HINT: { _mtype = VT_MARKER_HINT; break; } default: { vt_error_msg("Unknown marker type %i", mtype); break; } } #if (defined(VT_MT) || defined(VT_HYB)) VTTHRD_LOCK_IDS(); #endif mid = vt_def_marker(VT_CURRENT_THREAD, mname, _mtype); #if (defined(VT_MT) || defined(VT_HYB)) VTTHRD_UNLOCK_IDS(); #endif VT_RESUME_MALLOC_TRACING(VT_CURRENT_THREAD); return mid; }
unsigned int VT_User_marker_def__(const char* mname, int mtype) { uint32_t mid; uint32_t mtype_otf = OTF_MARKER_TYPE_UNKNOWN; VT_INIT; VT_MEMHOOKS_OFF(); switch(mtype) { case VT_MARKER_TYPE_ERROR: { mtype_otf = OTF_MARKER_TYPE_ERROR; break; } case VT_MARKER_TYPE_WARNING: { mtype_otf = OTF_MARKER_TYPE_WARNING; break; } case VT_MARKER_TYPE_HINT: { mtype_otf = OTF_MARKER_TYPE_HINT; break; } default: { vt_error_msg("Unknown marker type %i", mtype); break; } } #if (defined(VT_MT) || defined(VT_HYB)) VTTHRD_LOCK_IDS(); #endif mid = (uint32_t)vt_def_marker(mname, mtype_otf); #if (defined(VT_MT) || defined(VT_HYB)) VTTHRD_UNLOCK_IDS(); #endif VT_MEMHOOKS_ON(); return mid; }