100 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * dlfilter.h: Interface to perf script --dlfilter shared object4 * Copyright (c) 2021, Intel Corporation.5 */6 7#ifndef PERF_UTIL_DLFILTER_H8#define PERF_UTIL_DLFILTER_H9 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#endif100