linux/tools/perf/util/header.h
<<
>>
Prefs
   1#ifndef __PERF_HEADER_H
   2#define __PERF_HEADER_H
   3
   4#include <linux/perf_event.h>
   5#include <sys/types.h>
   6#include <stdbool.h>
   7#include "types.h"
   8#include "event.h"
   9
  10#include <linux/bitmap.h>
  11
  12enum {
  13        HEADER_RESERVED         = 0,    /* always cleared */
  14        HEADER_FIRST_FEATURE    = 1,
  15        HEADER_TRACING_DATA     = 1,
  16        HEADER_BUILD_ID,
  17
  18        HEADER_HOSTNAME,
  19        HEADER_OSRELEASE,
  20        HEADER_VERSION,
  21        HEADER_ARCH,
  22        HEADER_NRCPUS,
  23        HEADER_CPUDESC,
  24        HEADER_CPUID,
  25        HEADER_TOTAL_MEM,
  26        HEADER_CMDLINE,
  27        HEADER_EVENT_DESC,
  28        HEADER_CPU_TOPOLOGY,
  29        HEADER_NUMA_TOPOLOGY,
  30        HEADER_BRANCH_STACK,
  31        HEADER_PMU_MAPPINGS,
  32        HEADER_LAST_FEATURE,
  33        HEADER_FEAT_BITS        = 256,
  34};
  35
  36struct perf_file_section {
  37        u64 offset;
  38        u64 size;
  39};
  40
  41struct perf_file_header {
  42        u64                             magic;
  43        u64                             size;
  44        u64                             attr_size;
  45        struct perf_file_section        attrs;
  46        struct perf_file_section        data;
  47        struct perf_file_section        event_types;
  48        DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS);
  49};
  50
  51struct perf_pipe_file_header {
  52        u64                             magic;
  53        u64                             size;
  54};
  55
  56struct perf_header;
  57
  58int perf_file_header__read(struct perf_file_header *header,
  59                           struct perf_header *ph, int fd);
  60
  61struct perf_session_env {
  62        char                    *hostname;
  63        char                    *os_release;
  64        char                    *version;
  65        char                    *arch;
  66        int                     nr_cpus_online;
  67        int                     nr_cpus_avail;
  68        char                    *cpu_desc;
  69        char                    *cpuid;
  70        unsigned long long      total_mem;
  71
  72        int                     nr_cmdline;
  73        char                    *cmdline;
  74        int                     nr_sibling_cores;
  75        char                    *sibling_cores;
  76        int                     nr_sibling_threads;
  77        char                    *sibling_threads;
  78        int                     nr_numa_nodes;
  79        char                    *numa_nodes;
  80        int                     nr_pmu_mappings;
  81        char                    *pmu_mappings;
  82};
  83
  84struct perf_header {
  85        int                     frozen;
  86        bool                    needs_swap;
  87        s64                     attr_offset;
  88        u64                     data_offset;
  89        u64                     data_size;
  90        u64                     event_offset;
  91        u64                     event_size;
  92        DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS);
  93        struct perf_session_env env;
  94};
  95
  96struct perf_evlist;
  97struct perf_session;
  98
  99int perf_session__read_header(struct perf_session *session, int fd);
 100int perf_session__write_header(struct perf_session *session,
 101                               struct perf_evlist *evlist,
 102                               int fd, bool at_exit);
 103int perf_header__write_pipe(int fd);
 104
 105int perf_header__push_event(u64 id, const char *name);
 106char *perf_header__find_event(u64 id);
 107
 108void perf_header__set_feat(struct perf_header *header, int feat);
 109void perf_header__clear_feat(struct perf_header *header, int feat);
 110bool perf_header__has_feat(const struct perf_header *header, int feat);
 111
 112int perf_header__set_cmdline(int argc, const char **argv);
 113
 114int perf_header__process_sections(struct perf_header *header, int fd,
 115                                  void *data,
 116                                  int (*process)(struct perf_file_section *section,
 117                                  struct perf_header *ph,
 118                                  int feat, int fd, void *data));
 119
 120int perf_header__fprintf_info(struct perf_session *s, FILE *fp, bool full);
 121
 122int build_id_cache__add_s(const char *sbuild_id, const char *debugdir,
 123                          const char *name, bool is_kallsyms, bool is_vdso);
 124int build_id_cache__remove_s(const char *sbuild_id, const char *debugdir);
 125
 126int perf_event__synthesize_attr(struct perf_tool *tool,
 127                                struct perf_event_attr *attr, u32 ids, u64 *id,
 128                                perf_event__handler_t process);
 129int perf_event__synthesize_attrs(struct perf_tool *tool,
 130                                 struct perf_session *session,
 131                                 perf_event__handler_t process);
 132int perf_event__process_attr(union perf_event *event, struct perf_evlist **pevlist);
 133
 134int perf_event__synthesize_event_type(struct perf_tool *tool,
 135                                      u64 event_id, char *name,
 136                                      perf_event__handler_t process,
 137                                      struct machine *machine);
 138int perf_event__synthesize_event_types(struct perf_tool *tool,
 139                                       perf_event__handler_t process,
 140                                       struct machine *machine);
 141int perf_event__process_event_type(struct perf_tool *tool,
 142                                   union perf_event *event);
 143
 144int perf_event__synthesize_tracing_data(struct perf_tool *tool,
 145                                        int fd, struct perf_evlist *evlist,
 146                                        perf_event__handler_t process);
 147int perf_event__process_tracing_data(union perf_event *event,
 148                                     struct perf_session *session);
 149
 150int perf_event__synthesize_build_id(struct perf_tool *tool,
 151                                    struct dso *pos, u16 misc,
 152                                    perf_event__handler_t process,
 153                                    struct machine *machine);
 154int perf_event__process_build_id(struct perf_tool *tool,
 155                                 union perf_event *event,
 156                                 struct perf_session *session);
 157bool is_perf_magic(u64 magic);
 158
 159/*
 160 * arch specific callback
 161 */
 162int get_cpuid(char *buffer, size_t sz);
 163
 164#endif /* __PERF_HEADER_H */
 165