1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#ifndef __PERF_RECORD_H
2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define __PERF_RECORD_H
3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <limits.h>
5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <stdio.h>
6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "../perf.h"
8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "map.h"
9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "build-id.h"
10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct mmap_event {
12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_event_header header;
13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u32 pid, tid;
14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 start;
15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 len;
16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 pgoff;
17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	char filename[PATH_MAX];
18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct mmap2_event {
21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_event_header header;
22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u32 pid, tid;
23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 start;
24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 len;
25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 pgoff;
26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u32 maj;
27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u32 min;
28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 ino;
29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 ino_generation;
30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	char filename[PATH_MAX];
31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct comm_event {
34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_event_header header;
35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u32 pid, tid;
36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	char comm[16];
37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct fork_event {
40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_event_header header;
41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u32 pid, ppid;
42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u32 tid, ptid;
43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 time;
44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct lost_event {
47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_event_header header;
48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 id;
49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 lost;
50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/*
53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * PERF_FORMAT_ENABLED | PERF_FORMAT_RUNNING | PERF_FORMAT_ID
54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */
55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct read_event {
56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_event_header header;
57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u32 pid, tid;
58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 value;
59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 time_enabled;
60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 time_running;
61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 id;
62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_SAMPLE_MASK				\
66e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	(PERF_SAMPLE_IP | PERF_SAMPLE_TID |		\
67e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	 PERF_SAMPLE_TIME | PERF_SAMPLE_ADDR |		\
68e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	PERF_SAMPLE_ID | PERF_SAMPLE_STREAM_ID |	\
69e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	 PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD |		\
70e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	 PERF_SAMPLE_IDENTIFIER)
71e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
72e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct sample_event {
73e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_event_header        header;
74e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 array[];
75e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
76e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
77e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct regs_dump {
78e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 abi;
79e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 *regs;
80e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
81e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
82e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct stack_dump {
83e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u16 offset;
84e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 size;
85e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	char *data;
86e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
87e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
88e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct sample_read_value {
89e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 value;
90e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 id;
91e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
92e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
93e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct sample_read {
94e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 time_enabled;
95e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 time_running;
96e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	union {
97e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		struct {
98e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			u64 nr;
99e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			struct sample_read_value *values;
100e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		} group;
101e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		struct sample_read_value one;
102e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	};
103e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
104e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
105e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct perf_sample {
106e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 ip;
107e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u32 pid, tid;
108e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 time;
109e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 addr;
110e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 id;
111e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 stream_id;
112e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 period;
113e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 weight;
114e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u32 cpu;
115e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u32 raw_size;
116e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 data_src;
117e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	void *raw_data;
118e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct ip_callchain *callchain;
119e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct branch_stack *branch_stack;
120e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct regs_dump  user_regs;
121e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct stack_dump user_stack;
122e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct sample_read read;
123e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
124e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
125e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_DATA_SRC_NONE \
126e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	(PERF_MEM_S(OP, NA) |\
127e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	 PERF_MEM_S(LVL, NA) |\
128e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	 PERF_MEM_S(SNOOP, NA) |\
129e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	 PERF_MEM_S(LOCK, NA) |\
130e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	 PERF_MEM_S(TLB, NA))
131e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
132e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct build_id_event {
133e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_event_header header;
134e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	pid_t			 pid;
135e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u8			 build_id[PERF_ALIGN(BUILD_ID_SIZE, sizeof(u64))];
136e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	char			 filename[];
137e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
138e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
139e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_user_event_type { /* above any possible kernel type */
140e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	PERF_RECORD_USER_TYPE_START		= 64,
141e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	PERF_RECORD_HEADER_ATTR			= 64,
142e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	PERF_RECORD_HEADER_EVENT_TYPE		= 65, /* depreceated */
143e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	PERF_RECORD_HEADER_TRACING_DATA		= 66,
144e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	PERF_RECORD_HEADER_BUILD_ID		= 67,
145e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	PERF_RECORD_FINISHED_ROUND		= 68,
146e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	PERF_RECORD_HEADER_MAX
147e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
148e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
149e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct attr_event {
150e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_event_header header;
151e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_event_attr attr;
152e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64 id[];
153e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
154e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
155e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define MAX_EVENT_NAME 64
156e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
157e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct perf_trace_event_type {
158e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u64	event_id;
159e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	char	name[MAX_EVENT_NAME];
160e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
161e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
162e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct event_type_event {
163e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_event_header header;
164e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_trace_event_type event_type;
165e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
166e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
167e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct tracing_data_event {
168e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_event_header header;
169e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	u32 size;
170e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
171e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
172e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengunion perf_event {
173e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_event_header	header;
174e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct mmap_event		mmap;
175e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct mmap2_event		mmap2;
176e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct comm_event		comm;
177e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct fork_event		fork;
178e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct lost_event		lost;
179e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct read_event		read;
180e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct sample_event		sample;
181e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct attr_event		attr;
182e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct event_type_event		event_type;
183e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct tracing_data_event	tracing_data;
184e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct build_id_event		build_id;
185e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
186e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
187e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid perf_event__print_totals(void);
188e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
189e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct perf_tool;
190e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct thread_map;
191e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
192e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengtypedef int (*perf_event__handler_t)(struct perf_tool *tool,
193e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				     union perf_event *event,
194e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				     struct perf_sample *sample,
195e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				     struct machine *machine);
196e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
197e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint perf_event__synthesize_thread_map(struct perf_tool *tool,
198e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				      struct thread_map *threads,
199e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				      perf_event__handler_t process,
200e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				      struct machine *machine);
201e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint perf_event__synthesize_threads(struct perf_tool *tool,
202e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				   perf_event__handler_t process,
203e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				   struct machine *machine);
204e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint perf_event__synthesize_kernel_mmap(struct perf_tool *tool,
205e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				       perf_event__handler_t process,
206e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				       struct machine *machine,
207e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				       const char *symbol_name);
208e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
209e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint perf_event__synthesize_modules(struct perf_tool *tool,
210e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				   perf_event__handler_t process,
211e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				   struct machine *machine);
212e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
213e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint perf_event__process_comm(struct perf_tool *tool,
214e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     union perf_event *event,
215e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     struct perf_sample *sample,
216e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     struct machine *machine);
217e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint perf_event__process_lost(struct perf_tool *tool,
218e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     union perf_event *event,
219e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     struct perf_sample *sample,
220e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     struct machine *machine);
221e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint perf_event__process_mmap(struct perf_tool *tool,
222e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     union perf_event *event,
223e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     struct perf_sample *sample,
224e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     struct machine *machine);
225e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint perf_event__process_mmap2(struct perf_tool *tool,
226e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     union perf_event *event,
227e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     struct perf_sample *sample,
228e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     struct machine *machine);
229e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint perf_event__process_fork(struct perf_tool *tool,
230e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     union perf_event *event,
231e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     struct perf_sample *sample,
232e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     struct machine *machine);
233e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint perf_event__process_exit(struct perf_tool *tool,
234e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     union perf_event *event,
235e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     struct perf_sample *sample,
236e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     struct machine *machine);
237e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint perf_event__process(struct perf_tool *tool,
238e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			union perf_event *event,
239e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			struct perf_sample *sample,
240e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			struct machine *machine);
241e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
242e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct addr_location;
243e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint perf_event__preprocess_sample(const union perf_event *self,
244e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				  struct machine *machine,
245e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				  struct addr_location *al,
246e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				  struct perf_sample *sample);
247e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
248e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengconst char *perf_event__name(unsigned int id);
249e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
250e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsize_t perf_event__sample_event_size(const struct perf_sample *sample, u64 type,
251e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				     u64 sample_regs_user, u64 read_format);
252e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint perf_event__synthesize_sample(union perf_event *event, u64 type,
253e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				  u64 sample_regs_user, u64 read_format,
254e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				  const struct perf_sample *sample,
255e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				  bool swapped);
256e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
257e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsize_t perf_event__fprintf_comm(union perf_event *event, FILE *fp);
258e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsize_t perf_event__fprintf_mmap(union perf_event *event, FILE *fp);
259e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsize_t perf_event__fprintf_mmap2(union perf_event *event, FILE *fp);
260e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsize_t perf_event__fprintf_task(union perf_event *event, FILE *fp);
261e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsize_t perf_event__fprintf(union perf_event *event, FILE *fp);
262e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
263e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#endif /* __PERF_RECORD_H */
264