brintos

brintos / linux-shallow public Read only

0
0
Text · 2.6 KiB · cc4bb96 Raw
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