blob: efb1fce259a4f2ea9ae202a9111976daf497bb53 [file] [log] [blame]
Frederic Weisbeckercd84c2a2009-08-12 10:03:49 +02001/* For general debugging purposes */
2
3#include "../perf.h"
Frederic Weisbecker8f288272009-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 Weisbecker8f288272009-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 Weisbecker8f288272009-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 Meloc4fe52a2010-05-27 09:53:40 -030026 if (use_browser > 0)
Arnaldo Carvalho de Melo1e6dd072010-08-10 15:58:50 -030027 ret = ui_helpline__show_help(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 Weisbecker8f288272009-08-16 22:05:48 +020049
Arnaldo Carvalho de Melo068ffaa2010-11-27 02:41:01 -020050#ifdef NO_NEWT_SUPPORT
Arnaldo Carvalho de Melo4610e412011-10-26 12:04:37 -020051int ui__warning(const char *format, ...)
Arnaldo Carvalho de Melo068ffaa2010-11-27 02:41:01 -020052{
53 va_list args;
54
55 va_start(args, format);
56 vfprintf(stderr, format, args);
57 va_end(args);
Arnaldo Carvalho de Melo4610e412011-10-26 12:04:37 -020058 return 0;
Arnaldo Carvalho de Melo068ffaa2010-11-27 02:41:01 -020059}
60#endif
61
Arnaldo Carvalho de Melo4610e412011-10-26 12:04:37 -020062int ui__error_paranoid(void)
Arnaldo Carvalho de Meloc286c412011-03-28 09:50:11 -030063{
Arnaldo Carvalho de Melo4610e412011-10-26 12:04:37 -020064 return ui__error("Permission error - are you root?\n"
Arnaldo Carvalho de Meloc286c412011-03-28 09:50:11 -030065 "Consider tweaking /proc/sys/kernel/perf_event_paranoid:\n"
66 " -1 - Not paranoid at all\n"
67 " 0 - Disallow raw tracepoint access for unpriv\n"
68 " 1 - Disallow cpu events for unpriv\n"
69 " 2 - Disallow kernel profiling for unpriv\n");
70}
71
Arnaldo Carvalho de Melo8115d602011-01-29 14:01:45 -020072void trace_event(union perf_event *event)
Frederic Weisbecker8f288272009-08-16 22:05:48 +020073{
74 unsigned char *raw_event = (void *)event;
75 const char *color = PERF_COLOR_BLUE;
76 int i, j;
77
78 if (!dump_trace)
79 return;
80
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -020081 printf(".");
82 color_fprintf(stdout, color, "\n. ... raw event: size %d bytes\n",
83 event->header.size);
Frederic Weisbecker8f288272009-08-16 22:05:48 +020084
85 for (i = 0; i < event->header.size; i++) {
86 if ((i & 15) == 0) {
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -020087 printf(".");
88 color_fprintf(stdout, color, " %04x: ", i);
Frederic Weisbecker8f288272009-08-16 22:05:48 +020089 }
90
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -020091 color_fprintf(stdout, color, " %02x", raw_event[i]);
Frederic Weisbecker8f288272009-08-16 22:05:48 +020092
93 if (((i & 15) == 15) || i == event->header.size-1) {
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -020094 color_fprintf(stdout, color, " ");
Frederic Weisbecker8f288272009-08-16 22:05:48 +020095 for (j = 0; j < 15-(i & 15); j++)
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -020096 color_fprintf(stdout, color, " ");
Andy Isaacson84c104a2010-06-11 19:44:04 -070097 for (j = i & ~15; j <= i; j++) {
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -020098 color_fprintf(stdout, color, "%c",
99 isprint(raw_event[j]) ?
100 raw_event[j] : '.');
Frederic Weisbecker8f288272009-08-16 22:05:48 +0200101 }
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -0200102 color_fprintf(stdout, color, "\n");
Frederic Weisbecker8f288272009-08-16 22:05:48 +0200103 }
104 }
Arnaldo Carvalho de Melo5b1c1442010-11-30 17:48:53 -0200105 printf(".\n");
Frederic Weisbecker8f288272009-08-16 22:05:48 +0200106}