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 */ 26enum 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 32struct unwind_idx { 33 unsigned long addr_offset; 34 unsigned long insn; 35}; 36 37struct 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 46extern struct unwind_table *unwind_table_add(unsigned long start, 47 unsigned long size, 48 unsigned long text_addr, 49 unsigned long text_size); 50extern void unwind_table_del(struct unwind_table *tab); 51extern 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