Zephyr API Documentation  3.0.0
A Scalable Open Source RTOS
3.0.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
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#if !defined(CONFIG_TRACING) && !defined(__DOXYGEN__)
10
11#define SYS_PORT_TRACING_FUNC(type, func, ...) do { } while (false)
12#define SYS_PORT_TRACING_FUNC_ENTER(type, func, ...) do { } while (false)
13#define SYS_PORT_TRACING_FUNC_BLOCKING(type, func, ...) do { } while (false)
14#define SYS_PORT_TRACING_FUNC_EXIT(type, func, ...) do { } while (false)
15#define SYS_PORT_TRACING_OBJ_INIT(obj_type, obj, ...) do { } while (false)
16#define SYS_PORT_TRACING_OBJ_FUNC(obj_type, func, obj, ...) do { } while (false)
17#define SYS_PORT_TRACING_OBJ_FUNC_ENTER(obj_type, func, obj, ...) do { } while (false)
18#define SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(obj_type, func, obj, ...) do { } while (false)
19#define SYS_PORT_TRACING_OBJ_FUNC_EXIT(obj_type, func, obj, ...) do { } while (false)
20
21#define SYS_PORT_TRACING_TRACKING_FIELD(type)
22
23#else
24
34/*
35 * Helper macros used by the extended tracing system
36 */
37
38#define _SYS_PORT_TRACING_TYPE_MASK(type) \
39 sys_port_trace_type_mask_ ## type
40#define _SYS_PORT_TRACING_FUNC(name, func) \
41 sys_port_trace_ ## name ## _ ## func
42#define _SYS_PORT_TRACING_FUNC_ENTER(name, func) \
43 sys_port_trace_ ## name ## _ ## func ## _enter
44#define _SYS_PORT_TRACING_FUNC_BLOCKING(name, func) \
45 sys_port_trace_ ## name ## _ ## func ## _blocking
46#define _SYS_PORT_TRACING_FUNC_EXIT(name, func) \
47 sys_port_trace_ ## name ## _ ## func ## _exit
48#define _SYS_PORT_TRACING_OBJ_INIT(name) \
49 sys_port_trace_ ## name ## _init
50#define _SYS_PORT_TRACING_OBJ_FUNC(name, func) \
51 sys_port_trace_ ## name ## _ ## func
52#define _SYS_PORT_TRACING_OBJ_FUNC_ENTER(name, func) \
53 sys_port_trace_ ## name ## _ ## func ## _enter
54#define _SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(name, func) \
55 sys_port_trace_ ## name ## _ ## func ## _blocking
56#define _SYS_PORT_TRACING_OBJ_FUNC_EXIT(name, func) \
57 sys_port_trace_ ## name ## _ ## func ## _exit
58
59/*
60 * Helper macros for the object tracking system
61 */
62
63#define _SYS_PORT_TRACKING_OBJ_INIT(name) \
64 sys_port_track_ ## name ## _init
65#define _SYS_PORT_TRACKING_OBJ_FUNC(name, func) \
66 sys_port_track_ ## name ## _ ## func
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#endif
77
78#if defined(CONFIG_TRACING_WORK)
79 #define sys_port_trace_type_mask_k_work(trace_call) trace_call
80 #define sys_port_trace_type_mask_k_work_queue(trace_call) trace_call
81 #define sys_port_trace_type_mask_k_work_delayable(trace_call) trace_call
82 #define sys_port_trace_type_mask_k_work_poll(trace_call) trace_call
83#else
84 #define sys_port_trace_type_mask_k_work(trace_call)
85 #define sys_port_trace_type_mask_k_work_queue(trace_call)
86 #define sys_port_trace_type_mask_k_work_delayable(trace_call)
87 #define sys_port_trace_type_mask_k_work_poll(trace_call)
88#endif
89
90#if defined(CONFIG_TRACING_SEMAPHORE)
91 #define sys_port_trace_type_mask_k_sem(trace_call) trace_call
92#else
93 #define sys_port_trace_type_mask_k_sem(trace_call)
94#endif
95
96#if defined(CONFIG_TRACING_MUTEX)
97 #define sys_port_trace_type_mask_k_mutex(trace_call) trace_call
98#else
99 #define sys_port_trace_type_mask_k_mutex(trace_call)
100#endif
101
102#if defined(CONFIG_TRACING_CONDVAR)
103 #define sys_port_trace_type_mask_k_condvar(trace_call) trace_call
104#else
105 #define sys_port_trace_type_mask_k_condvar(trace_call)
106#endif
107
108#if defined(CONFIG_TRACING_QUEUE)
109 #define sys_port_trace_type_mask_k_queue(trace_call) trace_call
110#else
111 #define sys_port_trace_type_mask_k_queue(trace_call)
112#endif
113
114#if defined(CONFIG_TRACING_FIFO)
115 #define sys_port_trace_type_mask_k_fifo(trace_call) trace_call
116#else
117 #define sys_port_trace_type_mask_k_fifo(trace_call)
118#endif
119
120#if defined(CONFIG_TRACING_LIFO)
121 #define sys_port_trace_type_mask_k_lifo(trace_call) trace_call
122#else
123 #define sys_port_trace_type_mask_k_lifo(trace_call)
124#endif
125
126#if defined(CONFIG_TRACING_STACK)
127 #define sys_port_trace_type_mask_k_stack(trace_call) trace_call
128#else
129 #define sys_port_trace_type_mask_k_stack(trace_call)
130#endif
131
132#if defined(CONFIG_TRACING_MESSAGE_QUEUE)
133 #define sys_port_trace_type_mask_k_msgq(trace_call) trace_call
134#else
135 #define sys_port_trace_type_mask_k_msgq(trace_call)
136#endif
137
138#if defined(CONFIG_TRACING_MAILBOX)
139 #define sys_port_trace_type_mask_k_mbox(trace_call) trace_call
140#else
141 #define sys_port_trace_type_mask_k_mbox(trace_call)
142#endif
143
144#if defined(CONFIG_TRACING_PIPE)
145 #define sys_port_trace_type_mask_k_pipe(trace_call) trace_call
146#else
147 #define sys_port_trace_type_mask_k_pipe(trace_call)
148#endif
149
150#if defined(CONFIG_TRACING_HEAP)
151 #define sys_port_trace_type_mask_k_heap(trace_call) trace_call
152 #define sys_port_trace_type_mask_k_heap_sys(trace_call) trace_call
153#else
154 #define sys_port_trace_type_mask_k_heap(trace_call)
155 #define sys_port_trace_type_mask_k_heap_sys(trace_call)
156#endif
157
158#if defined(CONFIG_TRACING_MEMORY_SLAB)
159 #define sys_port_trace_type_mask_k_mem_slab(trace_call) trace_call
160#else
161 #define sys_port_trace_type_mask_k_mem_slab(trace_call)
162#endif
163
164#if defined(CONFIG_TRACING_TIMER)
165 #define sys_port_trace_type_mask_k_timer(trace_call) trace_call
166#else
167 #define sys_port_trace_type_mask_k_timer(trace_call)
168#endif
169
170#if defined(CONFIG_TRACING_EVENT)
171 #define sys_port_trace_type_mask_k_event(trace_call) trace_call
172#else
173 #define sys_port_trace_type_mask_k_event(trace_call)
174#endif
175
184#define SYS_PORT_TRACING_TYPE_MASK(type, trace_call) \
185 _SYS_PORT_TRACING_TYPE_MASK(type)(trace_call)
186
199#define SYS_PORT_TRACING_FUNC(type, func, ...) \
200 do { \
201 _SYS_PORT_TRACING_FUNC(type, func)(__VA_ARGS__); \
202 } while (false)
203
216#define SYS_PORT_TRACING_FUNC_ENTER(type, func, ...) \
217 do { \
218 _SYS_PORT_TRACING_FUNC_ENTER(type, func)(__VA_ARGS__); \
219 } while (false)
220
232#define SYS_PORT_TRACING_FUNC_BLOCKING(type, func, ...) \
233 do { \
234 _SYS_PORT_TRACING_FUNC_BLOCKING(type, func)(__VA_ARGS__); \
235 } while (false)
236
249#define SYS_PORT_TRACING_FUNC_EXIT(type, func, ...) \
250 do { \
251 _SYS_PORT_TRACING_FUNC_EXIT(type, func)(__VA_ARGS__); \
252 } while (false)
253
262#define SYS_PORT_TRACING_OBJ_INIT(obj_type, obj, ...) \
263 do { \
264 SYS_PORT_TRACING_TYPE_MASK(obj_type, \
265 _SYS_PORT_TRACING_OBJ_INIT(obj_type)(obj, ##__VA_ARGS__)); \
266 SYS_PORT_TRACING_TYPE_MASK(obj_type, \
267 _SYS_PORT_TRACKING_OBJ_INIT(obj_type)(obj, ##__VA_ARGS__)); \
268 } while (false)
269
280#define SYS_PORT_TRACING_OBJ_FUNC(obj_type, func, obj, ...) \
281 do { \
282 SYS_PORT_TRACING_TYPE_MASK(obj_type, \
283 _SYS_PORT_TRACING_OBJ_FUNC(obj_type, func)(obj, ##__VA_ARGS__)); \
284 SYS_PORT_TRACING_TYPE_MASK(obj_type, \
285 _SYS_PORT_TRACKING_OBJ_FUNC(obj_type, func)(obj, ##__VA_ARGS__)); \
286 } while (false)
287
299#define SYS_PORT_TRACING_OBJ_FUNC_ENTER(obj_type, func, obj, ...) \
300 do { \
301 SYS_PORT_TRACING_TYPE_MASK(obj_type, \
302 _SYS_PORT_TRACING_OBJ_FUNC_ENTER(obj_type, func)(obj, ##__VA_ARGS__)); \
303 } while (false)
304
316#define SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(obj_type, func, obj, timeout, ...) \
317 do { \
318 SYS_PORT_TRACING_TYPE_MASK(obj_type, \
319 _SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(obj_type, func) \
320 (obj, timeout, ##__VA_ARGS__)); \
321 } while (false)
322
334#define SYS_PORT_TRACING_OBJ_FUNC_EXIT(obj_type, func, obj, ...) \
335 do { \
336 SYS_PORT_TRACING_TYPE_MASK(obj_type, \
337 _SYS_PORT_TRACING_OBJ_FUNC_EXIT(obj_type, func)(obj, ##__VA_ARGS__)); \
338 } while (false)
339
345#define SYS_PORT_TRACING_TRACKING_FIELD(type) \
346 SYS_PORT_TRACING_TYPE_MASK(type, struct type *_obj_track_next;)
347 /* end of subsys_tracing_macros */
349
350#endif /* CONFIG_TRACING */
351
352#endif /* ZEPHYR_INCLUDE_TRACING_TRACING_MACROS_H_ */