Zephyr Project API
4.0.0
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
9
#include <
zephyr/sys/util_macro.h
>
10
11
#if !defined(CONFIG_TRACING) && !defined(__DOXYGEN__)
12
13
#define SYS_PORT_TRACING_FUNC(type, func, ...) do { } while (false)
14
#define SYS_PORT_TRACING_FUNC_ENTER(type, func, ...) do { } while (false)
15
#define SYS_PORT_TRACING_FUNC_BLOCKING(type, func, ...) do { } while (false)
16
#define SYS_PORT_TRACING_FUNC_EXIT(type, func, ...) do { } while (false)
17
#define SYS_PORT_TRACING_OBJ_INIT(obj_type, obj, ...) do { } while (false)
18
#define SYS_PORT_TRACING_OBJ_FUNC(obj_type, func, obj, ...) do { } while (false)
19
#define SYS_PORT_TRACING_OBJ_FUNC_ENTER(obj_type, func, obj, ...) do { } while (false)
20
#define SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(obj_type, func, obj, ...) do { } while (false)
21
#define SYS_PORT_TRACING_OBJ_FUNC_EXIT(obj_type, func, obj, ...) do { } while (false)
22
23
#define SYS_PORT_TRACING_TRACKING_FIELD(type)
24
25
#else
26
36
/*
37
* Helper macros used by the extended tracing system
38
*/
39
40
#define _SYS_PORT_TRACING_TYPE_MASK(type) \
41
sys_port_trace_type_mask_ ## type
42
#define _SYS_PORT_TRACING_FUNC(name, func) \
43
sys_port_trace_ ## name ## _ ## func
44
#define _SYS_PORT_TRACING_FUNC_ENTER(name, func) \
45
sys_port_trace_ ## name ## _ ## func ## _enter
46
#define _SYS_PORT_TRACING_FUNC_BLOCKING(name, func) \
47
sys_port_trace_ ## name ## _ ## func ## _blocking
48
#define _SYS_PORT_TRACING_FUNC_EXIT(name, func) \
49
sys_port_trace_ ## name ## _ ## func ## _exit
50
#define _SYS_PORT_TRACING_OBJ_INIT(name) \
51
sys_port_trace_ ## name ## _init
52
#define _SYS_PORT_TRACING_OBJ_FUNC(name, func) \
53
sys_port_trace_ ## name ## _ ## func
54
#define _SYS_PORT_TRACING_OBJ_FUNC_ENTER(name, func) \
55
sys_port_trace_ ## name ## _ ## func ## _enter
56
#define _SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(name, func) \
57
sys_port_trace_ ## name ## _ ## func ## _blocking
58
#define _SYS_PORT_TRACING_OBJ_FUNC_EXIT(name, func) \
59
sys_port_trace_ ## name ## _ ## func ## _exit
60
61
/*
62
* Helper macros for the object tracking system
63
*/
64
65
#define _SYS_PORT_TRACKING_OBJ_INIT(name) \
66
sys_port_track_ ## name ## _init
67
#define _SYS_PORT_TRACKING_OBJ_FUNC(name, func) \
68
sys_port_track_ ## name ## _ ## func
69
70
/*
71
* Object trace macros part of the system for checking if certain
72
* objects should be traced or not depending on the tracing configuration.
73
*/
74
#if defined(CONFIG_TRACING_THREAD)
75
#define sys_port_trace_type_mask_k_thread(trace_call) trace_call
76
#else
77
#define sys_port_trace_type_mask_k_thread(trace_call)
78
#define sys_port_trace_k_thread_is_disabled 1
79
#endif
80
81
#if defined(CONFIG_TRACING_WORK)
82
#define sys_port_trace_type_mask_k_work(trace_call) trace_call
83
#define sys_port_trace_type_mask_k_work_queue(trace_call) trace_call
84
#define sys_port_trace_type_mask_k_work_delayable(trace_call) trace_call
85
#define sys_port_trace_type_mask_k_work_poll(trace_call) trace_call
86
#else
87
#define sys_port_trace_type_mask_k_work(trace_call)
88
#define sys_port_trace_type_mask_k_work_queue(trace_call)
89
#define sys_port_trace_type_mask_k_work_delayable(trace_call)
90
#define sys_port_trace_type_mask_k_work_poll(trace_call)
91
#endif
92
93
#if defined(CONFIG_TRACING_SEMAPHORE)
94
#define sys_port_trace_type_mask_k_sem(trace_call) trace_call
95
#else
96
#define sys_port_trace_type_mask_k_sem(trace_call)
97
#endif
98
99
#if defined(CONFIG_TRACING_MUTEX)
100
#define sys_port_trace_type_mask_k_mutex(trace_call) trace_call
101
#else
102
#define sys_port_trace_type_mask_k_mutex(trace_call)
103
#endif
104
105
#if defined(CONFIG_TRACING_CONDVAR)
106
#define sys_port_trace_type_mask_k_condvar(trace_call) trace_call
107
#else
108
#define sys_port_trace_type_mask_k_condvar(trace_call)
109
#endif
110
111
#if defined(CONFIG_TRACING_QUEUE)
112
#define sys_port_trace_type_mask_k_queue(trace_call) trace_call
113
#else
114
#define sys_port_trace_type_mask_k_queue(trace_call)
115
#endif
116
117
#if defined(CONFIG_TRACING_FIFO)
118
#define sys_port_trace_type_mask_k_fifo(trace_call) trace_call
119
#else
120
#define sys_port_trace_type_mask_k_fifo(trace_call)
121
#endif
122
123
#if defined(CONFIG_TRACING_LIFO)
124
#define sys_port_trace_type_mask_k_lifo(trace_call) trace_call
125
#else
126
#define sys_port_trace_type_mask_k_lifo(trace_call)
127
#endif
128
129
#if defined(CONFIG_TRACING_STACK)
130
#define sys_port_trace_type_mask_k_stack(trace_call) trace_call
131
#else
132
#define sys_port_trace_type_mask_k_stack(trace_call)
133
#endif
134
135
#if defined(CONFIG_TRACING_MESSAGE_QUEUE)
136
#define sys_port_trace_type_mask_k_msgq(trace_call) trace_call
137
#else
138
#define sys_port_trace_type_mask_k_msgq(trace_call)
139
#endif
140
141
#if defined(CONFIG_TRACING_MAILBOX)
142
#define sys_port_trace_type_mask_k_mbox(trace_call) trace_call
143
#else
144
#define sys_port_trace_type_mask_k_mbox(trace_call)
145
#endif
146
147
#if defined(CONFIG_TRACING_PIPE)
148
#define sys_port_trace_type_mask_k_pipe(trace_call) trace_call
149
#else
150
#define sys_port_trace_type_mask_k_pipe(trace_call)
151
#endif
152
153
#if defined(CONFIG_TRACING_HEAP)
154
#define sys_port_trace_type_mask_k_heap(trace_call) trace_call
155
#define sys_port_trace_type_mask_k_heap_sys(trace_call) trace_call
156
#else
157
#define sys_port_trace_type_mask_k_heap(trace_call)
158
#define sys_port_trace_type_mask_k_heap_sys(trace_call)
159
#endif
160
161
#if defined(CONFIG_TRACING_MEMORY_SLAB)
162
#define sys_port_trace_type_mask_k_mem_slab(trace_call) trace_call
163
#else
164
#define sys_port_trace_type_mask_k_mem_slab(trace_call)
165
#endif
166
167
#if defined(CONFIG_TRACING_TIMER)
168
#define sys_port_trace_type_mask_k_timer(trace_call) trace_call
169
#else
170
#define sys_port_trace_type_mask_k_timer(trace_call)
171
#endif
172
173
#if defined(CONFIG_TRACING_EVENT)
174
#define sys_port_trace_type_mask_k_event(trace_call) trace_call
175
#else
176
#define sys_port_trace_type_mask_k_event(trace_call)
177
#endif
178
179
#ifndef CONFIG_TRACING_POLLING
180
#define sys_port_trace_k_poll_api_is_disabled 1
181
#define sys_port_trace_k_work_poll_is_disabled 1
182
#endif
183
184
#ifndef CONFIG_TRACING_PM
185
#define sys_port_trace_pm_is_disabled 1
186
#endif
187
188
#if defined(CONFIG_TRACING_NET_SOCKETS)
189
#define sys_port_trace_type_mask_socket(trace_call) trace_call
190
#else
191
#define sys_port_trace_type_mask_socket(trace_call)
192
#endif
193
194
#if defined(CONFIG_TRACING_NET_CORE)
195
#define sys_port_trace_type_mask_net(trace_call) trace_call
196
#else
197
#define sys_port_trace_type_mask_net(trace_call)
198
#endif
199
200
/*
201
* We cannot positively enumerate all traced APIs, as applications may trace
202
* arbitrary custom APIs we know nothing about. Therefore we demand that tracing
203
* of an API must be actively disabled.
204
*
205
* This contrasts with object tracing/tracking as all traceable objects are well
206
* known, see the SYS_PORT_TRACING_TYPE_MASK approach below.
207
*/
208
#define _SYS_PORT_TRACE_IS_DISABLED(type) sys_port_trace_##type##_is_disabled
209
#define _SYS_PORT_TRACE_WRAP(func, ...) do { func(__VA_ARGS__); } while (false)
210
#define _SYS_PORT_TRACE_IF_NOT_DISABLED(type, func, ...) \
211
COND_CODE_1(_SYS_PORT_TRACE_IS_DISABLED(type), (), \
212
(_SYS_PORT_TRACE_WRAP(func, __VA_ARGS__)))
213
222
#define SYS_PORT_TRACING_TYPE_MASK(type, trace_call) \
223
_SYS_PORT_TRACING_TYPE_MASK(type)(trace_call)
224
235
#define SYS_PORT_TRACING_FUNC(type, func, ...) \
236
_SYS_PORT_TRACE_IF_NOT_DISABLED(type, _SYS_PORT_TRACING_FUNC(type, func), __VA_ARGS__)
237
248
#define SYS_PORT_TRACING_FUNC_ENTER(type, func, ...) \
249
_SYS_PORT_TRACE_IF_NOT_DISABLED(type, _SYS_PORT_TRACING_FUNC_ENTER(type, func), __VA_ARGS__)
250
260
#define SYS_PORT_TRACING_FUNC_BLOCKING(type, func, ...) \
261
_SYS_PORT_TRACE_IF_NOT_DISABLED(type, _SYS_PORT_TRACING_FUNC_BLOCKING(type, func), \
262
__VA_ARGS__)
263
274
#define SYS_PORT_TRACING_FUNC_EXIT(type, func, ...) \
275
_SYS_PORT_TRACE_IF_NOT_DISABLED(type, _SYS_PORT_TRACING_FUNC_EXIT(type, func), __VA_ARGS__)
276
283
#define SYS_PORT_TRACING_OBJ_INIT(obj_type, obj, ...) \
284
do { \
285
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
286
_SYS_PORT_TRACING_OBJ_INIT(obj_type)(obj, ##__VA_ARGS__)); \
287
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
288
_SYS_PORT_TRACKING_OBJ_INIT(obj_type)(obj, ##__VA_ARGS__)); \
289
} while (false)
290
301
#define SYS_PORT_TRACING_OBJ_FUNC(obj_type, func, obj, ...) \
302
do { \
303
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
304
_SYS_PORT_TRACING_OBJ_FUNC(obj_type, func)(obj, ##__VA_ARGS__)); \
305
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
306
_SYS_PORT_TRACKING_OBJ_FUNC(obj_type, func)(obj, ##__VA_ARGS__)); \
307
} while (false)
308
320
#define SYS_PORT_TRACING_OBJ_FUNC_ENTER(obj_type, func, obj, ...) \
321
do { \
322
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
323
_SYS_PORT_TRACING_OBJ_FUNC_ENTER(obj_type, func)(obj, ##__VA_ARGS__)); \
324
} while (false)
325
337
#define SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(obj_type, func, obj, timeout, ...) \
338
do { \
339
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
340
_SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(obj_type, func) \
341
(obj, timeout, ##__VA_ARGS__)); \
342
} while (false)
343
355
#define SYS_PORT_TRACING_OBJ_FUNC_EXIT(obj_type, func, obj, ...) \
356
do { \
357
SYS_PORT_TRACING_TYPE_MASK(obj_type, \
358
_SYS_PORT_TRACING_OBJ_FUNC_EXIT(obj_type, func)(obj, ##__VA_ARGS__)); \
359
} while (false)
360
366
#define SYS_PORT_TRACING_TRACKING_FIELD(type) \
367
SYS_PORT_TRACING_TYPE_MASK(type, struct type *_obj_track_next;)
368
/* end of subsys_tracing_macros */
370
371
#endif
/* CONFIG_TRACING */
372
373
#endif
/* ZEPHYR_INCLUDE_TRACING_TRACING_MACROS_H_ */
util_macro.h
Macro utilities.
include
zephyr
tracing
tracing_macros.h
Generated on Mon Nov 25 2024 09:18:00 for Zephyr Project API by
1.9.8