1 /* 2 * arch/arm/include/asm/unwind.h 3 * 4 * Copyright (C) 2008 ARM Limited 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 */ 19 20 #ifndef __ASM_UNWIND_H 21 #define __ASM_UNWIND_H 22 23 #ifndef __ASSEMBLY__ 24 25 /* Unwind reason code according the the ARM EABI documents */ 26 enum unwind_reason_code { 27 URC_OK = 0, /* operation completed successfully */ 28 URC_CONTINUE_UNWIND = 8, 29 URC_FAILURE = 9 /* unspecified failure of some kind */ 30 }; 31 32 struct unwind_idx { 33 unsigned long addr; 34 unsigned long insn; 35 }; 36 37 struct unwind_table { 38 struct list_head list; 39 struct unwind_idx *start; 40 struct unwind_idx *stop; 41 unsigned long begin_addr; 42 unsigned long end_addr; 43 }; 44 45 extern struct unwind_table *unwind_table_add(unsigned long start, 46 unsigned long size, 47 unsigned long text_addr, 48 unsigned long text_size); 49 extern void unwind_table_del(struct unwind_table *tab); 50 extern void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk); 51 52 #ifdef CONFIG_ARM_UNWIND 53 extern int __init unwind_init(void); 54 #else 55 static inline int __init unwind_init(void) 56 { 57 return 0; 58 } 59 #endif 60 61 #endif /* !__ASSEMBLY__ */ 62 63 #ifdef CONFIG_ARM_UNWIND 64 #define UNWIND(code...) code 65 #else 66 #define UNWIND(code...) 67 #endif 68 69 #endif /* __ASM_UNWIND_H */ 70