diff options
author | Jiri Olsa <jolsa@kernel.org> | 2019-07-21 07:24:14 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2019-07-29 17:34:44 -0400 |
commit | a1556f8479ed58b8d5a33aef54578bad0165c7e7 (patch) | |
tree | f00f4e19160f6b4d5663f53dc8cc06424b12fddf /tools/perf/lib | |
parent | 5b7f445d684fc287a2101e29d42d1fee19ae14ff (diff) |
libperf: Add debug output support
Add the perf_set_print() function to allow setting an output function
for warn/info/debug messages.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Michael Petlan <mpetlan@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20190721112506.12306-28-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/lib')
-rw-r--r-- | tools/perf/lib/core.c | 34 | ||||
-rw-r--r-- | tools/perf/lib/include/perf/core.h | 13 | ||||
-rw-r--r-- | tools/perf/lib/internal.h | 18 | ||||
-rw-r--r-- | tools/perf/lib/libperf.map | 2 |
4 files changed, 67 insertions, 0 deletions
diff --git a/tools/perf/lib/core.c b/tools/perf/lib/core.c index e69de29bb2d1..29d5e3348718 100644 --- a/tools/perf/lib/core.c +++ b/tools/perf/lib/core.c | |||
@@ -0,0 +1,34 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
2 | |||
3 | #define __printf(a, b) __attribute__((format(printf, a, b))) | ||
4 | |||
5 | #include <stdio.h> | ||
6 | #include <stdarg.h> | ||
7 | #include <perf/core.h> | ||
8 | #include "internal.h" | ||
9 | |||
10 | static int __base_pr(enum libperf_print_level level, const char *format, | ||
11 | va_list args) | ||
12 | { | ||
13 | return vfprintf(stderr, format, args); | ||
14 | } | ||
15 | |||
16 | static libperf_print_fn_t __libperf_pr = __base_pr; | ||
17 | |||
18 | void libperf_set_print(libperf_print_fn_t fn) | ||
19 | { | ||
20 | __libperf_pr = fn; | ||
21 | } | ||
22 | |||
23 | __printf(2, 3) | ||
24 | void libperf_print(enum libperf_print_level level, const char *format, ...) | ||
25 | { | ||
26 | va_list args; | ||
27 | |||
28 | if (!__libperf_pr) | ||
29 | return; | ||
30 | |||
31 | va_start(args, format); | ||
32 | __libperf_pr(level, format, args); | ||
33 | va_end(args); | ||
34 | } | ||
diff --git a/tools/perf/lib/include/perf/core.h b/tools/perf/lib/include/perf/core.h index e2e4b43c9131..c341a7b2c874 100644 --- a/tools/perf/lib/include/perf/core.h +++ b/tools/perf/lib/include/perf/core.h | |||
@@ -2,8 +2,21 @@ | |||
2 | #ifndef __LIBPERF_CORE_H | 2 | #ifndef __LIBPERF_CORE_H |
3 | #define __LIBPERF_CORE_H | 3 | #define __LIBPERF_CORE_H |
4 | 4 | ||
5 | #include <stdarg.h> | ||
6 | |||
5 | #ifndef LIBPERF_API | 7 | #ifndef LIBPERF_API |
6 | #define LIBPERF_API __attribute__((visibility("default"))) | 8 | #define LIBPERF_API __attribute__((visibility("default"))) |
7 | #endif | 9 | #endif |
8 | 10 | ||
11 | enum libperf_print_level { | ||
12 | LIBPERF_WARN, | ||
13 | LIBPERF_INFO, | ||
14 | LIBPERF_DEBUG, | ||
15 | }; | ||
16 | |||
17 | typedef int (*libperf_print_fn_t)(enum libperf_print_level level, | ||
18 | const char *, va_list ap); | ||
19 | |||
20 | LIBPERF_API void libperf_set_print(libperf_print_fn_t fn); | ||
21 | |||
9 | #endif /* __LIBPERF_CORE_H */ | 22 | #endif /* __LIBPERF_CORE_H */ |
diff --git a/tools/perf/lib/internal.h b/tools/perf/lib/internal.h new file mode 100644 index 000000000000..dc92f241732e --- /dev/null +++ b/tools/perf/lib/internal.h | |||
@@ -0,0 +1,18 @@ | |||
1 | /* SPDX-License-Identifier: GPL-2.0 */ | ||
2 | #ifndef __LIBPERF_INTERNAL_H | ||
3 | #define __LIBPERF_INTERNAL_H | ||
4 | |||
5 | void libperf_print(enum libperf_print_level level, | ||
6 | const char *format, ...) | ||
7 | __attribute__((format(printf, 2, 3))); | ||
8 | |||
9 | #define __pr(level, fmt, ...) \ | ||
10 | do { \ | ||
11 | libperf_print(level, "libperf: " fmt, ##__VA_ARGS__); \ | ||
12 | } while (0) | ||
13 | |||
14 | #define pr_warning(fmt, ...) __pr(LIBPERF_WARN, fmt, ##__VA_ARGS__) | ||
15 | #define pr_info(fmt, ...) __pr(LIBPERF_INFO, fmt, ##__VA_ARGS__) | ||
16 | #define pr_debug(fmt, ...) __pr(LIBPERF_DEBUG, fmt, ##__VA_ARGS__) | ||
17 | |||
18 | #endif /* __LIBPERF_INTERNAL_H */ | ||
diff --git a/tools/perf/lib/libperf.map b/tools/perf/lib/libperf.map index a8e913988edf..3536242c545c 100644 --- a/tools/perf/lib/libperf.map +++ b/tools/perf/lib/libperf.map | |||
@@ -1,4 +1,6 @@ | |||
1 | LIBPERF_0.0.1 { | 1 | LIBPERF_0.0.1 { |
2 | global: | ||
3 | libperf_set_print; | ||
2 | local: | 4 | local: |
3 | *; | 5 | *; |
4 | }; | 6 | }; |