Zephyr API Documentation
4.5.0-rc1
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
tracing_macros.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2018 Intel Corporation
3
*
4
* SPDX-License-Identifier: Apache-2.0
5
*/
6
#ifndef ZEPHYR_INCLUDE_TRACING_TRACING_MACROS_H_
7
#define ZEPHYR_INCLUDE_TRACING_TRACING_MACROS_H_
8
14
15
#include <
zephyr/sys/util_macro.h
>
16
17
#if !defined(CONFIG_TRACING) && !defined(__DOXYGEN__)
18
19
#define SYS_PORT_TRACING_FUNC(type, func, ...) do { } while (false)
20
#define SYS_PORT_TRACING_FUNC_ENTER(type, func, ...) do { } while (false)
21
#define SYS_PORT_TRACING_FUNC_BLOCKING(type, func, ...) do { } while (false)
22
#define SYS_PORT_TRACING_FUNC_EXIT(type, func, ...) do { } while (false)
23
#define SYS_PORT_TRACING_OBJ_INIT(obj_type, obj, ...) do { } while (false)
24
#define SYS_PORT_TRACING_OBJ_FUNC(obj_type, func, obj, ...) do { } while (false)
25
#define SYS_PORT_TRACING_OBJ_FUNC_ENTER(obj_type, func, obj, ...) do { } while (false)
26
#define SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(obj_type, func, obj, ...) do { } while (false)
27
#define SYS_PORT_TRACING_OBJ_FUNC_EXIT(obj_type, func, obj, ...) do { } while (false)
28
29
#else
30
40
42
43
/*
44
* Helper macros used by the extended tracing system
45
*/
46
47
#define _SYS_PORT_TRACING_TYPE_MASK(type) \
48
sys_port_trace_type_mask_ ## type
49
#define _SYS_PORT_TRACING_FUNC(name, func) \
50
sys_port_trace_ ## name ## _ ## func
51
#define _SYS_PORT_TRACING_FUNC_ENTER(name, func) \
52
sys_port_trace_ ## name ## _ ## func ## _enter
53
#define _SYS_PORT_TRACING_FUNC_BLOCKING(name, func) \
54
sys_port_trace_ ## name ## _ ## func ## _blocking
55
#define _SYS_PORT_TRACING_FUNC_EXIT(name, func) \
56
sys_port_trace_ ## name ## _ ## func ## _exit
57
#define _SYS_PORT_TRACING_OBJ_INIT(name) \
58
sys_port_trace_ ## name ## _init
59
#define _SYS_PORT_TRACING_OBJ_FUNC(name, func) \
60
sys_port_trace_ ## name ## _ ## func
61
#define _SYS_PORT_TRACING_OBJ_FUNC_ENTER(name, func) \
62
sys_port_trace_ ## name ## _ ## func ## _enter
63
#define _SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(name, func) \
64
sys_port_trace_ ## name ## _ ## func ## _blocking
65
#define _SYS_PORT_TRACING_OBJ_FUNC_EXIT(name, func) \
66
sys_port_trace_ ## name ## _ ## func ## _exit
67
68
/*
69
* Object trace macros part of the system for checking if certain
70
* objects should be traced or not depending on the tracing configuration.
71
*/
72
#if defined(CONFIG_TRACING_THREAD)
73
#define sys_port_trace_type_mask_k_thread(trace_call) trace_call
74
#else
75
#define sys_port_trace_type_mask_k_thread(trace_call)
76
#define sys_port_trace_k_thread_is_disabled 1
77
#endif
78
79
#if defined(CONFIG_TRACING_WORK)
80
#define sys_port_trace_type_mask_k_work(trace_call) trace_call
81
#define sys_port_trace_type_mask_k_work_queue(trace_call) trace_call
82
#define sys_port_trace_type_mask_k_work_delayable(trace_call) trace_call
83
#define sys_port_trace_type_mask_k_work_poll(trace_call) trace_call
84
#else
85
#define sys_port_trace_type_mask_k_work(trace_call)
86
#define sys_port_trace_type_mask_k_work_queue(trace_call)
87
#define sys_port_trace_type_mask_k_work_delayable(trace_call)
88
#define sys_port_trace_type_mask_k_work_poll(trace_call)
89
#endif
90
91
#if defined(CONFIG_TRACING_SEMAPHORE)
92
#define sys_port_trace_type_mask_k_sem(trace_call) trace_call
93
#else
94
#define sys_port_trace_type_mask_k_sem(trace_call)
95
#endif
96
97
#if defined(CONFIG_TRACING_MUTEX)
98
#define sys_port_trace_type_mask_k_mutex(trace_call) trace_call
99
#else
100
#define sys_port_trace_type_mask_k_mutex(trace_call)
101
#endif
102
103
#if defined(CONFIG_TRACING_CONDVAR)
104
#define sys_port_trace_type_mask_k_condvar(trace_call) trace_call
105
#else
106
#define sys_port_trace_type_mask_k_condvar(trace_call)
107
#endif
108
109
#if defined(CONFIG_TRACING_QUEUE)
110
#define sys_port_trace_type_mask_k_queue(trace_call) trace_call
111
#else
112
#define sys_port_trace_type_mask_k_queue(trace_call)
113
#endif
114
115
#if defined(CONFIG_TRACING_FIFO)
116
#define sys_port_trace_type_mask_k_fifo(trace_call) trace_call
117
#else
118
#define sys_port_trace_type_mask_k_fifo(trace_call)
119
#endif
120
121
#if defined(CONFIG_TRACING_LIFO)
122
#define sys_port_trace_type_mask_k_lifo(trace_call) trace_call
123
#else
124
#define sys_port_trace_type_mask_k_lifo(trace_call)
125
#endif
126
127
#if defined(CONFIG_TRACING_STACK)
128
#define sys_port_trace_type_mask_k_stack(trace_call) trace_call
129
#else
130
#define sys_port_trace_type_mask_k_stack(trace_call)
131
#endif
132
133
#if defined(CONFIG_TRACING_MESSAGE_QUEUE)
134
#define sys_port_trace_type_mask_k_msgq(trace_call) trace_call
135
#else
136
#define sys_port_trace_type_mask_k_msgq(trace_call)
137
#endif
138
139
#if defined(CONFIG_TRACING_MAILBOX)
140
#define sys_port_trace_type_mask_k_mbox(trace_call) trace_call
141
#else
142
#define sys_port_trace_type_mask_k_mbox(trace_call)
143
#endif
144
145
#if defined(CONFIG_TRACING_PIPE)
146
#define sys_port_trace_type_mask_k_pipe(trace_call) trace_call
147
#else
148
#define sys_port_trace_type_mask_k_pipe(trace_call)
149
#endif
150
151
#if defined(CONFIG_TRACING_HEAP)
152
#define sys_port_trace_type_mask_k_heap(trace_call) trace_call
153
#define sys_port_trace_type_mask_k_heap_sys(trace_call) trace_call
154
#else
155
#define sys_port_trace_type_mask_k_heap(trace_call)
156
#define sys_port_trace_type_mask_k_heap_sys(trace_call)
157
#endif
158
159
#if defined(CONFIG_TRACING_MEMORY_SLAB)
160
#define sys_port_trace_type_mask_k_mem_slab(trace_call) trace_call
161
#else
162
#define sys_port_trace_type_mask_k_mem_slab(trace_call)
163
#endif
164
165
#if defined(CONFIG_TRACING_TIMER)
166
#define sys_port_trace_type_mask_k_timer(trace_call) trace_call
167
#else
168
#define sys_port_trace_type_mask_k_timer(trace_call)
169
#endif
170
171
#if defined(CONFIG_TRACING_EVENT)
172
#define sys_port_trace_type_mask_k_event(trace_call) trace_call
173
#else
174
#define sys_port_trace_type_mask_k_event(trace_call)
175
#endif
176
177
#ifndef CONFIG_TRACING_POLLING
178
#define sys_port_trace_k_poll_api_is_disabled 1
179
#define sys_port_trace_k_work_poll_is_disabled 1
180
#endif
181
182
#ifndef CONFIG_TRACING_PM
183
#define sys_port_trace_pm_is_disabled 1
184
#endif
185
186
#if defined(CONFIG_TRACING_NET_SOCKETS)
187
#define sys_port_trace_type_mask_socket(trace_call) trace_call
188
#else
189
#define sys_port_trace_type_mask_socket(trace_call)
190
#endif
191
192
#if defined(CONFIG_TRACING_NET_CORE)
193
#define sys_port_trace_type_mask_net(trace_call) trace_call
194
#else
195
#define sys_port_trace_type_mask_net(trace_call)
196
#endif
197
198
/*
199
* We cannot positively enumerate all traced APIs, as applications may trace
200
* arbitrary custom APIs we know nothing about. Therefore we demand that tracing
201
* of an API must be actively disabled.
202
*
203
* This contrasts with object tracing/tracking as all traceable objects are well
204
* known, see the SYS_PORT_TRACING_TYPE_MASK approach below.
205
*/
206
#define _SYS_PORT_TRACE_IS_DISABLED(type) sys_port_trace_##type##_is_disabled
207
#define _SYS_PORT_TRACE_WRAP(func, ...) do { func(__VA_ARGS__); } while (false)
208
#define _SYS_PORT_TRACE_IF_NOT_DISABLED(type, func, ...) \
209
COND_CODE_1(_SYS_PORT_TRACE_IS_DISABLED(type), (), \
210
(_SYS_PORT_TRACE_WRAP(func, __VA_ARGS__)))
211
213
220
#define SYS_PORT_TRACING_TYPE_MASK(type, trace_call) \
221
_SYS_PORT_TRACING_TYPE_MASK(type)(trace_call)
222
233
#define SYS_PORT_TRACING_FUNC(type, func, ...) \
234
_SYS_PORT_TRACE_IF_NOT_DISABLED(type, _SYS_PORT_TRACING_FUNC(type, func), __VA_ARGS__)
235
246
#define SYS_PORT_TRACING_FUNC_ENTER(type, func, ...) \
247
_SYS_PORT_TRACE_IF_NOT_DISABLED(type, _SYS_PORT_TRACING_FUNC_ENTER(type, func), __VA_ARGS__)
248
258
#define SYS_PORT_TRACING_FUNC_BLOCKING(type, func, ...) \
259
_SYS_PORT_TRACE_IF_NOT_DISABLED(type, _SYS_PORT_TRACING_FUNC_BLOCKING(type, func), \
260
__VA_ARGS__)
261
272
#define SYS_PORT_TRACING_FUNC_EXIT(type, func, ...) \
273
_SYS_PORT_TRACE_IF_NOT_DISABLED(type, _SYS_PORT_TRACING_FUNC_EXIT(type, func), __VA_ARGS__)
274
281
#define SYS_PORT_TRACING_OBJ_INIT(obj_type, obj, ...) \
282
do { \
283
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
284
_SYS_PORT_TRACING_OBJ_INIT(obj_type)(obj, ##__VA_ARGS__)); \
285
} while (false)
286
297
#define SYS_PORT_TRACING_OBJ_FUNC(obj_type, func, obj, ...) \
298
do { \
299
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
300
_SYS_PORT_TRACING_OBJ_FUNC(obj_type, func)(obj, ##__VA_ARGS__)); \
301
} while (false)
302
314
#define SYS_PORT_TRACING_OBJ_FUNC_ENTER(obj_type, func, obj, ...) \
315
do { \
316
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
317
_SYS_PORT_TRACING_OBJ_FUNC_ENTER(obj_type, func)(obj, ##__VA_ARGS__)); \
318
} while (false)
319
331
#define SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(obj_type, func, obj, timeout, ...) \
332
do { \
333
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
334
_SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(obj_type, func) \
335
(obj, timeout, ##__VA_ARGS__)); \
336
} while (false)
337
349
#define SYS_PORT_TRACING_OBJ_FUNC_EXIT(obj_type, func, obj, ...) \
350
do { \
351
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
352
_SYS_PORT_TRACING_OBJ_FUNC_EXIT(obj_type, func)(obj, ##__VA_ARGS__)); \
353
} while (false)
354
/* end of subsys_tracing_macros */
356
357
#endif
/* CONFIG_TRACING */
358
359
#endif
/* ZEPHYR_INCLUDE_TRACING_TRACING_MACROS_H_ */
util_macro.h
Macro utilities.
zephyr
tracing
tracing_macros.h
Generated on
for Zephyr API Documentation by
1.16.1