~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/perf/util/debug.c

Version: ~ [ linux-5.1.2 ] ~ [ linux-5.0.16 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.43 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.119 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.176 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.179 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.139 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.67 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* For general debugging purposes */
  2 
  3 #include "../perf.h"
  4 
  5 #include <string.h>
  6 #include <stdarg.h>
  7 #include <stdio.h>
  8 
  9 #include "cache.h"
 10 #include "color.h"
 11 #include "event.h"
 12 #include "debug.h"
 13 #include "util.h"
 14 #include "target.h"
 15 
 16 #define NSECS_PER_SEC  1000000000ULL
 17 #define NSECS_PER_USEC 1000ULL
 18 
 19 int verbose;
 20 bool dump_trace = false, quiet = false;
 21 int debug_ordered_events;
 22 static int redirect_to_stderr;
 23 int debug_data_convert;
 24 
 25 static int _eprintf(int level, int var, const char *fmt, va_list args)
 26 {
 27         int ret = 0;
 28 
 29         if (var >= level) {
 30                 if (use_browser >= 1 && !redirect_to_stderr)
 31                         ui_helpline__vshow(fmt, args);
 32                 else
 33                         ret = vfprintf(stderr, fmt, args);
 34         }
 35 
 36         return ret;
 37 }
 38 
 39 int veprintf(int level, int var, const char *fmt, va_list args)
 40 {
 41         return _eprintf(level, var, fmt, args);
 42 }
 43 
 44 int eprintf(int level, int var, const char *fmt, ...)
 45 {
 46         va_list args;
 47         int ret;
 48 
 49         va_start(args, fmt);
 50         ret = _eprintf(level, var, fmt, args);
 51         va_end(args);
 52 
 53         return ret;
 54 }
 55 
 56 static int __eprintf_time(u64 t, const char *fmt, va_list args)
 57 {
 58         int ret = 0;
 59         u64 secs, usecs, nsecs = t;
 60 
 61         secs   = nsecs / NSECS_PER_SEC;
 62         nsecs -= secs  * NSECS_PER_SEC;
 63         usecs  = nsecs / NSECS_PER_USEC;
 64 
 65         ret = fprintf(stderr, "[%13" PRIu64 ".%06" PRIu64 "] ",
 66                       secs, usecs);
 67         ret += vfprintf(stderr, fmt, args);
 68         return ret;
 69 }
 70 
 71 int eprintf_time(int level, int var, u64 t, const char *fmt, ...)
 72 {
 73         int ret = 0;
 74         va_list args;
 75 
 76         if (var >= level) {
 77                 va_start(args, fmt);
 78                 ret = __eprintf_time(t, fmt, args);
 79                 va_end(args);
 80         }
 81 
 82         return ret;
 83 }
 84 
 85 /*
 86  * Overloading libtraceevent standard info print
 87  * function, display with -v in perf.
 88  */
 89 void pr_stat(const char *fmt, ...)
 90 {
 91         va_list args;
 92 
 93         va_start(args, fmt);
 94         _eprintf(1, verbose, fmt, args);
 95         va_end(args);
 96         eprintf(1, verbose, "\n");
 97 }
 98 
 99 int dump_printf(const char *fmt, ...)
100 {
101         va_list args;
102         int ret = 0;
103 
104         if (dump_trace) {
105                 va_start(args, fmt);
106                 ret = vprintf(fmt, args);
107                 va_end(args);
108         }
109 
110         return ret;
111 }
112 
113 void trace_event(union perf_event *event)
114 {
115         unsigned char *raw_event = (void *)event;
116         const char *color = PERF_COLOR_BLUE;
117         int i, j;
118 
119         if (!dump_trace)
120                 return;
121 
122         printf(".");
123         color_fprintf(stdout, color, "\n. ... raw event: size %d bytes\n",
124                       event->header.size);
125 
126         for (i = 0; i < event->header.size; i++) {
127                 if ((i & 15) == 0) {
128                         printf(".");
129                         color_fprintf(stdout, color, "  %04x: ", i);
130                 }
131 
132                 color_fprintf(stdout, color, " %02x", raw_event[i]);
133 
134                 if (((i & 15) == 15) || i == event->header.size-1) {
135                         color_fprintf(stdout, color, "  ");
136                         for (j = 0; j < 15-(i & 15); j++)
137                                 color_fprintf(stdout, color, "   ");
138                         for (j = i & ~15; j <= i; j++) {
139                                 color_fprintf(stdout, color, "%c",
140                                               isprint(raw_event[j]) ?
141                                               raw_event[j] : '.');
142                         }
143                         color_fprintf(stdout, color, "\n");
144                 }
145         }
146         printf(".\n");
147 }
148 
149 static struct debug_variable {
150         const char *name;
151         int *ptr;
152 } debug_variables[] = {
153         { .name = "verbose",            .ptr = &verbose },
154         { .name = "ordered-events",     .ptr = &debug_ordered_events},
155         { .name = "stderr",             .ptr = &redirect_to_stderr},
156         { .name = "data-convert",       .ptr = &debug_data_convert },
157         { .name = NULL, }
158 };
159 
160 int perf_debug_option(const char *str)
161 {
162         struct debug_variable *var = &debug_variables[0];
163         char *vstr, *s = strdup(str);
164         int v = 1;
165 
166         vstr = strchr(s, '=');
167         if (vstr)
168                 *vstr++ = 0;
169 
170         while (var->name) {
171                 if (!strcmp(s, var->name))
172                         break;
173                 var++;
174         }
175 
176         if (!var->name) {
177                 pr_err("Unknown debug variable name '%s'\n", s);
178                 free(s);
179                 return -1;
180         }
181 
182         if (vstr) {
183                 v = atoi(vstr);
184                 /*
185                  * Allow only values in range (0, 10),
186                  * otherwise set 0.
187                  */
188                 v = (v < 0) || (v > 10) ? 0 : v;
189         }
190 
191         *var->ptr = v;
192         free(s);
193         return 0;
194 }
195 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp