xref: /openbmc/linux/tools/perf/util/probe-finder.h (revision 253977b0)
14ea42b18SMasami Hiramatsu #ifndef _PROBE_FINDER_H
24ea42b18SMasami Hiramatsu #define _PROBE_FINDER_H
34ea42b18SMasami Hiramatsu 
44ea42b18SMasami Hiramatsu #define MAX_PATH_LEN 256
54ea42b18SMasami Hiramatsu #define MAX_PROBE_BUFFER 1024
64ea42b18SMasami Hiramatsu #define MAX_PROBES 128
74ea42b18SMasami Hiramatsu 
84ea42b18SMasami Hiramatsu static inline int is_c_varname(const char *name)
94ea42b18SMasami Hiramatsu {
104ea42b18SMasami Hiramatsu 	/* TODO */
114ea42b18SMasami Hiramatsu 	return isalpha(name[0]) || name[0] == '_';
124ea42b18SMasami Hiramatsu }
134ea42b18SMasami Hiramatsu 
144ea42b18SMasami Hiramatsu struct probe_point {
154ea42b18SMasami Hiramatsu 	/* Inputs */
164ea42b18SMasami Hiramatsu 	char	*file;		/* File name */
174ea42b18SMasami Hiramatsu 	int	line;		/* Line number */
184ea42b18SMasami Hiramatsu 
194ea42b18SMasami Hiramatsu 	char	*function;	/* Function name */
204ea42b18SMasami Hiramatsu 	int	offset;		/* Offset bytes */
214ea42b18SMasami Hiramatsu 
224ea42b18SMasami Hiramatsu 	int	nr_args;	/* Number of arguments */
234ea42b18SMasami Hiramatsu 	char	**args;		/* Arguments */
244ea42b18SMasami Hiramatsu 
25253977b0SMasami Hiramatsu 	int	retprobe;	/* Return probe */
26253977b0SMasami Hiramatsu 
274ea42b18SMasami Hiramatsu 	/* Output */
284ea42b18SMasami Hiramatsu 	int	found;		/* Number of found probe points */
294ea42b18SMasami Hiramatsu 	char	*probes[MAX_PROBES];	/* Output buffers (will be allocated)*/
304ea42b18SMasami Hiramatsu };
314ea42b18SMasami Hiramatsu 
3223e8ec0dSMasami Hiramatsu #ifndef NO_LIBDWARF
334ea42b18SMasami Hiramatsu extern int find_probepoint(int fd, struct probe_point *pp);
344ea42b18SMasami Hiramatsu 
354ea42b18SMasami Hiramatsu #include <libdwarf/dwarf.h>
364ea42b18SMasami Hiramatsu #include <libdwarf/libdwarf.h>
374ea42b18SMasami Hiramatsu 
384ea42b18SMasami Hiramatsu struct probe_finder {
394ea42b18SMasami Hiramatsu 	struct probe_point	*pp;	/* Target probe point */
404ea42b18SMasami Hiramatsu 
414ea42b18SMasami Hiramatsu 	/* For function searching */
424ea42b18SMasami Hiramatsu 	Dwarf_Addr	addr;		/* Address */
434ea42b18SMasami Hiramatsu 	Dwarf_Unsigned	fno;		/* File number */
444ea42b18SMasami Hiramatsu 	Dwarf_Off	inl_offs;	/* Inline offset */
454ea42b18SMasami Hiramatsu 
464ea42b18SMasami Hiramatsu 	/* For variable searching */
474ea42b18SMasami Hiramatsu 	Dwarf_Addr	cu_base;	/* Current CU base address */
484ea42b18SMasami Hiramatsu 	Dwarf_Locdesc	fbloc;		/* Location of Current Frame Base */
494ea42b18SMasami Hiramatsu 	const char	*var;		/* Current variable name */
504ea42b18SMasami Hiramatsu 	char		*buf;		/* Current output buffer */
514ea42b18SMasami Hiramatsu 	int		len;		/* Length of output buffer */
524ea42b18SMasami Hiramatsu };
5323e8ec0dSMasami Hiramatsu #endif /* NO_LIBDWARF */
544ea42b18SMasami Hiramatsu 
554ea42b18SMasami Hiramatsu #endif /*_PROBE_FINDER_H */
56