1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#ifndef __UNWIND_H
2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define __UNWIND_H
3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "types.h"
5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "event.h"
6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "symbol.h"
7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct unwind_entry {
9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct map	*map;
10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct symbol	*sym;
11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64		ip;
12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengtypedef int (*unwind_entry_cb_t)(struct unwind_entry *entry, void *arg);
15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#ifdef LIBUNWIND_SUPPORT
17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint unwind__get_entries(unwind_entry_cb_t cb, void *arg,
18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			struct machine *machine,
19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			struct thread *thread,
20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			u64 sample_uregs,
21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			struct perf_sample *data);
22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint unwind__arch_reg_id(int regnum);
23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#else
24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic inline int
25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengunwind__get_entries(unwind_entry_cb_t cb __maybe_unused,
26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		    void *arg __maybe_unused,
27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		    struct machine *machine __maybe_unused,
28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		    struct thread *thread __maybe_unused,
29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		    u64 sample_uregs __maybe_unused,
30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		    struct perf_sample *data __maybe_unused)
31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#endif /* LIBUNWIND_SUPPORT */
35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#endif /* __UNWIND_H */
36