Commit | Line | Data |
---|---|---|
71ad0f5e JO |
1 | #ifndef __UNWIND_H |
2 | #define __UNWIND_H | |
3 | ||
d944c4ee | 4 | #include <linux/types.h> |
71ad0f5e JO |
5 | #include "event.h" |
6 | #include "symbol.h" | |
66f066d8 | 7 | #include "thread.h" |
71ad0f5e JO |
8 | |
9 | struct unwind_entry { | |
10 | struct map *map; | |
11 | struct symbol *sym; | |
12 | u64 ip; | |
13 | }; | |
14 | ||
15 | typedef int (*unwind_entry_cb_t)(struct unwind_entry *entry, void *arg); | |
16 | ||
f83c0415 HK |
17 | struct unwind_libunwind_ops { |
18 | int (*prepare_access)(struct thread *thread); | |
19 | void (*flush_access)(struct thread *thread); | |
20 | void (*finish_access)(struct thread *thread); | |
21 | int (*get_entries)(unwind_entry_cb_t cb, void *arg, | |
22 | struct thread *thread, | |
23 | struct perf_sample *data, int max_stack); | |
24 | }; | |
25 | ||
9ff125d1 | 26 | #ifdef HAVE_DWARF_UNWIND_SUPPORT |
71ad0f5e | 27 | int unwind__get_entries(unwind_entry_cb_t cb, void *arg, |
71ad0f5e | 28 | struct thread *thread, |
37676af1 | 29 | struct perf_sample *data, int max_stack); |
9ff125d1 JO |
30 | /* libunwind specific */ |
31 | #ifdef HAVE_LIBUNWIND_SUPPORT | |
eeb118c5 HK |
32 | #ifndef LIBUNWIND__ARCH_REG_ID |
33 | #define LIBUNWIND__ARCH_REG_ID(regnum) libunwind__arch_reg_id(regnum) | |
34 | #endif | |
35 | int LIBUNWIND__ARCH_REG_ID(int regnum); | |
d64ec10e | 36 | int unwind__prepare_access(struct thread *thread, struct map *map); |
380b5143 | 37 | void unwind__flush_access(struct thread *thread); |
66f066d8 NK |
38 | void unwind__finish_access(struct thread *thread); |
39 | #else | |
d64ec10e HK |
40 | static inline int unwind__prepare_access(struct thread *thread __maybe_unused, |
41 | struct map *map __maybe_unused) | |
66f066d8 NK |
42 | { |
43 | return 0; | |
44 | } | |
45 | ||
380b5143 | 46 | static inline void unwind__flush_access(struct thread *thread __maybe_unused) {} |
66f066d8 | 47 | static inline void unwind__finish_access(struct thread *thread __maybe_unused) {} |
9ff125d1 | 48 | #endif |
71ad0f5e JO |
49 | #else |
50 | static inline int | |
1d037ca1 IT |
51 | unwind__get_entries(unwind_entry_cb_t cb __maybe_unused, |
52 | void *arg __maybe_unused, | |
1d037ca1 | 53 | struct thread *thread __maybe_unused, |
37676af1 ACM |
54 | struct perf_sample *data __maybe_unused, |
55 | int max_stack __maybe_unused) | |
71ad0f5e JO |
56 | { |
57 | return 0; | |
58 | } | |
66f066d8 | 59 | |
d64ec10e HK |
60 | static inline int unwind__prepare_access(struct thread *thread __maybe_unused, |
61 | struct map *map __maybe_unused) | |
66f066d8 NK |
62 | { |
63 | return 0; | |
64 | } | |
65 | ||
380b5143 | 66 | static inline void unwind__flush_access(struct thread *thread __maybe_unused) {} |
66f066d8 | 67 | static inline void unwind__finish_access(struct thread *thread __maybe_unused) {} |
9ff125d1 | 68 | #endif /* HAVE_DWARF_UNWIND_SUPPORT */ |
71ad0f5e | 69 | #endif /* __UNWIND_H */ |