28 static int vmi_log_level = -1;
29 static int vmi_warn_level = -1;
31 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
35 vmi_log_level = level;
43 vmi_warn_level = level;
69 vmi_log_flags[
LAB_LIB] |= flags;
77 vmi_log_flags[
LAB_XML] |= flags;
79 vmi_log_flags[
LAB_ANL] |= flags;
93 while ((flag = strtok_r(!saveptr ? flaglist : NULL,separator,&saveptr))) {
105 char *saveptr = NULL;
112 while ((flag = strtok_r(!saveptr ? flaglist : NULL,separator,&saveptr))) {
124 static char *log_flag_stringmap_none[] = {
"NONE",NULL };
125 static char *log_flag_stringmap_lib[] = {
126 "CLMATCH",
"CLRANGE",
"RFILTER",
"WAITPIPE",
"EVLOOP",
"MONITOR",
"ROP",
"CFI",
129 static char *log_flag_stringmap_debug[] = {
130 "DFILE",
"SYMBOL",
"SCOPE",
"LOC",
"LOOKUP",
"DWARF",
"DWARFATTR",
131 "DWARFSOPS",
"DWARFOPS",
"CFA",
"OTHER",
"ELF",
"BFILE",NULL
133 static char *log_flag_stringmap_target[] = {
134 "TARGET",
"SPACE",
"REGION",
"LOOKUP",
"LOC",
"OTHER",
"SYMBOL",
"MEMCACHE",
"UNW",
135 "LUP",
"XV",
"OSP",
"PHP",
"GDB",
"DISASM",
"THREAD",
"OS",
"PROCESS",
"APPLICATION",
138 static char *log_flag_stringmap_probe[] = {
139 "PROBE",
"PROBEPOINT",
"ACTION",NULL
141 static char *log_flag_stringmap_xml[] = {
142 "XML",
"RPC",
"SVC",
"PROXYREQ",NULL
144 static char *log_flag_stringmap_anl[] = {
148 static char **log_flag_stringmap[32] = {
149 log_flag_stringmap_none,
150 log_flag_stringmap_lib,
151 log_flag_stringmap_debug,
152 log_flag_stringmap_target,
153 log_flag_stringmap_probe,
154 log_flag_stringmap_xml,
155 log_flag_stringmap_anl,
156 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
157 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
165 log_flag_stringmap[
LAB_USER] = names;
176 char **subarray = NULL;
180 if (strcmp(
"ALL",flag) == 0) {
187 else if (strcmp(
"L_ALL",flag) == 0) {
194 else if (strcmp(
"D_ALL",flag) == 0) {
201 else if (strcmp(
"T_ALL",flag) == 0) {
208 else if (strcmp(
"P_ALL",flag) == 0) {
215 else if (strcmp(
"X_ALL",flag) == 0) {
222 else if (strcmp(
"A_ALL",flag) == 0) {
229 else if (strcmp(
"U_ALL",flag) == 0) {
237 if ((_idx = index(flag,
'_'))) {
246 else if (*_area ==
'D')
248 else if (*_area ==
'T')
250 else if (*_area ==
'P')
252 else if (*_area ==
'X')
254 else if (*_area ==
'A')
256 else if (*_area ==
'U')
259 verror(
"bad flag '%s': no such area prefix '%s'!\n",flag,_area);
264 subarray = log_flag_stringmap[areabits];
267 verror(
"bad flag '%s': area '%s' has no flags!\n",flag,_area);
274 while ((_rflag = subarray++) && *_rflag) {
275 if (strcmp(_flag,*_rflag) == 0) {
283 verror(
"area '%s' has no flag '%s'!\n",_area,_flag);
289 *areaval = 1 << areabits;
299 subarray = log_flag_stringmap[areabits];
304 verror(
"bad flag '%s': area '%s' has no flags!\n",flag,_area);
311 while ((_rflag = ++subarray) && *_rflag) {
312 if (strcmp(_flag,*_rflag) == 0) {
320 verror(
"area '%s' has no flag '%s'!\n",_area,_flag);
326 *areaval = 1 << areabits;
336 if (vmi_log_level < level)
358 if (vmi_warn_level < level)
383 va_start(args, format);
384 vfprintf(stderr, format, args);
393 va_start(args, format);
394 vfprintf(stderr, format, args);
403 {
"debug",
'd',
"LEVEL",OPTION_ARG_OPTIONAL,
404 "Set/increase the debugging level.",-2 },
406 {
"log-flags",
'l',
"FLAG,FLAG,...",0,
"Set the debugging flags",-2 },
407 {
"warn",
'w',
"LEVEL",OPTION_ARG_OPTIONAL,
408 "Set/increase the warning level.",-2 },
414 NULL,NULL,NULL,NULL,NULL };
422 return ARGP_ERR_UNKNOWN;
424 case ARGP_KEY_NO_ARGS:
425 case ARGP_KEY_SUCCESS:
436 vmi_log_level = (int)strtol(arg,&endptr,0);
437 if (errno || endptr == arg) {
443 while (*arg !=
'\0') {
456 vmi_warn_level = (int)strtol(arg,&endptr,0);
457 if (errno || endptr == arg) {
463 while (*arg !=
'\0') {
475 verror(
"bad log level flag in '%s'!\n",arg);
481 return ARGP_ERR_UNKNOWN;
void vmi_inc_warn_level(void)
int vmi_log_get_flag_val(char *flag, log_areas_t *areaval, log_flags_t *flagval)
int vdebug_is_on(int level, log_areas_t areas, log_flags_t flags)
void _vmi_debug(int level, log_areas_t areas, log_flags_t flags, char *format,...)
static uint64_t unsigned int i
int vwarn_is_on(int level, log_areas_t areas, log_flags_t flags)
void vmi_set_warn_level(int level)
void vmi_set_log_level(int level)
#define verror(format,...)
int vmi_add_log_area_flaglist(char *flaglist, char *separator)
void vmi_add_log_area_flags(log_areas_t areas, log_flags_t flags)
int vmi_set_log_area_flaglist(char *flaglist, char *separator)
enum log_areas log_areas_t
void vmi_inc_log_level(void)
error_t log_argp_parse_opt(int key, char *arg, struct argp_state *state)
enum log_area_bits log_area_bits_t
void vmi_set_user_area_flags(char **names)
void _vmi_warn(int level, log_areas_t areas, log_flags_t flags, char *format,...)
struct argp_option log_argp_opts[]
void vmi_set_log_area_flags(log_areas_t areas, log_flags_t flags)