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