1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef _ASMARM_TRAP_H 3*4882a593Smuzhiyun #define _ASMARM_TRAP_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/list.h> 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun struct pt_regs; 8*4882a593Smuzhiyun struct task_struct; 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun struct undef_hook { 11*4882a593Smuzhiyun struct list_head node; 12*4882a593Smuzhiyun u32 instr_mask; 13*4882a593Smuzhiyun u32 instr_val; 14*4882a593Smuzhiyun u32 cpsr_mask; 15*4882a593Smuzhiyun u32 cpsr_val; 16*4882a593Smuzhiyun int (*fn)(struct pt_regs *regs, unsigned int instr); 17*4882a593Smuzhiyun }; 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun void register_undef_hook(struct undef_hook *hook); 20*4882a593Smuzhiyun void unregister_undef_hook(struct undef_hook *hook); 21*4882a593Smuzhiyun __in_irqentry_text(unsigned long ptr)22*4882a593Smuzhiyunstatic inline int __in_irqentry_text(unsigned long ptr) 23*4882a593Smuzhiyun { 24*4882a593Smuzhiyun extern char __irqentry_text_start[]; 25*4882a593Smuzhiyun extern char __irqentry_text_end[]; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun return ptr >= (unsigned long)&__irqentry_text_start && 28*4882a593Smuzhiyun ptr < (unsigned long)&__irqentry_text_end; 29*4882a593Smuzhiyun } 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun extern void __init early_trap_init(void *); 32*4882a593Smuzhiyun extern void dump_backtrace_entry(unsigned long where, unsigned long from, 33*4882a593Smuzhiyun unsigned long frame, const char *loglvl); 34*4882a593Smuzhiyun extern void ptrace_break(struct pt_regs *regs); 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun extern void *vectors_page; 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #endif 39