blob: a39520e6ae8fbad1f37a5900e3039a92c06c0001 [file] [log] [blame]
Ingo Molnarcdd6c482009-09-21 12:02:48 +02001#ifndef __PERF_RECORD_H
2#define __PERF_RECORD_H
John Kacur8b40f522009-09-24 18:02:18 +02003
Frederic Weisbecker1fe2c102009-08-12 10:19:53 +02004#include "../perf.h"
Frederic Weisbecker66e274f2009-08-12 11:07:25 +02005#include "util.h"
Arnaldo Carvalho de Melo439d4732009-10-02 03:29:58 -03006#include <linux/list.h>
Arnaldo Carvalho de Melo1b46cdd2009-09-28 14:48:46 -03007#include <linux/rbtree.h>
Frederic Weisbecker1fe2c102009-08-12 10:19:53 +02008
Frederic Weisbecker0f25bfc2009-08-16 19:56:54 +02009enum {
10 SHOW_KERNEL = 1,
11 SHOW_USER = 2,
12 SHOW_HV = 4,
13};
14
Peter Zijlstra18408dd2009-08-13 11:47:55 +020015/*
16 * PERF_SAMPLE_IP | PERF_SAMPLE_TID | *
17 */
Frederic Weisbecker1fe2c102009-08-12 10:19:53 +020018struct ip_event {
19 struct perf_event_header header;
20 u64 ip;
21 u32 pid, tid;
22 unsigned char __more_data[];
23};
24
25struct mmap_event {
26 struct perf_event_header header;
27 u32 pid, tid;
28 u64 start;
29 u64 len;
30 u64 pgoff;
31 char filename[PATH_MAX];
32};
33
34struct comm_event {
35 struct perf_event_header header;
36 u32 pid, tid;
37 char comm[16];
38};
39
40struct fork_event {
41 struct perf_event_header header;
42 u32 pid, ppid;
43 u32 tid, ptid;
Arjan van de Ven393b2ad2009-09-12 07:52:47 +020044 u64 time;
Frederic Weisbecker1fe2c102009-08-12 10:19:53 +020045};
46
47struct lost_event {
48 struct perf_event_header header;
49 u64 id;
50 u64 lost;
51};
52
Peter Zijlstra18408dd2009-08-13 11:47:55 +020053/*
54 * PERF_FORMAT_ENABLED | PERF_FORMAT_RUNNING | PERF_FORMAT_ID
55 */
Frederic Weisbecker1fe2c102009-08-12 10:19:53 +020056struct read_event {
57 struct perf_event_header header;
Ingo Molnardc02bf72009-09-16 13:45:00 +020058 u32 pid, tid;
Frederic Weisbecker1fe2c102009-08-12 10:19:53 +020059 u64 value;
60 u64 time_enabled;
61 u64 time_running;
62 u64 id;
63};
64
Arjan van de Venfd39e052009-09-12 07:53:00 +020065struct sample_event{
66 struct perf_event_header header;
67 u64 array[];
68};
69
70
Frederic Weisbecker1fe2c102009-08-12 10:19:53 +020071typedef union event_union {
72 struct perf_event_header header;
73 struct ip_event ip;
74 struct mmap_event mmap;
75 struct comm_event comm;
76 struct fork_event fork;
77 struct lost_event lost;
78 struct read_event read;
Arjan van de Venfd39e052009-09-12 07:53:00 +020079 struct sample_event sample;
Frederic Weisbecker1fe2c102009-08-12 10:19:53 +020080} event_t;
Frederic Weisbecker66e274f2009-08-12 11:07:25 +020081
82struct map {
Arnaldo Carvalho de Melo439d4732009-10-02 03:29:58 -030083 union {
84 struct rb_node rb_node;
85 struct list_head node;
86 };
Frederic Weisbecker66e274f2009-08-12 11:07:25 +020087 u64 start;
88 u64 end;
89 u64 pgoff;
90 u64 (*map_ip)(struct map *, u64);
91 struct dso *dso;
92};
93
94static inline u64 map__map_ip(struct map *map, u64 ip)
95{
96 return ip - map->start + map->pgoff;
97}
98
99static inline u64 vdso__map_ip(struct map *map __used, u64 ip)
100{
101 return ip;
102}
103
104struct map *map__new(struct mmap_event *event, char *cwd, int cwdlen);
105struct map *map__clone(struct map *self);
106int map__overlap(struct map *l, struct map *r);
107size_t map__fprintf(struct map *self, FILE *fp);
108
John Kacur8b40f522009-09-24 18:02:18 +0200109#endif /* __PERF_RECORD_H */