dlfilter.h (2696B)
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