Commit | Line | Data |
---|---|---|
b7cdc182 | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
da0f6c58 MD |
2 | #if !defined(LTTNG_TRACE_EXCEPTIONS_H) || defined(TRACE_HEADER_MULTI_READ) |
3 | #define LTTNG_TRACE_EXCEPTIONS_H | |
4 | ||
3b4aafcb | 5 | #include <lttng/tracepoint-event.h> |
5f4c791e | 6 | #include <lttng/kernel-version.h> |
da0f6c58 | 7 | |
2eb43df6 | 8 | #ifdef CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM |
5f4c791e | 9 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0)) |
8c7f2a9f | 10 | #include <../arch/x86/include/asm/traps.h> |
5f4c791e | 11 | #else /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0)) */ |
8c7f2a9f FD |
12 | |
13 | /* Only define this enum once. */ | |
14 | ||
15 | #ifndef ONCE_LTTNG_EXCEPTIONS_H | |
16 | #define ONCE_LTTNG_EXCEPTIONS_H | |
17 | ||
18 | enum { | |
19 | X86_PF_PROT = 1 << 0, | |
20 | X86_PF_WRITE = 1 << 1, | |
21 | X86_PF_USER = 1 << 2, | |
22 | X86_PF_RSVD = 1 << 3, | |
23 | X86_PF_INSTR = 1 << 4, | |
5f4c791e | 24 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,6,0)) |
8c7f2a9f | 25 | X86_PF_PK = 1 << 5, |
5f4c791e | 26 | #endif /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,6,0)) */ |
8c7f2a9f FD |
27 | }; |
28 | ||
29 | #endif /* ONCE_LTTNG_EXCEPTIONS_H */ | |
30 | ||
5f4c791e | 31 | #endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0)) */ |
2eb43df6 | 32 | #endif /* CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM */ |
8c7f2a9f | 33 | |
da0f6c58 MD |
34 | #undef TRACE_SYSTEM |
35 | #define TRACE_SYSTEM x86_exceptions | |
36 | ||
2eb43df6 | 37 | #ifdef CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM |
8c7f2a9f FD |
38 | LTTNG_TRACEPOINT_ENUM(lttng_x86_pf_error_code, |
39 | TP_ENUM_VALUES( | |
40 | ctf_enum_value("PROTECTION_FAULT", X86_PF_PROT) | |
41 | ctf_enum_value("WRITE_ACCESS", X86_PF_WRITE) | |
42 | ctf_enum_value("USER_MODE", X86_PF_USER) | |
43 | ctf_enum_value("RESERVED_BIT", X86_PF_RSVD) | |
44 | ctf_enum_value("INSTRUCTION_FETCH", X86_PF_INSTR) | |
5f4c791e | 45 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,6,0)) |
8c7f2a9f | 46 | ctf_enum_value("PROTECTION_KEYS_BLOCK", X86_PF_PK) |
5f4c791e | 47 | #endif /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,6,0)) */ |
8c7f2a9f FD |
48 | ) |
49 | ) | |
2eb43df6 | 50 | #endif /* CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM */ |
8c7f2a9f | 51 | |
da0f6c58 MD |
52 | LTTNG_TRACEPOINT_EVENT_CLASS(x86_exceptions_class, |
53 | ||
54 | TP_PROTO(unsigned long address, struct pt_regs *regs, | |
55 | unsigned long error_code), | |
56 | ||
57 | TP_ARGS(address, regs, error_code), | |
58 | ||
59 | TP_FIELDS( | |
60 | ctf_integer_hex(unsigned long, address, address) | |
61 | ctf_integer_hex(unsigned long, ip, regs->ip) | |
62 | /* | |
63 | * Note: we cast error_code from unsigned long | |
64 | * to unsigned char to save space in the trace. | |
65 | * Currently, only 5 low bits are used. Should be made | |
66 | * larger if error codes are added to the kernel. | |
67 | */ | |
2eb43df6 | 68 | #ifdef CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM |
8c7f2a9f | 69 | ctf_enum(lttng_x86_pf_error_code, unsigned char, error_code, error_code) |
2eb43df6 MJ |
70 | #else |
71 | ctf_integer_hex(unsigned char, error_code, error_code) | |
72 | #endif | |
da0f6c58 MD |
73 | ) |
74 | ) | |
75 | ||
76 | #define LTTNG_EXCEPTIONS_TRACEPOINT_EVENT_INSTANCE_MAP(name, map) \ | |
77 | LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(x86_exceptions_class, \ | |
78 | name, \ | |
79 | map, \ | |
80 | TP_PROTO(unsigned long address, struct pt_regs *regs, \ | |
81 | unsigned long error_code), \ | |
82 | TP_ARGS(address, regs, error_code) \ | |
83 | ) | |
84 | ||
85 | LTTNG_EXCEPTIONS_TRACEPOINT_EVENT_INSTANCE_MAP(page_fault_user, | |
86 | x86_exceptions_page_fault_user) | |
87 | LTTNG_EXCEPTIONS_TRACEPOINT_EVENT_INSTANCE_MAP(page_fault_kernel, | |
88 | x86_exceptions_page_fault_kernel) | |
89 | ||
90 | #endif /* LTTNG_TRACE_EXCEPTIONS_H */ | |
91 | ||
92 | #undef TRACE_INCLUDE_PATH | |
4f47ccf0 | 93 | #define TRACE_INCLUDE_PATH instrumentation/events/arch/x86 |
da0f6c58 MD |
94 | #undef TRACE_INCLUDE_FILE |
95 | #define TRACE_INCLUDE_FILE exceptions | |
96 | ||
97 | /* This part must be outside protection */ | |
3b4aafcb | 98 | #include <lttng/define_trace.h> |