1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
24baa9922SRussell King #ifndef _ASMARM_TRAP_H
34baa9922SRussell King #define _ASMARM_TRAP_H
44baa9922SRussell King
54baa9922SRussell King #include <linux/list.h>
64baa9922SRussell King
7e7d59db9SMikael Pettersson struct pt_regs;
8e7d59db9SMikael Pettersson struct task_struct;
9e7d59db9SMikael Pettersson
104baa9922SRussell King struct undef_hook {
114baa9922SRussell King struct list_head node;
124baa9922SRussell King u32 instr_mask;
134baa9922SRussell King u32 instr_val;
144baa9922SRussell King u32 cpsr_mask;
154baa9922SRussell King u32 cpsr_val;
164baa9922SRussell King int (*fn)(struct pt_regs *regs, unsigned int instr);
174baa9922SRussell King };
184baa9922SRussell King
194baa9922SRussell King void register_undef_hook(struct undef_hook *hook);
204baa9922SRussell King void unregister_undef_hook(struct undef_hook *hook);
214baa9922SRussell King
__in_irqentry_text(unsigned long ptr)2261b5cb1cSRabin Vincent static inline int __in_irqentry_text(unsigned long ptr)
2361b5cb1cSRabin Vincent {
2461b5cb1cSRabin Vincent extern char __irqentry_text_start[];
2561b5cb1cSRabin Vincent extern char __irqentry_text_end[];
2661b5cb1cSRabin Vincent
2761b5cb1cSRabin Vincent return ptr >= (unsigned long)&__irqentry_text_start &&
2861b5cb1cSRabin Vincent ptr < (unsigned long)&__irqentry_text_end;
2961b5cb1cSRabin Vincent }
3061b5cb1cSRabin Vincent
3194e5a85bSRussell King extern void __init early_trap_init(void *);
325489ab50SDmitry Safonov extern void dump_backtrace_entry(unsigned long where, unsigned long from,
335489ab50SDmitry Safonov unsigned long frame, const char *loglvl);
34e9a06509SEric W. Biederman extern void ptrace_break(struct pt_regs *regs);
354baa9922SRussell King
36247055aaSCatalin Marinas extern void *vectors_page;
37247055aaSCatalin Marinas
38*ae1f8d79SArnd Bergmann asmlinkage void dump_backtrace_stm(u32 *stack, u32 instruction, const char *loglvl);
39*ae1f8d79SArnd Bergmann asmlinkage void do_undefinstr(struct pt_regs *regs);
40*ae1f8d79SArnd Bergmann asmlinkage void handle_fiq_as_nmi(struct pt_regs *regs);
41*ae1f8d79SArnd Bergmann asmlinkage void bad_mode(struct pt_regs *regs, int reason);
42*ae1f8d79SArnd Bergmann asmlinkage int arm_syscall(int no, struct pt_regs *regs);
43*ae1f8d79SArnd Bergmann asmlinkage void baddataabort(int code, unsigned long instr, struct pt_regs *regs);
44*ae1f8d79SArnd Bergmann asmlinkage void __div0(void);
45*ae1f8d79SArnd Bergmann asmlinkage void handle_bad_stack(struct pt_regs *regs);
46*ae1f8d79SArnd Bergmann
474baa9922SRussell King #endif
48