xref: /openbmc/linux/tools/perf/util/unwind.h (revision 66f066d8994bd146304bab72fa09c1e644c4b3ff)
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