1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
/* Tracing macros
*
* Wraps tracepoint macros for different tracing systems to allow switching
* between them at compile time.
*
* This should not be included directly by source files wishing to provide
* tracepoints. Instead, write a header that defines LTTng tracepoints and
* which includes this header, and include your new header in your source. USDT
* probes do not need tracepoint definitions, but are less capable than LTTng
* tracepoints.
*
* Copyright (C) 2020 NVIDIA Corporation
* Quentin Young
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; see the file COPYING; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _TRACE_H_
#define _TRACE_H_
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif /* HAVE_CONFIG_H */
/*
* Provided here:
* - frrtrace(n, provider, name, ...args...)
* - frrtrace_enabled(provider, name)
* - frrtracelog(level, msg, ...)
*
* Use frrtrace() to define tracepoints. n is the number of arguments; this is
* needed because USDT probe definitions use DTRACE_PROBEn macros, so the
* number of args must be passed in order to expand the correct macro.
*
* frrtrace_enabled() maps to tracepoint_enabled() under LTTng and is always
* true when using USDT. In the future it could be mapped to USDT semaphores
* but this is not implemented at present.
*
* frrtracelog() maps to tracelog() under LTTng and should only be used in zlog
* core code, to propagate zlog messages to LTTng. It expands to nothing
* otherwise.
*/
#if defined(HAVE_LTTNG)
#define frrtrace(nargs, provider, name, ...) \
tracepoint(provider, name, ## __VA_ARGS__)
#define frrtrace_enabled(...) tracepoint_enabled(__VA_ARGS__)
#define frrtracelog(...) tracelog(__VA_ARGS__)
#elif defined(HAVE_USDT)
#include "sys/sdt.h"
#define frrtrace(nargs, provider, name, ...) \
DTRACE_PROBE##nargs(provider, name, ## __VA_ARGS__)
#define frrtrace_enabled(...) true
#define frrtracelog(...)
#else
#define frrtrace(nargs, provider, name, ...) (void)0
#define frrtrace_enabled(...) false
#define frrtracelog(...) (void)0
#endif
#endif /* _TRACE_H_ */
|