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