/* SPDX-License-Identifier: GPL-2.0 */ #undef TRACE_SYSTEM #define TRACE_SYSTEM exceptions #if !defined(_TRACE_EXCEPTIONS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_EXCEPTIONS_H #include #include #include #define __trace_trap(__sym) { __sym, #__sym } #define trace_trap_symbolic(__trapnr) \ __print_symbolic(__trapnr, \ __trace_trap(ARM_TRAP_ACCESS), \ __trace_trap(ARM_TRAP_SECTION), \ __trace_trap(ARM_TRAP_DABT), \ __trace_trap(ARM_TRAP_PABT), \ __trace_trap(ARM_TRAP_BREAK), \ __trace_trap(ARM_TRAP_FPU), \ __trace_trap(ARM_TRAP_VFP), \ __trace_trap(ARM_TRAP_UNDEFINSTR), \ __trace_trap(ARM_TRAP_ALIGNMENT)) DECLARE_EVENT_CLASS(ARM_trap_event, TP_PROTO(int trapnr, struct pt_regs *regs), TP_ARGS(trapnr, regs), TP_STRUCT__entry( __field(int, trapnr) __field(struct pt_regs *, regs) ), TP_fast_assign( __entry->trapnr = trapnr; __entry->regs = regs; ), TP_printk("%s mode trap: %s", user_mode(__entry->regs) ? "user" : "kernel", trace_trap_symbolic(__entry->trapnr)) ); DEFINE_EVENT(ARM_trap_event, ARM_trap_entry, TP_PROTO(int trapnr, struct pt_regs *regs), TP_ARGS(trapnr, regs) ); DEFINE_EVENT(ARM_trap_event, ARM_trap_exit, TP_PROTO(int trapnr, struct pt_regs *regs), TP_ARGS(trapnr, regs) ); #undef TRACE_INCLUDE_PATH #undef TRACE_INCLUDE_FILE #define TRACE_INCLUDE_PATH asm/trace #define TRACE_INCLUDE_FILE exceptions #endif /* _TRACE_EXCEPTIONS_H */ /* This part must be outside protection */ #include