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