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
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_ */
Macro utilities.