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