xref: /OK3568_Linux_fs/kernel/tools/perf/util/debug.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /* For debugging general purposes */
3*4882a593Smuzhiyun #ifndef __PERF_DEBUG_H
4*4882a593Smuzhiyun #define __PERF_DEBUG_H
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #include <stdarg.h>
7*4882a593Smuzhiyun #include <stdbool.h>
8*4882a593Smuzhiyun #include <linux/compiler.h>
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun extern int verbose;
11*4882a593Smuzhiyun extern int debug_peo_args;
12*4882a593Smuzhiyun extern bool quiet, dump_trace;
13*4882a593Smuzhiyun extern int debug_ordered_events;
14*4882a593Smuzhiyun extern int debug_data_convert;
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #ifndef pr_fmt
17*4882a593Smuzhiyun #define pr_fmt(fmt) fmt
18*4882a593Smuzhiyun #endif
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #define pr_err(fmt, ...) \
21*4882a593Smuzhiyun 	eprintf(0, verbose, pr_fmt(fmt), ##__VA_ARGS__)
22*4882a593Smuzhiyun #define pr_warning(fmt, ...) \
23*4882a593Smuzhiyun 	eprintf(0, verbose, pr_fmt(fmt), ##__VA_ARGS__)
24*4882a593Smuzhiyun #define pr_info(fmt, ...) \
25*4882a593Smuzhiyun 	eprintf(0, verbose, pr_fmt(fmt), ##__VA_ARGS__)
26*4882a593Smuzhiyun #define pr_debug(fmt, ...) \
27*4882a593Smuzhiyun 	eprintf(1, verbose, pr_fmt(fmt), ##__VA_ARGS__)
28*4882a593Smuzhiyun #define pr_debugN(n, fmt, ...) \
29*4882a593Smuzhiyun 	eprintf(n, verbose, pr_fmt(fmt), ##__VA_ARGS__)
30*4882a593Smuzhiyun #define pr_debug2(fmt, ...) pr_debugN(2, pr_fmt(fmt), ##__VA_ARGS__)
31*4882a593Smuzhiyun #define pr_debug3(fmt, ...) pr_debugN(3, pr_fmt(fmt), ##__VA_ARGS__)
32*4882a593Smuzhiyun #define pr_debug4(fmt, ...) pr_debugN(4, pr_fmt(fmt), ##__VA_ARGS__)
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun /* Special macro to print perf_event_open arguments/return value. */
35*4882a593Smuzhiyun #define pr_debug2_peo(fmt, ...) {				\
36*4882a593Smuzhiyun 	if (debug_peo_args)						\
37*4882a593Smuzhiyun 		pr_debugN(0, pr_fmt(fmt), ##__VA_ARGS__);	\
38*4882a593Smuzhiyun 	else							\
39*4882a593Smuzhiyun 		pr_debugN(2, pr_fmt(fmt), ##__VA_ARGS__);	\
40*4882a593Smuzhiyun }
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun #define pr_time_N(n, var, t, fmt, ...) \
43*4882a593Smuzhiyun 	eprintf_time(n, var, t, fmt, ##__VA_ARGS__)
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun #define pr_oe_time(t, fmt, ...)  pr_time_N(1, debug_ordered_events, t, pr_fmt(fmt), ##__VA_ARGS__)
46*4882a593Smuzhiyun #define pr_oe_time2(t, fmt, ...) pr_time_N(2, debug_ordered_events, t, pr_fmt(fmt), ##__VA_ARGS__)
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun #define STRERR_BUFSIZE	128	/* For the buffer size of str_error_r */
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun union perf_event;
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun int dump_printf(const char *fmt, ...) __printf(1, 2);
53*4882a593Smuzhiyun void trace_event(union perf_event *event);
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun int ui__error(const char *format, ...) __printf(1, 2);
56*4882a593Smuzhiyun int ui__warning(const char *format, ...) __printf(1, 2);
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun void pr_stat(const char *fmt, ...);
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun int eprintf(int level, int var, const char *fmt, ...) __printf(3, 4);
61*4882a593Smuzhiyun int eprintf_time(int level, int var, u64 t, const char *fmt, ...) __printf(4, 5);
62*4882a593Smuzhiyun int veprintf(int level, int var, const char *fmt, va_list args);
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun int perf_debug_option(const char *str);
65*4882a593Smuzhiyun void perf_debug_setup(void);
66*4882a593Smuzhiyun int perf_quiet_option(void);
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun void dump_stack(void);
69*4882a593Smuzhiyun void sighandler_dump_stack(int sig);
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun #endif	/* __PERF_DEBUG_H */
72