1 #ifndef __PERF_RECORD_H
2 #define __PERF_RECORD_H
12 struct perf_event_header header;
17 char filename[PATH_MAX];
21 struct perf_event_header header;
30 char filename[PATH_MAX];
34 struct perf_event_header header;
40 struct perf_event_header header;
47 struct perf_event_header header;
53 * PERF_FORMAT_ENABLED | PERF_FORMAT_RUNNING | PERF_FORMAT_ID
56 struct perf_event_header header;
64 struct throttle_event {
65 struct perf_event_header header;
71 #define PERF_SAMPLE_MASK \
72 (PERF_SAMPLE_IP | PERF_SAMPLE_TID | \
73 PERF_SAMPLE_TIME | PERF_SAMPLE_ADDR | \
74 PERF_SAMPLE_ID | PERF_SAMPLE_STREAM_ID | \
75 PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD | \
76 PERF_SAMPLE_IDENTIFIER)
78 /* perf sample has 16 bits size limit */
79 #define PERF_SAMPLE_MAX_SIZE (1 << 16)
82 struct perf_event_header header;
98 struct sample_read_value {
109 struct sample_read_value *values;
111 struct sample_read_value one;
115 struct ip_callchain {
120 struct branch_flags {
128 struct branch_entry {
131 struct branch_flags flags;
134 struct branch_stack {
136 struct branch_entry entries[0];
153 struct ip_callchain *callchain;
154 struct branch_stack *branch_stack;
155 struct regs_dump user_regs;
156 struct stack_dump user_stack;
157 struct sample_read read;
160 #define PERF_MEM_DATA_SRC_NONE \
161 (PERF_MEM_S(OP, NA) |\
162 PERF_MEM_S(LVL, NA) |\
163 PERF_MEM_S(SNOOP, NA) |\
164 PERF_MEM_S(LOCK, NA) |\
167 struct build_id_event {
168 struct perf_event_header header;
170 u8 build_id[PERF_ALIGN(BUILD_ID_SIZE, sizeof(u64))];
174 enum perf_user_event_type { /* above any possible kernel type */
175 PERF_RECORD_USER_TYPE_START = 64,
176 PERF_RECORD_HEADER_ATTR = 64,
177 PERF_RECORD_HEADER_EVENT_TYPE = 65, /* depreceated */
178 PERF_RECORD_HEADER_TRACING_DATA = 66,
179 PERF_RECORD_HEADER_BUILD_ID = 67,
180 PERF_RECORD_FINISHED_ROUND = 68,
181 PERF_RECORD_HEADER_MAX
185 struct perf_event_header header;
186 struct perf_event_attr attr;
190 #define MAX_EVENT_NAME 64
192 struct perf_trace_event_type {
194 char name[MAX_EVENT_NAME];
197 struct event_type_event {
198 struct perf_event_header header;
199 struct perf_trace_event_type event_type;
202 struct tracing_data_event {
203 struct perf_event_header header;
208 struct perf_event_header header;
209 struct mmap_event mmap;
210 struct mmap2_event mmap2;
211 struct comm_event comm;
212 struct fork_event fork;
213 struct lost_event lost;
214 struct read_event read;
215 struct throttle_event throttle;
216 struct sample_event sample;
217 struct attr_event attr;
218 struct event_type_event event_type;
219 struct tracing_data_event tracing_data;
220 struct build_id_event build_id;
223 void perf_event__print_totals(void);
228 typedef int (*perf_event__handler_t)(struct perf_tool *tool,
229 union perf_event *event,
230 struct perf_sample *sample,
231 struct machine *machine);
233 int perf_event__synthesize_thread_map(struct perf_tool *tool,
234 struct thread_map *threads,
235 perf_event__handler_t process,
236 struct machine *machine, bool mmap_data);
237 int perf_event__synthesize_threads(struct perf_tool *tool,
238 perf_event__handler_t process,
239 struct machine *machine, bool mmap_data);
240 int perf_event__synthesize_kernel_mmap(struct perf_tool *tool,
241 perf_event__handler_t process,
242 struct machine *machine);
244 int perf_event__synthesize_modules(struct perf_tool *tool,
245 perf_event__handler_t process,
246 struct machine *machine);
248 int perf_event__process_comm(struct perf_tool *tool,
249 union perf_event *event,
250 struct perf_sample *sample,
251 struct machine *machine);
252 int perf_event__process_lost(struct perf_tool *tool,
253 union perf_event *event,
254 struct perf_sample *sample,
255 struct machine *machine);
256 int perf_event__process_mmap(struct perf_tool *tool,
257 union perf_event *event,
258 struct perf_sample *sample,
259 struct machine *machine);
260 int perf_event__process_mmap2(struct perf_tool *tool,
261 union perf_event *event,
262 struct perf_sample *sample,
263 struct machine *machine);
264 int perf_event__process_fork(struct perf_tool *tool,
265 union perf_event *event,
266 struct perf_sample *sample,
267 struct machine *machine);
268 int perf_event__process_exit(struct perf_tool *tool,
269 union perf_event *event,
270 struct perf_sample *sample,
271 struct machine *machine);
272 int perf_event__process(struct perf_tool *tool,
273 union perf_event *event,
274 struct perf_sample *sample,
275 struct machine *machine);
277 struct addr_location;
279 int perf_event__preprocess_sample(const union perf_event *event,
280 struct machine *machine,
281 struct addr_location *al,
282 struct perf_sample *sample);
284 const char *perf_event__name(unsigned int id);
286 size_t perf_event__sample_event_size(const struct perf_sample *sample, u64 type,
288 int perf_event__synthesize_sample(union perf_event *event, u64 type,
290 const struct perf_sample *sample,
293 int perf_event__synthesize_mmap_events(struct perf_tool *tool,
294 union perf_event *event,
295 pid_t pid, pid_t tgid,
296 perf_event__handler_t process,
297 struct machine *machine,
300 size_t perf_event__fprintf_comm(union perf_event *event, FILE *fp);
301 size_t perf_event__fprintf_mmap(union perf_event *event, FILE *fp);
302 size_t perf_event__fprintf_mmap2(union perf_event *event, FILE *fp);
303 size_t perf_event__fprintf_task(union perf_event *event, FILE *fp);
304 size_t perf_event__fprintf(union perf_event *event, FILE *fp);
306 u64 kallsyms__get_function_start(const char *kallsyms_filename,
307 const char *symbol_name);
309 #endif /* __PERF_RECORD_H */