Ejemplo n.º 1
0
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;
}
Ejemplo n.º 4
0
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;
}