92 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/* For debugging general purposes */3#ifndef __PERF_DEBUG_H4#define __PERF_DEBUG_H5 6#include <stdarg.h>7#include <stdbool.h>8#include <stdio.h>9#include <linux/compiler.h>10 11extern int verbose;12extern int debug_kmaps;13extern int debug_peo_args;14extern bool quiet, dump_trace;15extern int debug_ordered_events;16extern int debug_data_convert;17extern int debug_type_profile;18 19#ifndef pr_fmt20#define pr_fmt(fmt) fmt21#endif22 23#define pr_err(fmt, ...) \24 eprintf(0, verbose, pr_fmt(fmt), ##__VA_ARGS__)25#define pr_warning(fmt, ...) \26 eprintf(0, verbose, pr_fmt(fmt), ##__VA_ARGS__)27#define pr_warning_once(fmt, ...) ({ \28 static int __warned; \29 if (unlikely(!__warned)) { \30 pr_warning(fmt, ##__VA_ARGS__); \31 __warned = 1; \32 } \33})34#define pr_info(fmt, ...) \35 eprintf(0, verbose, pr_fmt(fmt), ##__VA_ARGS__)36#define pr_debug(fmt, ...) \37 eprintf(1, verbose, pr_fmt(fmt), ##__VA_ARGS__)38#define pr_debugN(n, fmt, ...) \39 eprintf(n, verbose, pr_fmt(fmt), ##__VA_ARGS__)40#define pr_debug2(fmt, ...) pr_debugN(2, pr_fmt(fmt), ##__VA_ARGS__)41#define pr_debug3(fmt, ...) pr_debugN(3, pr_fmt(fmt), ##__VA_ARGS__)42#define pr_debug4(fmt, ...) pr_debugN(4, pr_fmt(fmt), ##__VA_ARGS__)43 44/* Special macro to print perf_event_open arguments/return value. */45#define pr_debug2_peo(fmt, ...) { \46 if (debug_peo_args) \47 pr_debugN(0, pr_fmt(fmt), ##__VA_ARGS__); \48 else \49 pr_debugN(2, pr_fmt(fmt), ##__VA_ARGS__); \50}51 52#define pr_time_N(n, var, t, fmt, ...) \53 eprintf_time(n, var, t, fmt, ##__VA_ARGS__)54 55#define pr_oe_time(t, fmt, ...) pr_time_N(1, debug_ordered_events, t, pr_fmt(fmt), ##__VA_ARGS__)56#define pr_oe_time2(t, fmt, ...) pr_time_N(2, debug_ordered_events, t, pr_fmt(fmt), ##__VA_ARGS__)57 58#define STRERR_BUFSIZE 128 /* For the buffer size of str_error_r */59 60union perf_event;61 62int dump_printf(const char *fmt, ...) __printf(1, 2);63void trace_event(union perf_event *event);64 65int ui__error(const char *format, ...) __printf(1, 2);66int ui__warning(const char *format, ...) __printf(1, 2);67#define ui__warning_once(format, ...) ({ \68 static int __warned; \69 if (unlikely(!__warned)) { \70 ui__warning(format, ##__VA_ARGS__); \71 __warned = 1; \72 } \73})74 75void pr_stat(const char *fmt, ...);76 77int eprintf(int level, int var, const char *fmt, ...) __printf(3, 4);78int eprintf_time(int level, int var, u64 t, const char *fmt, ...) __printf(4, 5);79int veprintf(int level, int var, const char *fmt, va_list args);80 81int perf_debug_option(const char *str);82FILE *debug_file(void);83void debug_set_file(FILE *file);84void debug_set_display_time(bool set);85void perf_debug_setup(void);86int perf_quiet_option(void);87 88void dump_stack(void);89void sighandler_dump_stack(int sig);90 91#endif /* __PERF_DEBUG_H */92