Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
4ace73ee SR |
2 | #ifndef _PERF_UTIL_TRACE_EVENT_H |
3 | #define _PERF_UTIL_TRACE_EVENT_H | |
52050943 | 4 | |
378ef0f5 IR |
5 | #include <stdbool.h> |
6 | #include <stdio.h> | |
481028db | 7 | #include <sys/types.h> |
378ef0f5 | 8 | #include <linux/types.h> |
743eb868 | 9 | |
378ef0f5 | 10 | struct evlist; |
743eb868 ACM |
11 | struct machine; |
12 | struct perf_sample; | |
13 | union perf_event; | |
da378962 | 14 | struct perf_tool; |
2eaa1b40 | 15 | struct thread; |
785be0c9 | 16 | struct tep_plugin_list; |
cac30400 | 17 | struct evsel; |
20018398 | 18 | struct tep_format_field; |
29f5ffd3 JO |
19 | |
20 | struct trace_event { | |
096177a8 | 21 | struct tep_handle *pevent; |
785be0c9 | 22 | struct tep_plugin_list *plugin_list; |
29f5ffd3 JO |
23 | }; |
24 | ||
1784eeae IR |
25 | /* Computes a version number comparable with LIBTRACEEVENT_VERSION from Makefile.config. */ |
26 | #define MAKE_LIBTRACEEVENT_VERSION(a, b, c) ((a)*255*255+(b)*255+(c)) | |
27 | ||
378ef0f5 IR |
28 | typedef char *(tep_func_resolver_t)(void *priv, |
29 | unsigned long long *addrp, char **modp); | |
30 | ||
31 | bool have_tracepoints(struct list_head *evlist); | |
32 | ||
29f5ffd3 JO |
33 | int trace_event__init(struct trace_event *t); |
34 | void trace_event__cleanup(struct trace_event *t); | |
959c2199 | 35 | int trace_event__register_resolver(struct machine *machine, |
4d5c58b1 | 36 | tep_func_resolver_t *func); |
97fbf3f0 | 37 | struct tep_event* |
97978b3e | 38 | trace_event__tp_format(const char *sys, const char *name); |
52050943 | 39 | |
97fbf3f0 | 40 | struct tep_event *trace_event__tp_format_id(int id); |
71fe1052 | 41 | |
97fbf3f0 | 42 | void event_format__fprintf(struct tep_event *event, |
aa1aac17 ACM |
43 | int cpu, void *data, int size, FILE *fp); |
44 | ||
97fbf3f0 | 45 | void event_format__print(struct tep_event *event, |
fcf65bf1 | 46 | int cpu, void *data, int size); |
aaf045f7 | 47 | |
096177a8 TSV |
48 | int parse_ftrace_file(struct tep_handle *pevent, char *buf, unsigned long size); |
49 | int parse_event_file(struct tep_handle *pevent, | |
da378962 | 50 | char *buf, unsigned long size, char *sys); |
aaf045f7 | 51 | |
aaf045f7 | 52 | unsigned long long |
97fbf3f0 | 53 | raw_field_value(struct tep_event *event, const char *name, void *data); |
aaf045f7 | 54 | |
20018398 ZG |
55 | const char *parse_task_states(struct tep_format_field *state_field); |
56 | ||
096177a8 TSV |
57 | void parse_proc_kallsyms(struct tep_handle *pevent, char *file, unsigned int size); |
58 | void parse_ftrace_printk(struct tep_handle *pevent, char *file, unsigned int size); | |
59 | void parse_saved_cmdline(struct tep_handle *pevent, char *file, unsigned int size); | |
aaf045f7 | 60 | |
29f5ffd3 | 61 | ssize_t trace_report(int fd, struct trace_event *tevent, bool repipe); |
aaf045f7 | 62 | |
97fbf3f0 | 63 | unsigned long long read_size(struct tep_event *event, void *ptr, int size); |
aaf045f7 SR |
64 | unsigned long long eval_flag(const char *flag); |
65 | ||
69aad6f1 | 66 | int read_tracing_data(int fd, struct list_head *pattrs); |
29208e57 | 67 | |
220f88b5 YJ |
68 | /* |
69 | * Return the tracepoint name in the format "subsystem:event_name", | |
70 | * callers should free the returned string. | |
71 | */ | |
72 | char *tracepoint_id_to_name(u64 config); | |
73 | ||
29208e57 JO |
74 | struct tracing_data { |
75 | /* size is only valid if temp is 'true' */ | |
76 | ssize_t size; | |
77 | bool temp; | |
78 | char temp_file[50]; | |
79 | }; | |
80 | ||
81 | struct tracing_data *tracing_data_get(struct list_head *pattrs, | |
82 | int fd, bool temp); | |
8755d5e2 | 83 | int tracing_data_put(struct tracing_data *tdata); |
29208e57 | 84 | |
52050943 | 85 | |
73994dc1 FT |
86 | struct addr_location; |
87 | ||
71ad0f5e | 88 | struct perf_session; |
8058a30c | 89 | struct perf_stat_config; |
71ad0f5e | 90 | |
956ffd02 TZ |
91 | struct scripting_ops { |
92 | const char *name; | |
6ea4b5db | 93 | const char *dirname; /* For script path .../scripts/<dirname>/... */ |
67e50ce0 AH |
94 | int (*start_script)(const char *script, int argc, const char **argv, |
95 | struct perf_session *session); | |
d445dd2a | 96 | int (*flush_script) (void); |
956ffd02 | 97 | int (*stop_script) (void); |
be6d842a DA |
98 | void (*process_event) (union perf_event *event, |
99 | struct perf_sample *sample, | |
32dcd021 | 100 | struct evsel *evsel, |
3f8e009e AH |
101 | struct addr_location *al, |
102 | struct addr_location *addr_al); | |
5bf83c29 AH |
103 | void (*process_switch)(union perf_event *event, |
104 | struct perf_sample *sample, | |
105 | struct machine *machine); | |
2ede9217 AH |
106 | void (*process_auxtrace_error)(struct perf_session *session, |
107 | union perf_event *event); | |
8058a30c | 108 | void (*process_stat)(struct perf_stat_config *config, |
32dcd021 | 109 | struct evsel *evsel, u64 tstamp); |
8058a30c | 110 | void (*process_stat_interval)(u64 tstamp); |
538d9c18 SB |
111 | void (*process_throttle)(union perf_event *event, |
112 | struct perf_sample *sample, | |
113 | struct machine *machine); | |
096177a8 | 114 | int (*generate_script) (struct tep_handle *pevent, const char *outfile); |
956ffd02 TZ |
115 | }; |
116 | ||
44cbe729 AH |
117 | extern unsigned int scripting_max_stack; |
118 | ||
956ffd02 TZ |
119 | int script_spec_register(const char *spec, struct scripting_ops *ops); |
120 | ||
d9ae9c97 AH |
121 | void script_fetch_insn(struct perf_sample *sample, struct thread *thread, |
122 | struct machine *machine); | |
123 | ||
16c632de | 124 | void setup_perl_scripting(void); |
7e4b21b8 | 125 | void setup_python_scripting(void); |
16c632de | 126 | |
7397d80d | 127 | struct scripting_context { |
096177a8 | 128 | struct tep_handle *pevent; |
7397d80d | 129 | void *event_data; |
cac30400 AH |
130 | union perf_event *event; |
131 | struct perf_sample *sample; | |
132 | struct evsel *evsel; | |
133 | struct addr_location *al; | |
134 | struct addr_location *addr_al; | |
67e50ce0 | 135 | struct perf_session *session; |
7397d80d TZ |
136 | }; |
137 | ||
cac30400 AH |
138 | void scripting_context__update(struct scripting_context *scripting_context, |
139 | union perf_event *event, | |
140 | struct perf_sample *sample, | |
141 | struct evsel *evsel, | |
142 | struct addr_location *al, | |
143 | struct addr_location *addr_al); | |
144 | ||
7397d80d TZ |
145 | int common_pc(struct scripting_context *context); |
146 | int common_flags(struct scripting_context *context); | |
147 | int common_lock_depth(struct scripting_context *context); | |
148 | ||
54cd8b03 AH |
149 | #define SAMPLE_FLAGS_BUF_SIZE 64 |
150 | int perf_sample__sprintf_flags(u32 flags, char *str, size_t sz); | |
151 | ||
1634bad3 IR |
152 | #if defined(LIBTRACEEVENT_VERSION) && LIBTRACEEVENT_VERSION >= MAKE_LIBTRACEEVENT_VERSION(1, 5, 0) |
153 | #include <traceevent/event-parse.h> | |
154 | ||
155 | static inline bool tep_field_is_relative(unsigned long flags) | |
156 | { | |
157 | return (flags & TEP_FIELD_IS_RELATIVE) != 0; | |
158 | } | |
159 | #else | |
160 | #include <linux/compiler.h> | |
161 | ||
162 | static inline bool tep_field_is_relative(unsigned long flags __maybe_unused) | |
163 | { | |
164 | return false; | |
165 | } | |
166 | #endif | |
167 | ||
4ace73ee | 168 | #endif /* _PERF_UTIL_TRACE_EVENT_H */ |