linux/tools/perf/util/dlfilter.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 * dlfilter.h: Interface to perf script --dlfilter shared object
   4 * Copyright (c) 2021, Intel Corporation.
   5 */
   6
   7#ifndef PERF_UTIL_DLFILTER_H
   8#define PERF_UTIL_DLFILTER_H
   9
  10struct perf_session;
  11union  perf_event;
  12struct perf_sample;
  13struct evsel;
  14struct machine;
  15struct addr_location;
  16struct perf_dlfilter_fns;
  17struct perf_dlfilter_sample;
  18struct perf_dlfilter_al;
  19
  20struct dlfilter {
  21        char                            *file;
  22        void                            *handle;
  23        void                            *data;
  24        struct perf_session             *session;
  25        bool                            ctx_valid;
  26        bool                            in_start;
  27        bool                            in_stop;
  28        int                             dlargc;
  29        char                            **dlargv;
  30
  31        union perf_event                *event;
  32        struct perf_sample              *sample;
  33        struct evsel                    *evsel;
  34        struct machine                  *machine;
  35        struct addr_location            *al;
  36        struct addr_location            *addr_al;
  37        struct perf_dlfilter_sample     *d_sample;
  38        struct perf_dlfilter_al         *d_ip_al;
  39        struct perf_dlfilter_al         *d_addr_al;
  40
  41        int (*start)(void **data, void *ctx);
  42        int (*stop)(void *data, void *ctx);
  43
  44        int (*filter_event)(void *data,
  45                            const struct perf_dlfilter_sample *sample,
  46                            void *ctx);
  47        int (*filter_event_early)(void *data,
  48                                  const struct perf_dlfilter_sample *sample,
  49                                  void *ctx);
  50
  51        struct perf_dlfilter_fns *fns;
  52};
  53
  54struct dlfilter *dlfilter__new(const char *file, int dlargc, char **dlargv);
  55
  56int dlfilter__start(struct dlfilter *d, struct perf_session *session);
  57
  58int dlfilter__do_filter_event(struct dlfilter *d,
  59                              union perf_event *event,
  60                              struct perf_sample *sample,
  61                              struct evsel *evsel,
  62                              struct machine *machine,
  63                              struct addr_location *al,
  64                              struct addr_location *addr_al,
  65                              bool early);
  66
  67void dlfilter__cleanup(struct dlfilter *d);
  68
  69static inline int dlfilter__filter_event(struct dlfilter *d,
  70                                         union perf_event *event,
  71                                         struct perf_sample *sample,
  72                                         struct evsel *evsel,
  73                                         struct machine *machine,
  74                                         struct addr_location *al,
  75                                         struct addr_location *addr_al)
  76{
  77        if (!d || !d->filter_event)
  78                return 0;
  79        return dlfilter__do_filter_event(d, event, sample, evsel, machine, al, addr_al, false);
  80}
  81
  82static inline int dlfilter__filter_event_early(struct dlfilter *d,
  83                                               union perf_event *event,
  84                                               struct perf_sample *sample,
  85                                               struct evsel *evsel,
  86                                               struct machine *machine,
  87                                               struct addr_location *al,
  88                                               struct addr_location *addr_al)
  89{
  90        if (!d || !d->filter_event_early)
  91                return 0;
  92        return dlfilter__do_filter_event(d, event, sample, evsel, machine, al, addr_al, true);
  93}
  94
  95int list_available_dlfilters(const struct option *opt, const char *s, int unset);
  96bool get_filter_desc(const char *dirname, const char *name, char **desc,
  97                     char **long_desc);
  98
  99#endif
 100