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_offset; 34 unsigned long insn; 35 }; 36 37 struct unwind_table { 38 struct list_head list; 39 const struct unwind_idx *start; 40 const struct unwind_idx *origin; 41 const struct unwind_idx *stop; 42 unsigned long begin_addr; 43 unsigned long end_addr; 44 }; 45 46 extern struct unwind_table *unwind_table_add(unsigned long start, 47 unsigned long size, 48 unsigned long text_addr, 49 unsigned long text_size); 50 extern void unwind_table_del(struct unwind_table *tab); 51 extern void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk); 52 53 #endif /* !__ASSEMBLY__ */ 54 55 #ifdef CONFIG_ARM_UNWIND 56 #define UNWIND(code...) code 57 #else 58 #define UNWIND(code...) 59 #endif 60 61 #endif /* __ASM_UNWIND_H */ 62