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 <linux/bitmap.h>
   8#include <linux/types.h>
   9#include "event.h"
  10
  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_GROUP_DESC,
  33        HEADER_LAST_FEATURE,
  34        HEADER_FEAT_BITS        = 256,
  35};
  36
  37enum perf_header_version {
  38        PERF_HEADER_VERSION_1,
  39        PERF_HEADER_VERSION_2,
  40};
  41
  42struct perf_file_section {
  43        u64 offset;
  44        u64 size;
  45};
  46
  47struct perf_file_header {
  48        u64                             magic;
  49        u64                             size;
  50        u64                             attr_size;
  51        struct perf_file_section        attrs;
  52        struct perf_file_section        data;
  53        /* event_types is ignored */
  54        struct perf_file_section        event_types;
  55        DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS);
  56};
  57
  58struct perf_pipe_file_header {
  59        u64                             magic;
  60        u64                             size;
  61};
  62
  63struct perf_header;
  64
  65int perf_file_header__read(struct perf_file_header *header,
  66                           struct perf_header *ph, int fd);
  67
  68struct perf_session_env {
  69        char                    *hostname;
  70        char                    *os_release;
  71        char                    *version;
  72        char                    *arch;
  73        int                     nr_cpus_online;
  74        int                     nr_cpus_avail;
  75        char                    *cpu_desc;
  76        char                    *cpuid;
  77        unsigned long long      total_mem;
  78
  79        int                     nr_cmdline;
  80        int                     nr_sibling_cores;
  81        int                     nr_sibling_threads;
  82        int                     nr_numa_nodes;
  83        int                     nr_pmu_mappings;
  84        int                     nr_groups;
  85        char                    *cmdline;
  86        char                    *sibling_cores;
  87        char                    *sibling_threads;
  88        char                    *numa_nodes;
  89        char                    *pmu_mappings;
  90};
  91
  92struct perf_header {
  93        enum perf_header_version        version;
  94        bool                            needs_swap;
  95        u64                             data_offset;
  96        u64                             data_size;
  97        u64                             feat_offset;
  98        DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS);
  99        struct perf_session_env         env;
 100};
 101
 102struct perf_evlist;
 103struct perf_session;
 104
 105int perf_session__read_header(struct perf_session *session);
 106int perf_session__write_header(struct perf_session *session,
 107                               struct perf_evlist *evlist,
 108                               int fd, bool at_exit);
 109int perf_header__write_pipe(int fd);
 110
 111void perf_header__set_feat(struct perf_header *header, int feat);
 112void perf_header__clear_feat(struct perf_header *header, int feat);
 113bool perf_header__has_feat(const struct perf_header *header, int feat);
 114
 115int perf_header__set_cmdline(int argc, const char **argv);
 116
 117int perf_header__process_sections(struct perf_header *header, int fd,
 118                                  void *data,
 119                                  int (*process)(struct perf_file_section *section,
 120                                  struct perf_header *ph,
 121                                  int feat, int fd, void *data));
 122
 123int perf_header__fprintf_info(struct perf_session *s, FILE *fp, bool full);
 124
 125int build_id_cache__add_s(const char *sbuild_id, const char *debugdir,
 126                          const char *name, bool is_kallsyms, bool is_vdso);
 127int build_id_cache__remove_s(const char *sbuild_id, const char *debugdir);
 128
 129int perf_event__synthesize_attr(struct perf_tool *tool,
 130                                struct perf_event_attr *attr, u32 ids, u64 *id,
 131                                perf_event__handler_t process);
 132int perf_event__synthesize_attrs(struct perf_tool *tool,
 133                                 struct perf_session *session,
 134                                 perf_event__handler_t process);
 135int perf_event__process_attr(struct perf_tool *tool, union perf_event *event,
 136                             struct perf_evlist **pevlist);
 137
 138int perf_event__synthesize_tracing_data(struct perf_tool *tool,
 139                                        int fd, struct perf_evlist *evlist,
 140                                        perf_event__handler_t process);
 141int perf_event__process_tracing_data(struct perf_tool *tool,
 142                                     union perf_event *event,
 143                                     struct perf_session *session);
 144
 145int perf_event__synthesize_build_id(struct perf_tool *tool,
 146                                    struct dso *pos, u16 misc,
 147                                    perf_event__handler_t process,
 148                                    struct machine *machine);
 149int perf_event__process_build_id(struct perf_tool *tool,
 150                                 union perf_event *event,
 151                                 struct perf_session *session);
 152bool is_perf_magic(u64 magic);
 153
 154int dsos__hit_all(struct perf_session *session);
 155
 156/*
 157 * arch specific callback
 158 */
 159int get_cpuid(char *buffer, size_t sz);
 160
 161#endif /* __PERF_HEADER_H */
 162