cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

probe-file.h (2697B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __PROBE_FILE_H
      3#define __PROBE_FILE_H
      4
      5#include "probe-event.h"
      6
      7struct strlist;
      8struct strfilter;
      9
     10/* Cache of probe definitions */
     11struct probe_cache_entry {
     12	struct list_head	node;
     13	bool			sdt;
     14	struct perf_probe_event pev;
     15	char			*spev;
     16	struct strlist		*tevlist;
     17};
     18
     19struct probe_cache {
     20	int	fd;
     21	struct list_head entries;
     22};
     23
     24enum probe_type {
     25	PROBE_TYPE_U = 0,
     26	PROBE_TYPE_S,
     27	PROBE_TYPE_X,
     28	PROBE_TYPE_STRING,
     29	PROBE_TYPE_BITFIELD,
     30	PROBE_TYPE_END,
     31};
     32
     33#define PF_FL_UPROBE	1
     34#define PF_FL_RW	2
     35#define for_each_probe_cache_entry(entry, pcache) \
     36	list_for_each_entry(entry, &pcache->entries, node)
     37
     38/* probe-file.c depends on libelf */
     39#ifdef HAVE_LIBELF_SUPPORT
     40int open_trace_file(const char *trace_file, bool readwrite);
     41int probe_file__open(int flag);
     42int probe_file__open_both(int *kfd, int *ufd, int flag);
     43struct strlist *probe_file__get_namelist(int fd);
     44struct strlist *probe_file__get_rawlist(int fd);
     45int probe_file__add_event(int fd, struct probe_trace_event *tev);
     46
     47int probe_file__del_events(int fd, struct strfilter *filter);
     48int probe_file__get_events(int fd, struct strfilter *filter,
     49				  struct strlist *plist);
     50int probe_file__del_strlist(int fd, struct strlist *namelist);
     51
     52int probe_cache_entry__get_event(struct probe_cache_entry *entry,
     53				 struct probe_trace_event **tevs);
     54
     55struct probe_cache *probe_cache__new(const char *target, struct nsinfo *nsi);
     56int probe_cache__add_entry(struct probe_cache *pcache,
     57			   struct perf_probe_event *pev,
     58			   struct probe_trace_event *tevs, int ntevs);
     59int probe_cache__scan_sdt(struct probe_cache *pcache, const char *pathname);
     60int probe_cache__commit(struct probe_cache *pcache);
     61void probe_cache__purge(struct probe_cache *pcache);
     62void probe_cache__delete(struct probe_cache *pcache);
     63int probe_cache__filter_purge(struct probe_cache *pcache,
     64			      struct strfilter *filter);
     65struct probe_cache_entry *probe_cache__find(struct probe_cache *pcache,
     66					    struct perf_probe_event *pev);
     67struct probe_cache_entry *probe_cache__find_by_name(struct probe_cache *pcache,
     68					const char *group, const char *event);
     69int probe_cache__show_all_caches(struct strfilter *filter);
     70bool probe_type_is_available(enum probe_type type);
     71bool kretprobe_offset_is_supported(void);
     72bool uprobe_ref_ctr_is_supported(void);
     73bool user_access_is_supported(void);
     74bool multiprobe_event_is_supported(void);
     75bool immediate_value_is_supported(void);
     76#else	/* ! HAVE_LIBELF_SUPPORT */
     77static inline struct probe_cache *probe_cache__new(const char *tgt __maybe_unused, struct nsinfo *nsi __maybe_unused)
     78{
     79	return NULL;
     80}
     81#define probe_cache__delete(pcache) do {} while (0)
     82#endif
     83#endif