vdl-log.c
author Hajime Tazaki <tazaki@nict.go.jp>
Wed, 13 Feb 2013 22:37:34 +0900
changeset 651 9d7e2cd9633b
parent 590 6389fefc51c0
permissions -rw-r--r--
add a testcase to reproduce threaded dlclose crash (Bug 1513)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
#include "vdl-log.h"
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
#include "avprintf-cb.h"
140
3ed41fcb6bf2 make vdl-log.c build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
     3
#include "system.h"
3ed41fcb6bf2 make vdl-log.c build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
     4
#include "vdl-utils.h"
527
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
     5
#include "vdl-list.h"
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
348
4c5d4f1febcf decrease size of TODO
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 217
diff changeset
     7
uint32_t g_logging = 0;
4c5d4f1febcf decrease size of TODO
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 217
diff changeset
     8
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
static void avprintf_callback (char c, void *context)
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
{
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
  if (c != 0)
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
    {
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
      system_write (2, &c, 1);
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
    }
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
}
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
void vdl_log_set (const char *debug_str)
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
{
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
  VDL_LOG_FUNCTION ("debug=%s", debug_str);
590
6389fefc51c0 make mapping be more generic
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 527
diff changeset
    20
  g_logging = VDL_LOG_AST | VDL_LOG_PRINT | VDL_LOG_ERR;
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
  if (debug_str == 0)
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
    {
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
      return;
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
    }
527
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    25
  struct VdlList *list = vdl_utils_strsplit (debug_str, ':');
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    26
  void **cur;
217
5a8af5ba7033 make sure logging is initialized correctly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 140
diff changeset
    27
  uint32_t logging = 0;
527
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    28
  for (cur = vdl_list_begin (list); 
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    29
       cur != vdl_list_end (list); 
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    30
       cur = vdl_list_next (cur))
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
    {
527
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    32
      if (vdl_utils_strisequal (*cur, "debug"))
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
	{
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
	  logging |= VDL_LOG_DBG;
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
	}
527
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    36
      else if (vdl_utils_strisequal (*cur, "function"))
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
	{
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
	  logging |= VDL_LOG_FUNC;
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
	}
527
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    40
      else if (vdl_utils_strisequal (*cur, "error"))
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
	{
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
	  logging |= VDL_LOG_ERR;
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
	}
527
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    44
      else if (vdl_utils_strisequal (*cur, "assert"))
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
	{
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
	  logging |= VDL_LOG_AST;
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
	}
527
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    48
      else if (vdl_utils_strisequal (*cur, "symbol-fail"))
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
	{
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
	  logging |= VDL_LOG_SYM_FAIL;
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
	}
527
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    52
      else if (vdl_utils_strisequal (*cur, "symbol-ok"))
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
	{
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
	  logging |= VDL_LOG_SYM_OK;
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
	}
527
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    56
      else if (vdl_utils_strisequal (*cur, "reloc"))
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
	{
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
	  logging |= VDL_LOG_REL;
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
	}
527
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    60
      else if (vdl_utils_strisequal (*cur, "help"))
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
	{
527
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    62
	  VDL_LOG_ERROR ("Available logging levels: debug, "
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    63
			 "function, error, assert, symbol-fail, symbol-ok, reloc\n");
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
	}
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
    }
348
4c5d4f1febcf decrease size of TODO
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 217
diff changeset
    66
  g_logging |= logging;
527
012d45aa2432 get rid of VdlStringList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 367
diff changeset
    67
  vdl_utils_str_list_delete (list);
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
}
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
140
3ed41fcb6bf2 make vdl-log.c build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
    72
void vdl_log_printf (enum VdlLog log, const char *str, ...)
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
{
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
  va_list list;
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
  va_start (list, str);
348
4c5d4f1febcf decrease size of TODO
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 217
diff changeset
    76
  if (g_logging & log)
138
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
    {
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
      avprintf_cb (avprintf_callback, 0, str, list);
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
    }
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
  va_end (list);
345105f66f3d introduce utils prefix, split logging.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
}