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 const struct unwind_idx *start; 28 const struct unwind_idx *origin; 29 const struct unwind_idx *stop; 30 unsigned long begin_addr; 31 unsigned long end_addr; 32 }; 33 34 extern struct unwind_table *unwind_table_add(unsigned long start, 35 unsigned long size, 36 unsigned long text_addr, 37 unsigned long text_size); 38 extern void unwind_table_del(struct unwind_table *tab); 39 extern void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk, 40 const char *loglvl); 41 42 #endif /* !__ASSEMBLY__ */ 43 44 #ifdef CONFIG_ARM_UNWIND 45 #define UNWIND(code...) code 46 #else 47 #define UNWIND(code...) 48 #endif 49 50 #endif /* __ASM_UNWIND_H */ 51