d58baf81582e2498938a989e28b2d0678b1c954a
[linux-3.10.git] / drivers / misc / tegra-profiler / eh_unwind.h
1 /*
2  * drivers/misc/tegra-profiler/eh_unwind.h
3  *
4  * Copyright (c) 2014, NVIDIA CORPORATION.  All rights reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  */
16
17 #ifndef __QUADD_EH_UNWIND_H__
18 #define __QUADD_EH_UNWIND_H__
19
20 struct pt_regs;
21 struct quadd_callchain;
22 struct quadd_ctx;
23 struct quadd_extables;
24 struct task_struct;
25 struct quadd_mmap_area;
26
27 unsigned int
28 quadd_aarch32_get_user_callchain_ut(struct pt_regs *regs,
29                                     struct quadd_callchain *cc,
30                                     struct task_struct *task);
31
32 int quadd_unwind_init(void);
33 void quadd_unwind_deinit(void);
34
35 int quadd_unwind_start(struct task_struct *task);
36 void quadd_unwind_stop(void);
37
38 int quadd_unwind_set_extab(struct quadd_extables *extabs,
39                            struct quadd_mmap_area *mmap);
40 void quadd_unwind_delete_mmap(struct quadd_mmap_area *mmap);
41
42 int
43 quadd_aarch32_is_ex_entry_exist(struct pt_regs *regs,
44                                 unsigned long addr,
45                                 struct task_struct *task);
46
47 void
48 quadd_unwind_set_tail_info(unsigned long vm_start,
49                            unsigned long tf_start,
50                            unsigned long tf_end);
51
52 struct extab_info {
53         unsigned long addr;
54         unsigned long length;
55
56         unsigned long mmap_offset;
57 };
58
59 struct extables {
60         struct extab_info extab;
61         struct extab_info exidx;
62 };
63
64 struct ex_region_info {
65         unsigned long vm_start;
66         unsigned long vm_end;
67
68         struct extables tabs;
69         struct quadd_mmap_area *mmap;
70
71         struct list_head list;
72
73         unsigned long tf_start;
74         unsigned long tf_end;
75 };
76
77 long quadd_search_ex_region(unsigned long key, struct ex_region_info *ri);
78
79 #endif  /* __QUADD_EH_UNWIND_H__ */