Zephyr API Documentation
4.3.0-rc2
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
#define SYS_PORT_TRACING_TRACKING_FIELD(type)
30
31
#else
32
42
44
45
/*
46
* Helper macros used by the extended tracing system
47
*/
48
49
#define _SYS_PORT_TRACING_TYPE_MASK(type) \
50
sys_port_trace_type_mask_ ## type
51
#define _SYS_PORT_TRACING_FUNC(name, func) \
52
sys_port_trace_ ## name ## _ ## func
53
#define _SYS_PORT_TRACING_FUNC_ENTER(name, func) \
54
sys_port_trace_ ## name ## _ ## func ## _enter
55
#define _SYS_PORT_TRACING_FUNC_BLOCKING(name, func) \
56
sys_port_trace_ ## name ## _ ## func ## _blocking
57
#define _SYS_PORT_TRACING_FUNC_EXIT(name, func) \
58
sys_port_trace_ ## name ## _ ## func ## _exit
59
#define _SYS_PORT_TRACING_OBJ_INIT(name) \
60
sys_port_trace_ ## name ## _init
61
#define _SYS_PORT_TRACING_OBJ_FUNC(name, func) \
62
sys_port_trace_ ## name ## _ ## func
63
#define _SYS_PORT_TRACING_OBJ_FUNC_ENTER(name, func) \
64
sys_port_trace_ ## name ## _ ## func ## _enter
65
#define _SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(name, func) \
66
sys_port_trace_ ## name ## _ ## func ## _blocking
67
#define _SYS_PORT_TRACING_OBJ_FUNC_EXIT(name, func) \
68
sys_port_trace_ ## name ## _ ## func ## _exit
69
70
/*
71
* Helper macros for the object tracking system
72
*/
73
74
#define _SYS_PORT_TRACKING_OBJ_INIT(name) \
75
sys_port_track_ ## name ## _init
76
#define _SYS_PORT_TRACKING_OBJ_FUNC(name, func) \
77
sys_port_track_ ## name ## _ ## func
78
79
/*
80
* Object trace macros part of the system for checking if certain
81
* objects should be traced or not depending on the tracing configuration.
82
*/
83
#if defined(CONFIG_TRACING_THREAD)
84
#define sys_port_trace_type_mask_k_thread(trace_call) trace_call
85
#else
86
#define sys_port_trace_type_mask_k_thread(trace_call)
87
#define sys_port_trace_k_thread_is_disabled 1
88
#endif
89
90
#if defined(CONFIG_TRACING_WORK)
91
#define sys_port_trace_type_mask_k_work(trace_call) trace_call
92
#define sys_port_trace_type_mask_k_work_queue(trace_call) trace_call
93
#define sys_port_trace_type_mask_k_work_delayable(trace_call) trace_call
94
#define sys_port_trace_type_mask_k_work_poll(trace_call) trace_call
95
#else
96
#define sys_port_trace_type_mask_k_work(trace_call)
97
#define sys_port_trace_type_mask_k_work_queue(trace_call)
98
#define sys_port_trace_type_mask_k_work_delayable(trace_call)
99
#define sys_port_trace_type_mask_k_work_poll(trace_call)
100
#endif
101
102
#if defined(CONFIG_TRACING_SEMAPHORE)
103
#define sys_port_trace_type_mask_k_sem(trace_call) trace_call
104
#else
105
#define sys_port_trace_type_mask_k_sem(trace_call)
106
#endif
107
108
#if defined(CONFIG_TRACING_MUTEX)
109
#define sys_port_trace_type_mask_k_mutex(trace_call) trace_call
110
#else
111
#define sys_port_trace_type_mask_k_mutex(trace_call)
112
#endif
113
114
#if defined(CONFIG_TRACING_CONDVAR)
115
#define sys_port_trace_type_mask_k_condvar(trace_call) trace_call
116
#else
117
#define sys_port_trace_type_mask_k_condvar(trace_call)
118
#endif
119
120
#if defined(CONFIG_TRACING_QUEUE)
121
#define sys_port_trace_type_mask_k_queue(trace_call) trace_call
122
#else
123
#define sys_port_trace_type_mask_k_queue(trace_call)
124
#endif
125
126
#if defined(CONFIG_TRACING_FIFO)
127
#define sys_port_trace_type_mask_k_fifo(trace_call) trace_call
128
#else
129
#define sys_port_trace_type_mask_k_fifo(trace_call)
130
#endif
131
132
#if defined(CONFIG_TRACING_LIFO)
133
#define sys_port_trace_type_mask_k_lifo(trace_call) trace_call
134
#else
135
#define sys_port_trace_type_mask_k_lifo(trace_call)
136
#endif
137
138
#if defined(CONFIG_TRACING_STACK)
139
#define sys_port_trace_type_mask_k_stack(trace_call) trace_call
140
#else
141
#define sys_port_trace_type_mask_k_stack(trace_call)
142
#endif
143
144
#if defined(CONFIG_TRACING_MESSAGE_QUEUE)
145
#define sys_port_trace_type_mask_k_msgq(trace_call) trace_call
146
#else
147
#define sys_port_trace_type_mask_k_msgq(trace_call)
148
#endif
149
150
#if defined(CONFIG_TRACING_MAILBOX)
151
#define sys_port_trace_type_mask_k_mbox(trace_call) trace_call
152
#else
153
#define sys_port_trace_type_mask_k_mbox(trace_call)
154
#endif
155
156
#if defined(CONFIG_TRACING_PIPE)
157
#define sys_port_trace_type_mask_k_pipe(trace_call) trace_call
158
#else
159
#define sys_port_trace_type_mask_k_pipe(trace_call)
160
#endif
161
162
#if defined(CONFIG_TRACING_HEAP)
163
#define sys_port_trace_type_mask_k_heap(trace_call) trace_call
164
#define sys_port_trace_type_mask_k_heap_sys(trace_call) trace_call
165
#else
166
#define sys_port_trace_type_mask_k_heap(trace_call)
167
#define sys_port_trace_type_mask_k_heap_sys(trace_call)
168
#endif
169
170
#if defined(CONFIG_TRACING_MEMORY_SLAB)
171
#define sys_port_trace_type_mask_k_mem_slab(trace_call) trace_call
172
#else
173
#define sys_port_trace_type_mask_k_mem_slab(trace_call)
174
#endif
175
176
#if defined(CONFIG_TRACING_TIMER)
177
#define sys_port_trace_type_mask_k_timer(trace_call) trace_call
178
#else
179
#define sys_port_trace_type_mask_k_timer(trace_call)
180
#endif
181
182
#if defined(CONFIG_TRACING_EVENT)
183
#define sys_port_trace_type_mask_k_event(trace_call) trace_call
184
#else
185
#define sys_port_trace_type_mask_k_event(trace_call)
186
#endif
187
188
#ifndef CONFIG_TRACING_POLLING
189
#define sys_port_trace_k_poll_api_is_disabled 1
190
#define sys_port_trace_k_work_poll_is_disabled 1
191
#endif
192
193
#ifndef CONFIG_TRACING_PM
194
#define sys_port_trace_pm_is_disabled 1
195
#endif
196
197
#if defined(CONFIG_TRACING_NET_SOCKETS)
198
#define sys_port_trace_type_mask_socket(trace_call) trace_call
199
#else
200
#define sys_port_trace_type_mask_socket(trace_call)
201
#endif
202
203
#if defined(CONFIG_TRACING_NET_CORE)
204
#define sys_port_trace_type_mask_net(trace_call) trace_call
205
#else
206
#define sys_port_trace_type_mask_net(trace_call)
207
#endif
208
209
/*
210
* We cannot positively enumerate all traced APIs, as applications may trace
211
* arbitrary custom APIs we know nothing about. Therefore we demand that tracing
212
* of an API must be actively disabled.
213
*
214
* This contrasts with object tracing/tracking as all traceable objects are well
215
* known, see the SYS_PORT_TRACING_TYPE_MASK approach below.
216
*/
217
#define _SYS_PORT_TRACE_IS_DISABLED(type) sys_port_trace_##type##_is_disabled
218
#define _SYS_PORT_TRACE_WRAP(func, ...) do { func(__VA_ARGS__); } while (false)
219
#define _SYS_PORT_TRACE_IF_NOT_DISABLED(type, func, ...) \
220
COND_CODE_1(_SYS_PORT_TRACE_IS_DISABLED(type), (), \
221
(_SYS_PORT_TRACE_WRAP(func, __VA_ARGS__)))
222
224
231
#define SYS_PORT_TRACING_TYPE_MASK(type, trace_call) \
232
_SYS_PORT_TRACING_TYPE_MASK(type)(trace_call)
233
244
#define SYS_PORT_TRACING_FUNC(type, func, ...) \
245
_SYS_PORT_TRACE_IF_NOT_DISABLED(type, _SYS_PORT_TRACING_FUNC(type, func), __VA_ARGS__)
246
257
#define SYS_PORT_TRACING_FUNC_ENTER(type, func, ...) \
258
_SYS_PORT_TRACE_IF_NOT_DISABLED(type, _SYS_PORT_TRACING_FUNC_ENTER(type, func), __VA_ARGS__)
259
269
#define SYS_PORT_TRACING_FUNC_BLOCKING(type, func, ...) \
270
_SYS_PORT_TRACE_IF_NOT_DISABLED(type, _SYS_PORT_TRACING_FUNC_BLOCKING(type, func), \
271
__VA_ARGS__)
272
283
#define SYS_PORT_TRACING_FUNC_EXIT(type, func, ...) \
284
_SYS_PORT_TRACE_IF_NOT_DISABLED(type, _SYS_PORT_TRACING_FUNC_EXIT(type, func), __VA_ARGS__)
285
292
#define SYS_PORT_TRACING_OBJ_INIT(obj_type, obj, ...) \
293
do { \
294
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
295
_SYS_PORT_TRACING_OBJ_INIT(obj_type)(obj, ##__VA_ARGS__)); \
296
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
297
_SYS_PORT_TRACKING_OBJ_INIT(obj_type)(obj, ##__VA_ARGS__)); \
298
} while (false)
299
310
#define SYS_PORT_TRACING_OBJ_FUNC(obj_type, func, obj, ...) \
311
do { \
312
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
313
_SYS_PORT_TRACING_OBJ_FUNC(obj_type, func)(obj, ##__VA_ARGS__)); \
314
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
315
_SYS_PORT_TRACKING_OBJ_FUNC(obj_type, func)(obj, ##__VA_ARGS__)); \
316
} while (false)
317
329
#define SYS_PORT_TRACING_OBJ_FUNC_ENTER(obj_type, func, obj, ...) \
330
do { \
331
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
332
_SYS_PORT_TRACING_OBJ_FUNC_ENTER(obj_type, func)(obj, ##__VA_ARGS__)); \
333
} while (false)
334
346
#define SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(obj_type, func, obj, timeout, ...) \
347
do { \
348
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
349
_SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(obj_type, func) \
350
(obj, timeout, ##__VA_ARGS__)); \
351
} while (false)
352
364
#define SYS_PORT_TRACING_OBJ_FUNC_EXIT(obj_type, func, obj, ...) \
365
do { \
366
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
367
_SYS_PORT_TRACING_OBJ_FUNC_EXIT(obj_type, func)(obj, ##__VA_ARGS__)); \
368
} while (false)
369
375
#define SYS_PORT_TRACING_TRACKING_FIELD(type) \
376
SYS_PORT_TRACING_TYPE_MASK(type, struct type *_obj_track_next;)
377
/* end of subsys_tracing_macros */
379
380
#endif
/* CONFIG_TRACING */
381
382
#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.14.0