/src/hostap/src/utils/trace.h
Line | Count | Source |
1 | | /* |
2 | | * Backtrace debugging |
3 | | * Copyright (c) 2009, Jouni Malinen <j@w1.fi> |
4 | | * |
5 | | * This software may be distributed under the terms of the BSD license. |
6 | | * See README for more details. |
7 | | */ |
8 | | |
9 | | #ifndef TRACE_H |
10 | | #define TRACE_H |
11 | | |
12 | | #define WPA_TRACE_LEN 16 |
13 | | |
14 | | #ifdef WPA_TRACE |
15 | | #include <execinfo.h> |
16 | | |
17 | | #include "list.h" |
18 | | |
19 | | extern const char *current_btrace_ctx; |
20 | | |
21 | | #define WPA_TRACE_INFO \ |
22 | | void *btrace[WPA_TRACE_LEN]; \ |
23 | | int btrace_num; \ |
24 | | const char *btrace_ctx; |
25 | | |
26 | | struct wpa_trace_ref { |
27 | | struct dl_list list; |
28 | | const void *addr; |
29 | | WPA_TRACE_INFO |
30 | | }; |
31 | | #define WPA_TRACE_REF(name) struct wpa_trace_ref wpa_trace_ref_##name |
32 | | |
33 | | #define wpa_trace_dump(title, ptr) \ |
34 | | wpa_trace_dump_func((title), (ptr)->btrace, (ptr)->btrace_num, \ |
35 | | (ptr)->btrace_ctx) |
36 | | void wpa_trace_dump_func(const char *title, void **btrace, int btrace_num, |
37 | | const char *btrace_ctx); |
38 | | #define wpa_trace_record(ptr) \ |
39 | | do { \ |
40 | | (ptr)->btrace_num = backtrace((ptr)->btrace, WPA_TRACE_LEN); \ |
41 | | (ptr)->btrace_ctx = current_btrace_ctx; \ |
42 | | } while (0) |
43 | | void wpa_trace_show(const char *title); |
44 | | #define wpa_trace_add_ref(ptr, name, addr) \ |
45 | | wpa_trace_add_ref_func(&(ptr)->wpa_trace_ref_##name, (addr)) |
46 | | void wpa_trace_add_ref_func(struct wpa_trace_ref *ref, const void *addr); |
47 | | #define wpa_trace_remove_ref(ptr, name, addr) \ |
48 | | do { \ |
49 | | if ((addr)) \ |
50 | | dl_list_del(&(ptr)->wpa_trace_ref_##name.list); \ |
51 | | } while (0) |
52 | | void wpa_trace_check_ref(const void *addr); |
53 | | size_t wpa_trace_calling_func(const char *buf[], size_t len); |
54 | | void wpa_trace_set_context(const char *ctx); |
55 | | |
56 | | #else /* WPA_TRACE */ |
57 | | |
58 | | #define WPA_TRACE_INFO |
59 | | #define WPA_TRACE_REF(n) |
60 | | #define wpa_trace_dump(title, ptr) do { } while (0) |
61 | | #define wpa_trace_record(ptr) do { } while (0) |
62 | 0 | #define wpa_trace_show(title) do { } while (0) |
63 | | #define wpa_trace_add_ref(ptr, name, addr) do { } while (0) |
64 | | #define wpa_trace_remove_ref(ptr, name, addr) do { } while (0) |
65 | | #define wpa_trace_check_ref(addr) do { } while (0) |
66 | | |
67 | | static inline void wpa_trace_set_context(const char *ctx) |
68 | 0 | { |
69 | 0 | } |
70 | | |
71 | | #endif /* WPA_TRACE */ |
72 | | |
73 | | |
74 | | #ifdef WPA_TRACE_BFD |
75 | | |
76 | | void wpa_trace_dump_funcname(const char *title, void *pc); |
77 | | |
78 | | #else /* WPA_TRACE_BFD */ |
79 | | |
80 | | #define wpa_trace_dump_funcname(title, pc) do { } while (0) |
81 | | |
82 | | #endif /* WPA_TRACE_BFD */ |
83 | | |
84 | | void wpa_trace_deinit(void); |
85 | | |
86 | | #endif /* TRACE_H */ |