blob: 399e74c34c1aa5220ecc29bd0d33cca2d2a3ac82 [file] [log] [blame]
Frederic Weisbeckercd84c2a2009-08-12 10:03:49 +02001/* For general debugging purposes */
2
3#include "../perf.h"
Frederic Weisbecker8f28827a2009-08-16 22:05:48 +02004
Frederic Weisbeckercd84c2a2009-08-12 10:03:49 +02005#include <string.h>
6#include <stdarg.h>
7#include <stdio.h>
8
Arnaldo Carvalho de Melof9224c52010-03-11 20:12:44 -03009#include "cache.h"
Frederic Weisbecker8f28827a2009-08-16 22:05:48 +020010#include "color.h"
11#include "event.h"
12#include "debug.h"
Arnaldo Carvalho de Melo4a58e612009-12-27 21:37:00 -020013#include "util.h"
Namhyung Kim16ad2ff2012-05-07 14:09:02 +090014#include "target.h"
Frederic Weisbecker8f28827a2009-08-16 22:05:48 +020015
Arnaldo Carvalho de Melob44308f2010-10-26 15:20:09 -020016int verbose;
17bool dump_trace = false, quiet = false;
Frederic Weisbeckercd84c2a2009-08-12 10:03:49 +020018
Arnaldo Carvalho de Melo6beba7a2009-10-21 17:34:06 -020019int eprintf(int level, const char *fmt, ...)
Frederic Weisbeckercd84c2a2009-08-12 10:03:49 +020020{
21 va_list args;
22 int ret = 0;
23
Arnaldo Carvalho de Melo6beba7a2009-10-21 17:34:06 -020024 if (verbose >= level) {
Frederic Weisbeckercd84c2a2009-08-12 10:03:49 +020025 va_start(args, fmt);
Arnaldo Carvalho de Melo044c4f8f2012-11-29 16:51:01 -030026 if (use_browser >= 1)
Namhyung Kimb56e5332012-11-15 01:47:41 +090027 ui_helpline__vshow(fmt, args);
Arnaldo Carvalho de Melof9224c52010-03-11 20:12:44 -030028 else
29 ret = vfprintf(stderr, fmt, args);
Frederic Weisbeckercd84c2a2009-08-12 10:03:49 +020030 va_end(args);
31 }
32
33 return ret;
34}
Frederic Weisbecker2cec19d2009-08-16 19:24:21 +020035
36int dump_printf(const char *fmt, ...)
37{
38 va_list args;
39 int ret = 0;
40
41 if (dump_trace) {
42 va_start(args, fmt);
43 ret = vprintf(fmt, args);
44 va_end(args);
45 }
46
47 return ret;
48}
Frederic Weisbecker8f28827a2009-08-16 22:05:48 +020049
Arnaldo Carvalho de Melo8115d602011-01-29 14:01:45 -020050void trace_event(union perf_event *event)
Frederic Weisbecker8f28827a2009-08-16 22:05:48 +020051{
52 unsigned char *raw_event = (void *)event;
53 const char *color = PERF_COLOR_BLUE;
54 int i, j;
55
56 if (!dump_trace)
57 return;
58
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -020059 printf(".");
60 color_fprintf(stdout, color, "\n. ... raw event: size %d bytes\n",
61 event->header.size);
Frederic Weisbecker8f28827a2009-08-16 22:05:48 +020062
63 for (i = 0; i < event->header.size; i++) {
64 if ((i & 15) == 0) {
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -020065 printf(".");
66 color_fprintf(stdout, color, " %04x: ", i);
Frederic Weisbecker8f28827a2009-08-16 22:05:48 +020067 }
68
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -020069 color_fprintf(stdout, color, " %02x", raw_event[i]);
Frederic Weisbecker8f28827a2009-08-16 22:05:48 +020070
71 if (((i & 15) == 15) || i == event->header.size-1) {
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -020072 color_fprintf(stdout, color, " ");
Frederic Weisbecker8f28827a2009-08-16 22:05:48 +020073 for (j = 0; j < 15-(i & 15); j++)
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -020074 color_fprintf(stdout, color, " ");
Andy Isaacson84c104a2010-06-11 19:44:04 -070075 for (j = i & ~15; j <= i; j++) {
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -020076 color_fprintf(stdout, color, "%c",
77 isprint(raw_event[j]) ?
78 raw_event[j] : '.');
Frederic Weisbecker8f28827a2009-08-16 22:05:48 +020079 }
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -020080 color_fprintf(stdout, color, "\n");
Frederic Weisbecker8f28827a2009-08-16 22:05:48 +020081 }
82 }
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -020083 printf(".\n");
Frederic Weisbecker8f28827a2009-08-16 22:05:48 +020084}