171ad0f5eSJiri Olsa #ifndef __UNWIND_H 271ad0f5eSJiri Olsa #define __UNWIND_H 371ad0f5eSJiri Olsa 4d944c4eeSBorislav Petkov #include <linux/types.h> 571ad0f5eSJiri Olsa #include "event.h" 671ad0f5eSJiri Olsa #include "symbol.h" 7*66f066d8SNamhyung Kim #include "thread.h" 871ad0f5eSJiri Olsa 971ad0f5eSJiri Olsa struct unwind_entry { 1071ad0f5eSJiri Olsa struct map *map; 1171ad0f5eSJiri Olsa struct symbol *sym; 1271ad0f5eSJiri Olsa u64 ip; 1371ad0f5eSJiri Olsa }; 1471ad0f5eSJiri Olsa 1571ad0f5eSJiri Olsa typedef int (*unwind_entry_cb_t)(struct unwind_entry *entry, void *arg); 1671ad0f5eSJiri Olsa 179ff125d1SJiri Olsa #ifdef HAVE_DWARF_UNWIND_SUPPORT 1871ad0f5eSJiri Olsa int unwind__get_entries(unwind_entry_cb_t cb, void *arg, 1971ad0f5eSJiri Olsa struct machine *machine, 2071ad0f5eSJiri Olsa struct thread *thread, 2137676af1SArnaldo Carvalho de Melo struct perf_sample *data, int max_stack); 229ff125d1SJiri Olsa /* libunwind specific */ 239ff125d1SJiri Olsa #ifdef HAVE_LIBUNWIND_SUPPORT 24ea3da69dSJiri Olsa int libunwind__arch_reg_id(int regnum); 25*66f066d8SNamhyung Kim int unwind__prepare_access(struct thread *thread); 26*66f066d8SNamhyung Kim void unwind__finish_access(struct thread *thread); 27*66f066d8SNamhyung Kim #else 28*66f066d8SNamhyung Kim static inline int unwind__prepare_access(struct thread *thread __maybe_unused) 29*66f066d8SNamhyung Kim { 30*66f066d8SNamhyung Kim return 0; 31*66f066d8SNamhyung Kim } 32*66f066d8SNamhyung Kim 33*66f066d8SNamhyung Kim static inline void unwind__finish_access(struct thread *thread __maybe_unused) {} 349ff125d1SJiri Olsa #endif 3571ad0f5eSJiri Olsa #else 3671ad0f5eSJiri Olsa static inline int 371d037ca1SIrina Tirdea unwind__get_entries(unwind_entry_cb_t cb __maybe_unused, 381d037ca1SIrina Tirdea void *arg __maybe_unused, 391d037ca1SIrina Tirdea struct machine *machine __maybe_unused, 401d037ca1SIrina Tirdea struct thread *thread __maybe_unused, 4137676af1SArnaldo Carvalho de Melo struct perf_sample *data __maybe_unused, 4237676af1SArnaldo Carvalho de Melo int max_stack __maybe_unused) 4371ad0f5eSJiri Olsa { 4471ad0f5eSJiri Olsa return 0; 4571ad0f5eSJiri Olsa } 46*66f066d8SNamhyung Kim 47*66f066d8SNamhyung Kim static inline int unwind__prepare_access(struct thread *thread __maybe_unused) 48*66f066d8SNamhyung Kim { 49*66f066d8SNamhyung Kim return 0; 50*66f066d8SNamhyung Kim } 51*66f066d8SNamhyung Kim 52*66f066d8SNamhyung Kim static inline void unwind__finish_access(struct thread *thread __maybe_unused) {} 539ff125d1SJiri Olsa #endif /* HAVE_DWARF_UNWIND_SUPPORT */ 5471ad0f5eSJiri Olsa #endif /* __UNWIND_H */ 55