1e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* For general debugging purposes */ 2e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 3e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "../perf.h" 4e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 5e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <string.h> 6e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <stdarg.h> 7e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <stdio.h> 8e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 9e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "cache.h" 10e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "color.h" 11e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "event.h" 12e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "debug.h" 13e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "util.h" 14e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 15e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint verbose; 16e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengbool dump_trace = false, quiet = false; 17e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 18e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint eprintf(int level, const char *fmt, ...) 19e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 20e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng va_list args; 21e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int ret = 0; 22e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 23e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (verbose >= level) { 24e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng va_start(args, fmt); 25e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (use_browser > 0) 26e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng ret = ui_helpline__show_help(fmt, args); 27e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng else 28e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng ret = vfprintf(stderr, fmt, args); 29e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng va_end(args); 30e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 31e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 32e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return ret; 33e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 34e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 35e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint dump_printf(const char *fmt, ...) 36e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 37e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng va_list args; 38e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int ret = 0; 39e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 40e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (dump_trace) { 41e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng va_start(args, fmt); 42e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng ret = vprintf(fmt, args); 43e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng va_end(args); 44e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 45e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 46e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return ret; 47e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 48e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 49e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#ifdef NO_NEWT_SUPPORT 50e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid ui__warning(const char *format, ...) 51e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 52e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng va_list args; 53e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 54e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng va_start(args, format); 55e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng vfprintf(stderr, format, args); 56e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng va_end(args); 57e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 58e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif 59e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 60e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid ui__warning_paranoid(void) 61e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 62e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng ui__warning("Permission error - are you root?\n" 63e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng "Consider tweaking /proc/sys/kernel/perf_event_paranoid:\n" 64e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng " -1 - Not paranoid at all\n" 65e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng " 0 - Disallow raw tracepoint access for unpriv\n" 66e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng " 1 - Disallow cpu events for unpriv\n" 67e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng " 2 - Disallow kernel profiling for unpriv\n"); 68e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 69e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 70e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid trace_event(union perf_event *event) 71e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 72e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng unsigned char *raw_event = (void *)event; 73e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng const char *color = PERF_COLOR_BLUE; 74e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int i, j; 75e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 76e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (!dump_trace) 77e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return; 78e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 79e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng printf("."); 80e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng color_fprintf(stdout, color, "\n. ... raw event: size %d bytes\n", 81e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng event->header.size); 82e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 83e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (i = 0; i < event->header.size; i++) { 84e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if ((i & 15) == 0) { 85e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng printf("."); 86e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng color_fprintf(stdout, color, " %04x: ", i); 87e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 88e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 89e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng color_fprintf(stdout, color, " %02x", raw_event[i]); 90e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 91e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (((i & 15) == 15) || i == event->header.size-1) { 92e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng color_fprintf(stdout, color, " "); 93e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (j = 0; j < 15-(i & 15); j++) 94e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng color_fprintf(stdout, color, " "); 95e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (j = i & ~15; j <= i; j++) { 96e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng color_fprintf(stdout, color, "%c", 97e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng isprint(raw_event[j]) ? 98e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng raw_event[j] : '.'); 99e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 100e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng color_fprintf(stdout, color, "\n"); 101e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 102e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 103e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng printf(".\n"); 104e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 105