1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * arch/arm/include/asm/unwind.h 4 * 5 * Copyright (C) 2008 ARM Limited 6 */ 7 8 #ifndef __ASM_UNWIND_H 9 #define __ASM_UNWIND_H 10 11 #ifndef __ASSEMBLY__ 12 13 /* Unwind reason code according the the ARM EABI documents */ 14 enum unwind_reason_code { 15 URC_OK = 0, /* operation completed successfully */ 16 URC_CONTINUE_UNWIND = 8, 17 URC_FAILURE = 9 /* unspecified failure of some kind */ 18 }; 19 20 struct unwind_idx { 21 unsigned long addr_offset; 22 unsigned long insn; 23 }; 24 25 struct unwind_table { 26 struct list_head list; 27 struct list_head mod_list; 28 const struct unwind_idx *start; 29 const struct unwind_idx *origin; 30 const struct unwind_idx *stop; 31 unsigned long begin_addr; 32 unsigned long end_addr; 33 }; 34 35 extern struct unwind_table *unwind_table_add(unsigned long start, 36 unsigned long size, 37 unsigned long text_addr, 38 unsigned long text_size); 39 extern void unwind_table_del(struct unwind_table *tab); 40 extern void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk, 41 const char *loglvl); 42 43 void __aeabi_unwind_cpp_pr0(void); 44 void __aeabi_unwind_cpp_pr1(void); 45 void __aeabi_unwind_cpp_pr2(void); 46 47 #endif /* !__ASSEMBLY__ */ 48 49 #ifdef CONFIG_ARM_UNWIND 50 #define UNWIND(code...) code 51 #else 52 #define UNWIND(code...) 53 #endif 54 55 #endif /* __ASM_UNWIND_H */ 56