xref: /aosp_15_r20/external/wpa_supplicant_8/src/utils/trace.h (revision 03f9172ca588f91df233974f4258bab95191f931)
1*03f9172cSAndroid Build Coastguard Worker /*
2*03f9172cSAndroid Build Coastguard Worker  * Backtrace debugging
3*03f9172cSAndroid Build Coastguard Worker  * Copyright (c) 2009, Jouni Malinen <[email protected]>
4*03f9172cSAndroid Build Coastguard Worker  *
5*03f9172cSAndroid Build Coastguard Worker  * This software may be distributed under the terms of the BSD license.
6*03f9172cSAndroid Build Coastguard Worker  * See README for more details.
7*03f9172cSAndroid Build Coastguard Worker  */
8*03f9172cSAndroid Build Coastguard Worker 
9*03f9172cSAndroid Build Coastguard Worker #ifndef TRACE_H
10*03f9172cSAndroid Build Coastguard Worker #define TRACE_H
11*03f9172cSAndroid Build Coastguard Worker 
12*03f9172cSAndroid Build Coastguard Worker #define WPA_TRACE_LEN 16
13*03f9172cSAndroid Build Coastguard Worker 
14*03f9172cSAndroid Build Coastguard Worker #ifdef WPA_TRACE
15*03f9172cSAndroid Build Coastguard Worker #include <execinfo.h>
16*03f9172cSAndroid Build Coastguard Worker 
17*03f9172cSAndroid Build Coastguard Worker #include "list.h"
18*03f9172cSAndroid Build Coastguard Worker 
19*03f9172cSAndroid Build Coastguard Worker #define WPA_TRACE_INFO void *btrace[WPA_TRACE_LEN]; int btrace_num;
20*03f9172cSAndroid Build Coastguard Worker 
21*03f9172cSAndroid Build Coastguard Worker struct wpa_trace_ref {
22*03f9172cSAndroid Build Coastguard Worker 	struct dl_list list;
23*03f9172cSAndroid Build Coastguard Worker 	const void *addr;
24*03f9172cSAndroid Build Coastguard Worker 	WPA_TRACE_INFO
25*03f9172cSAndroid Build Coastguard Worker };
26*03f9172cSAndroid Build Coastguard Worker #define WPA_TRACE_REF(name) struct wpa_trace_ref wpa_trace_ref_##name
27*03f9172cSAndroid Build Coastguard Worker 
28*03f9172cSAndroid Build Coastguard Worker #define wpa_trace_dump(title, ptr) \
29*03f9172cSAndroid Build Coastguard Worker 	wpa_trace_dump_func((title), (ptr)->btrace, (ptr)->btrace_num)
30*03f9172cSAndroid Build Coastguard Worker void wpa_trace_dump_func(const char *title, void **btrace, int btrace_num);
31*03f9172cSAndroid Build Coastguard Worker #define wpa_trace_record(ptr) \
32*03f9172cSAndroid Build Coastguard Worker 	(ptr)->btrace_num = backtrace((ptr)->btrace, WPA_TRACE_LEN)
33*03f9172cSAndroid Build Coastguard Worker void wpa_trace_show(const char *title);
34*03f9172cSAndroid Build Coastguard Worker #define wpa_trace_add_ref(ptr, name, addr) \
35*03f9172cSAndroid Build Coastguard Worker 	wpa_trace_add_ref_func(&(ptr)->wpa_trace_ref_##name, (addr))
36*03f9172cSAndroid Build Coastguard Worker void wpa_trace_add_ref_func(struct wpa_trace_ref *ref, const void *addr);
37*03f9172cSAndroid Build Coastguard Worker #define wpa_trace_remove_ref(ptr, name, addr)	\
38*03f9172cSAndroid Build Coastguard Worker 	do { \
39*03f9172cSAndroid Build Coastguard Worker 		if ((addr)) \
40*03f9172cSAndroid Build Coastguard Worker 			dl_list_del(&(ptr)->wpa_trace_ref_##name.list); \
41*03f9172cSAndroid Build Coastguard Worker 	} while (0)
42*03f9172cSAndroid Build Coastguard Worker void wpa_trace_check_ref(const void *addr);
43*03f9172cSAndroid Build Coastguard Worker size_t wpa_trace_calling_func(const char *buf[], size_t len);
44*03f9172cSAndroid Build Coastguard Worker 
45*03f9172cSAndroid Build Coastguard Worker #else /* WPA_TRACE */
46*03f9172cSAndroid Build Coastguard Worker 
47*03f9172cSAndroid Build Coastguard Worker #define WPA_TRACE_INFO
48*03f9172cSAndroid Build Coastguard Worker #define WPA_TRACE_REF(n)
49*03f9172cSAndroid Build Coastguard Worker #define wpa_trace_dump(title, ptr) do { } while (0)
50*03f9172cSAndroid Build Coastguard Worker #define wpa_trace_record(ptr) do { } while (0)
51*03f9172cSAndroid Build Coastguard Worker #define wpa_trace_show(title) do { } while (0)
52*03f9172cSAndroid Build Coastguard Worker #define wpa_trace_add_ref(ptr, name, addr) do { } while (0)
53*03f9172cSAndroid Build Coastguard Worker #define wpa_trace_remove_ref(ptr, name, addr) do { } while (0)
54*03f9172cSAndroid Build Coastguard Worker #define wpa_trace_check_ref(addr) do { } while (0)
55*03f9172cSAndroid Build Coastguard Worker 
56*03f9172cSAndroid Build Coastguard Worker #endif /* WPA_TRACE */
57*03f9172cSAndroid Build Coastguard Worker 
58*03f9172cSAndroid Build Coastguard Worker 
59*03f9172cSAndroid Build Coastguard Worker #ifdef WPA_TRACE_BFD
60*03f9172cSAndroid Build Coastguard Worker 
61*03f9172cSAndroid Build Coastguard Worker void wpa_trace_dump_funcname(const char *title, void *pc);
62*03f9172cSAndroid Build Coastguard Worker 
63*03f9172cSAndroid Build Coastguard Worker #else /* WPA_TRACE_BFD */
64*03f9172cSAndroid Build Coastguard Worker 
65*03f9172cSAndroid Build Coastguard Worker #define wpa_trace_dump_funcname(title, pc) do { } while (0)
66*03f9172cSAndroid Build Coastguard Worker 
67*03f9172cSAndroid Build Coastguard Worker #endif /* WPA_TRACE_BFD */
68*03f9172cSAndroid Build Coastguard Worker 
69*03f9172cSAndroid Build Coastguard Worker void wpa_trace_deinit(void);
70*03f9172cSAndroid Build Coastguard Worker 
71*03f9172cSAndroid Build Coastguard Worker #endif /* TRACE_H */
72