0001
0002
0003
0004
0005
0006
0007
0008 #ifndef __ASM_UNWIND_H
0009 #define __ASM_UNWIND_H
0010
0011 #ifndef __ASSEMBLY__
0012
0013
0014 enum unwind_reason_code {
0015 URC_OK = 0,
0016 URC_CONTINUE_UNWIND = 8,
0017 URC_FAILURE = 9
0018 };
0019
0020 struct unwind_idx {
0021 unsigned long addr_offset;
0022 unsigned long insn;
0023 };
0024
0025 struct unwind_table {
0026 struct list_head list;
0027 struct list_head mod_list;
0028 const struct unwind_idx *start;
0029 const struct unwind_idx *origin;
0030 const struct unwind_idx *stop;
0031 unsigned long begin_addr;
0032 unsigned long end_addr;
0033 };
0034
0035 extern struct unwind_table *unwind_table_add(unsigned long start,
0036 unsigned long size,
0037 unsigned long text_addr,
0038 unsigned long text_size);
0039 extern void unwind_table_del(struct unwind_table *tab);
0040 extern void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk,
0041 const char *loglvl);
0042
0043 #endif
0044
0045 #ifdef CONFIG_ARM_UNWIND
0046 #define UNWIND(code...) code
0047 #else
0048 #define UNWIND(code...)
0049 #endif
0050
0051 #endif