xref: /openbmc/linux/tools/perf/util/probe-finder.h (revision a09d2831)
1 #ifndef _PROBE_FINDER_H
2 #define _PROBE_FINDER_H
3 
4 #define MAX_PATH_LEN		 256
5 #define MAX_PROBE_BUFFER	1024
6 #define MAX_PROBES		 128
7 
8 static inline int is_c_varname(const char *name)
9 {
10 	/* TODO */
11 	return isalpha(name[0]) || name[0] == '_';
12 }
13 
14 struct probe_point {
15 	char			*event;			/* Event name */
16 	char			*group;			/* Event group */
17 
18 	/* Inputs */
19 	char			*file;			/* File name */
20 	int			line;			/* Line number */
21 
22 	char			*function;		/* Function name */
23 	int			offset;			/* Offset bytes */
24 
25 	int			nr_args;		/* Number of arguments */
26 	char			**args;			/* Arguments */
27 
28 	int			retprobe;		/* Return probe */
29 
30 	/* Output */
31 	int			found;			/* Number of found probe points */
32 	char			*probes[MAX_PROBES];	/* Output buffers (will be allocated)*/
33 };
34 
35 #ifndef NO_LIBDWARF
36 extern int find_probepoint(int fd, struct probe_point *pp);
37 
38 /* Workaround for undefined _MIPS_SZLONG bug in libdwarf.h: */
39 #ifndef _MIPS_SZLONG
40 # define _MIPS_SZLONG		0
41 #endif
42 
43 #include <dwarf.h>
44 #include <libdwarf.h>
45 
46 struct probe_finder {
47 	struct probe_point	*pp;			/* Target probe point */
48 
49 	/* For function searching */
50 	Dwarf_Addr		addr;			/* Address */
51 	Dwarf_Unsigned		fno;			/* File number */
52 	Dwarf_Unsigned		lno;			/* Line number */
53 	Dwarf_Off		inl_offs;		/* Inline offset */
54 	Dwarf_Die		cu_die;			/* Current CU */
55 
56 	/* For variable searching */
57 	Dwarf_Addr		cu_base;		/* Current CU base address */
58 	Dwarf_Locdesc		fbloc;			/* Location of Current Frame Base */
59 	const char		*var;			/* Current variable name */
60 	char			*buf;			/* Current output buffer */
61 	int			len;			/* Length of output buffer */
62 };
63 #endif /* NO_LIBDWARF */
64 
65 #endif /*_PROBE_FINDER_H */
66