xref: /openbmc/linux/tools/perf/util/debug.c (revision 8f28827a)
1cd84c2acSFrederic Weisbecker /* For general debugging purposes */
2cd84c2acSFrederic Weisbecker 
3cd84c2acSFrederic Weisbecker #include "../perf.h"
48f28827aSFrederic Weisbecker 
5cd84c2acSFrederic Weisbecker #include <string.h>
6cd84c2acSFrederic Weisbecker #include <stdarg.h>
7cd84c2acSFrederic Weisbecker #include <stdio.h>
8cd84c2acSFrederic Weisbecker 
98f28827aSFrederic Weisbecker #include "color.h"
108f28827aSFrederic Weisbecker #include "event.h"
118f28827aSFrederic Weisbecker #include "debug.h"
128f28827aSFrederic Weisbecker 
13cd84c2acSFrederic Weisbecker int verbose = 0;
142cec19d9SFrederic Weisbecker int dump_trace = 0;
15cd84c2acSFrederic Weisbecker 
16cd84c2acSFrederic Weisbecker int eprintf(const char *fmt, ...)
17cd84c2acSFrederic Weisbecker {
18cd84c2acSFrederic Weisbecker 	va_list args;
19cd84c2acSFrederic Weisbecker 	int ret = 0;
20cd84c2acSFrederic Weisbecker 
21cd84c2acSFrederic Weisbecker 	if (verbose) {
22cd84c2acSFrederic Weisbecker 		va_start(args, fmt);
23cd84c2acSFrederic Weisbecker 		ret = vfprintf(stderr, fmt, args);
24cd84c2acSFrederic Weisbecker 		va_end(args);
25cd84c2acSFrederic Weisbecker 	}
26cd84c2acSFrederic Weisbecker 
27cd84c2acSFrederic Weisbecker 	return ret;
28cd84c2acSFrederic Weisbecker }
292cec19d9SFrederic Weisbecker 
302cec19d9SFrederic Weisbecker int dump_printf(const char *fmt, ...)
312cec19d9SFrederic Weisbecker {
322cec19d9SFrederic Weisbecker 	va_list args;
332cec19d9SFrederic Weisbecker 	int ret = 0;
342cec19d9SFrederic Weisbecker 
352cec19d9SFrederic Weisbecker 	if (dump_trace) {
362cec19d9SFrederic Weisbecker 		va_start(args, fmt);
372cec19d9SFrederic Weisbecker 		ret = vprintf(fmt, args);
382cec19d9SFrederic Weisbecker 		va_end(args);
392cec19d9SFrederic Weisbecker 	}
402cec19d9SFrederic Weisbecker 
412cec19d9SFrederic Weisbecker 	return ret;
422cec19d9SFrederic Weisbecker }
438f28827aSFrederic Weisbecker 
448f28827aSFrederic Weisbecker static int dump_printf_color(const char *fmt, const char *color, ...)
458f28827aSFrederic Weisbecker {
468f28827aSFrederic Weisbecker 	va_list args;
478f28827aSFrederic Weisbecker 	int ret = 0;
488f28827aSFrederic Weisbecker 
498f28827aSFrederic Weisbecker 	if (dump_trace) {
508f28827aSFrederic Weisbecker 		va_start(args, color);
518f28827aSFrederic Weisbecker 		ret = color_vfprintf(stdout, color, fmt, args);
528f28827aSFrederic Weisbecker 		va_end(args);
538f28827aSFrederic Weisbecker 	}
548f28827aSFrederic Weisbecker 
558f28827aSFrederic Weisbecker 	return ret;
568f28827aSFrederic Weisbecker }
578f28827aSFrederic Weisbecker 
588f28827aSFrederic Weisbecker 
598f28827aSFrederic Weisbecker void trace_event(event_t *event)
608f28827aSFrederic Weisbecker {
618f28827aSFrederic Weisbecker 	unsigned char *raw_event = (void *)event;
628f28827aSFrederic Weisbecker 	const char *color = PERF_COLOR_BLUE;
638f28827aSFrederic Weisbecker 	int i, j;
648f28827aSFrederic Weisbecker 
658f28827aSFrederic Weisbecker 	if (!dump_trace)
668f28827aSFrederic Weisbecker 		return;
678f28827aSFrederic Weisbecker 
688f28827aSFrederic Weisbecker 	dump_printf(".");
698f28827aSFrederic Weisbecker 	dump_printf_color("\n. ... raw event: size %d bytes\n", color,
708f28827aSFrederic Weisbecker 			  event->header.size);
718f28827aSFrederic Weisbecker 
728f28827aSFrederic Weisbecker 	for (i = 0; i < event->header.size; i++) {
738f28827aSFrederic Weisbecker 		if ((i & 15) == 0) {
748f28827aSFrederic Weisbecker 			dump_printf(".");
758f28827aSFrederic Weisbecker 			dump_printf_color("  %04x: ", color, i);
768f28827aSFrederic Weisbecker 		}
778f28827aSFrederic Weisbecker 
788f28827aSFrederic Weisbecker 		dump_printf_color(" %02x", color, raw_event[i]);
798f28827aSFrederic Weisbecker 
808f28827aSFrederic Weisbecker 		if (((i & 15) == 15) || i == event->header.size-1) {
818f28827aSFrederic Weisbecker 			dump_printf_color("  ", color);
828f28827aSFrederic Weisbecker 			for (j = 0; j < 15-(i & 15); j++)
838f28827aSFrederic Weisbecker 				dump_printf_color("   ", color);
848f28827aSFrederic Weisbecker 			for (j = 0; j < (i & 15); j++) {
858f28827aSFrederic Weisbecker 				if (isprint(raw_event[i-15+j]))
868f28827aSFrederic Weisbecker 					dump_printf_color("%c", color,
878f28827aSFrederic Weisbecker 							  raw_event[i-15+j]);
888f28827aSFrederic Weisbecker 				else
898f28827aSFrederic Weisbecker 					dump_printf_color(".", color);
908f28827aSFrederic Weisbecker 			}
918f28827aSFrederic Weisbecker 			dump_printf_color("\n", color);
928f28827aSFrederic Weisbecker 		}
938f28827aSFrederic Weisbecker 	}
948f28827aSFrederic Weisbecker 	dump_printf(".\n");
958f28827aSFrederic Weisbecker }
96