2009-08-12 13:07:25 +04:00
# ifndef __PERF_EVENT_H
# define __PERF_EVENT_H
2009-08-12 12:19:53 +04:00
# include "../perf.h"
2009-08-12 13:07:25 +04:00
# include "util.h"
# include <linux/list.h>
2009-08-12 12:19:53 +04:00
2009-08-16 21:56:54 +04:00
enum {
SHOW_KERNEL = 1 ,
SHOW_USER = 2 ,
SHOW_HV = 4 ,
} ;
2009-08-13 13:47:55 +04:00
/*
* PERF_SAMPLE_IP | PERF_SAMPLE_TID | *
*/
2009-08-12 12:19:53 +04:00
struct ip_event {
struct perf_event_header header ;
u64 ip ;
u32 pid , tid ;
unsigned char __more_data [ ] ;
} ;
struct mmap_event {
struct perf_event_header header ;
u32 pid , tid ;
u64 start ;
u64 len ;
u64 pgoff ;
char filename [ PATH_MAX ] ;
} ;
struct comm_event {
struct perf_event_header header ;
u32 pid , tid ;
char comm [ 16 ] ;
} ;
struct fork_event {
struct perf_event_header header ;
u32 pid , ppid ;
u32 tid , ptid ;
} ;
struct lost_event {
struct perf_event_header header ;
u64 id ;
u64 lost ;
} ;
2009-08-13 13:47:55 +04:00
/*
* PERF_FORMAT_ENABLED | PERF_FORMAT_RUNNING | PERF_FORMAT_ID
*/
2009-08-12 12:19:53 +04:00
struct read_event {
struct perf_event_header header ;
u32 pid , tid ;
u64 value ;
u64 time_enabled ;
u64 time_running ;
u64 id ;
} ;
typedef union event_union {
struct perf_event_header header ;
struct ip_event ip ;
struct mmap_event mmap ;
struct comm_event comm ;
struct fork_event fork ;
struct lost_event lost ;
struct read_event read ;
} event_t ;
2009-08-12 13:07:25 +04:00
struct map {
struct list_head node ;
u64 start ;
u64 end ;
u64 pgoff ;
u64 ( * map_ip ) ( struct map * , u64 ) ;
struct dso * dso ;
} ;
static inline u64 map__map_ip ( struct map * map , u64 ip )
{
return ip - map - > start + map - > pgoff ;
}
static inline u64 vdso__map_ip ( struct map * map __used , u64 ip )
{
return ip ;
}
struct map * map__new ( struct mmap_event * event , char * cwd , int cwdlen ) ;
struct map * map__clone ( struct map * self ) ;
int map__overlap ( struct map * l , struct map * r ) ;
size_t map__fprintf ( struct map * self , FILE * fp ) ;
# endif