hc
2024-11-01 2f529f9b558ca1c1bd74be7437a84e4711743404
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/* 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 <linux/tracepoint.h>
#include <asm/ptrace.h>
#include <asm/dovetail.h>
 
#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 <trace/define_trace.h>