| Masami Hiramatsu | 4ea42b1 | 2009-10-08 17:17:38 -0400 | [diff] [blame] | 1 | #ifndef _PROBE_FINDER_H | 
|  | 2 | #define _PROBE_FINDER_H | 
|  | 3 |  | 
| Masami Hiramatsu | 804b360 | 2010-02-25 08:35:42 -0500 | [diff] [blame] | 4 | #include <stdbool.h> | 
| Arnaldo Carvalho de Melo | 4a58e61 | 2009-12-27 21:37:00 -0200 | [diff] [blame] | 5 | #include "util.h" | 
| Masami Hiramatsu | 4235b04 | 2010-03-16 18:06:12 -0400 | [diff] [blame] | 6 | #include "probe-event.h" | 
| Arnaldo Carvalho de Melo | 4a58e61 | 2009-12-27 21:37:00 -0200 | [diff] [blame] | 7 |  | 
| Masami Hiramatsu | 27f3b24 | 2009-12-16 17:16:19 -0500 | [diff] [blame] | 8 | #define MAX_PATH_LEN		 256 | 
|  | 9 | #define MAX_PROBE_BUFFER	1024 | 
|  | 10 | #define MAX_PROBES		 128 | 
| Masami Hiramatsu | 4ea42b1 | 2009-10-08 17:17:38 -0400 | [diff] [blame] | 11 |  | 
|  | 12 | static inline int is_c_varname(const char *name) | 
|  | 13 | { | 
|  | 14 | /* TODO */ | 
|  | 15 | return isalpha(name[0]) || name[0] == '_'; | 
|  | 16 | } | 
|  | 17 |  | 
| Masami Hiramatsu | 4b4da7f | 2010-03-22 13:10:26 -0300 | [diff] [blame] | 18 | #ifdef DWARF_SUPPORT | 
| Masami Hiramatsu | ff74178 | 2011-06-27 16:27:39 +0900 | [diff] [blame] | 19 |  | 
|  | 20 | #include "dwarf-aux.h" | 
|  | 21 |  | 
|  | 22 | /* TODO: export debuginfo data structure even if no dwarf support */ | 
|  | 23 |  | 
|  | 24 | /* debug information structure */ | 
|  | 25 | struct debuginfo { | 
|  | 26 | Dwarf		*dbg; | 
|  | 27 | Dwfl		*dwfl; | 
|  | 28 | Dwarf_Addr	bias; | 
|  | 29 | }; | 
|  | 30 |  | 
|  | 31 | extern struct debuginfo *debuginfo__new(const char *path); | 
|  | 32 | extern struct debuginfo *debuginfo__new_online_kernel(unsigned long addr); | 
|  | 33 | extern void debuginfo__delete(struct debuginfo *self); | 
|  | 34 |  | 
| Srikar Dronamraju | 0e60836 | 2010-07-29 19:43:51 +0530 | [diff] [blame] | 35 | /* Find probe_trace_events specified by perf_probe_event from debuginfo */ | 
| Masami Hiramatsu | ff74178 | 2011-06-27 16:27:39 +0900 | [diff] [blame] | 36 | extern int debuginfo__find_trace_events(struct debuginfo *self, | 
|  | 37 | struct perf_probe_event *pev, | 
|  | 38 | struct probe_trace_event **tevs, | 
|  | 39 | int max_tevs); | 
| Masami Hiramatsu | 4235b04 | 2010-03-16 18:06:12 -0400 | [diff] [blame] | 40 |  | 
| Masami Hiramatsu | fb1587d | 2010-03-16 18:06:19 -0400 | [diff] [blame] | 41 | /* Find a perf_probe_point from debuginfo */ | 
| Masami Hiramatsu | ff74178 | 2011-06-27 16:27:39 +0900 | [diff] [blame] | 42 | extern int debuginfo__find_probe_point(struct debuginfo *self, | 
|  | 43 | unsigned long addr, | 
|  | 44 | struct perf_probe_point *ppt); | 
| Masami Hiramatsu | fb1587d | 2010-03-16 18:06:19 -0400 | [diff] [blame] | 45 |  | 
| Masami Hiramatsu | cf6eb48 | 2010-10-21 19:13:23 +0900 | [diff] [blame] | 46 | /* Find a line range */ | 
| Masami Hiramatsu | ff74178 | 2011-06-27 16:27:39 +0900 | [diff] [blame] | 47 | extern int debuginfo__find_line_range(struct debuginfo *self, | 
|  | 48 | struct line_range *lr); | 
| Masami Hiramatsu | 4ea42b1 | 2009-10-08 17:17:38 -0400 | [diff] [blame] | 49 |  | 
| Masami Hiramatsu | cf6eb48 | 2010-10-21 19:13:23 +0900 | [diff] [blame] | 50 | /* Find available variables */ | 
| Masami Hiramatsu | ff74178 | 2011-06-27 16:27:39 +0900 | [diff] [blame] | 51 | extern int debuginfo__find_available_vars_at(struct debuginfo *self, | 
|  | 52 | struct perf_probe_event *pev, | 
|  | 53 | struct variable_list **vls, | 
|  | 54 | int max_points, bool externs); | 
| Masami Hiramatsu | 4ea42b1 | 2009-10-08 17:17:38 -0400 | [diff] [blame] | 55 |  | 
|  | 56 | struct probe_finder { | 
| Masami Hiramatsu | 4235b04 | 2010-03-16 18:06:12 -0400 | [diff] [blame] | 57 | struct perf_probe_event	*pev;		/* Target probe event */ | 
| Masami Hiramatsu | cf6eb48 | 2010-10-21 19:13:23 +0900 | [diff] [blame] | 58 |  | 
|  | 59 | /* Callback when a probe point is found */ | 
| Masami Hiramatsu | 221d061 | 2011-08-11 20:02:59 +0900 | [diff] [blame] | 60 | int (*callback)(Dwarf_Die *sc_die, struct probe_finder *pf); | 
| Masami Hiramatsu | 4ea42b1 | 2009-10-08 17:17:38 -0400 | [diff] [blame] | 61 |  | 
|  | 62 | /* For function searching */ | 
| Arnaldo Carvalho de Melo | eed05fe | 2010-04-05 12:53:45 -0300 | [diff] [blame] | 63 | int			lno;		/* Line number */ | 
| Masami Hiramatsu | 804b360 | 2010-02-25 08:35:42 -0500 | [diff] [blame] | 64 | Dwarf_Addr		addr;		/* Address */ | 
| Masami Hiramatsu | 4235b04 | 2010-03-16 18:06:12 -0400 | [diff] [blame] | 65 | const char		*fname;		/* Real file name */ | 
| Masami Hiramatsu | 804b360 | 2010-02-25 08:35:42 -0500 | [diff] [blame] | 66 | Dwarf_Die		cu_die;		/* Current CU */ | 
| Lin Ming | cd25f8b | 2011-03-25 16:27:48 +0800 | [diff] [blame] | 67 | Dwarf_Die		sp_die; | 
| Masami Hiramatsu | 4235b04 | 2010-03-16 18:06:12 -0400 | [diff] [blame] | 68 | struct list_head	lcache;		/* Line cache for lazy match */ | 
| Masami Hiramatsu | 4ea42b1 | 2009-10-08 17:17:38 -0400 | [diff] [blame] | 69 |  | 
|  | 70 | /* For variable searching */ | 
| Masami Hiramatsu | 7752f1b | 2010-05-10 13:12:07 -0400 | [diff] [blame] | 71 | #if _ELFUTILS_PREREQ(0, 142) | 
| Masami Hiramatsu | a34a985 | 2010-04-12 13:17:29 -0400 | [diff] [blame] | 72 | Dwarf_CFI		*cfi;		/* Call Frame Information */ | 
| Masami Hiramatsu | 7752f1b | 2010-05-10 13:12:07 -0400 | [diff] [blame] | 73 | #endif | 
| Masami Hiramatsu | 804b360 | 2010-02-25 08:35:42 -0500 | [diff] [blame] | 74 | Dwarf_Op		*fb_ops;	/* Frame base attribute */ | 
| Masami Hiramatsu | 4235b04 | 2010-03-16 18:06:12 -0400 | [diff] [blame] | 75 | struct perf_probe_arg	*pvar;		/* Current target variable */ | 
| Srikar Dronamraju | 0e60836 | 2010-07-29 19:43:51 +0530 | [diff] [blame] | 76 | struct probe_trace_arg	*tvar;		/* Current result variable */ | 
| Masami Hiramatsu | 4ea42b1 | 2009-10-08 17:17:38 -0400 | [diff] [blame] | 77 | }; | 
| Masami Hiramatsu | 631c9de | 2010-01-06 09:45:34 -0500 | [diff] [blame] | 78 |  | 
| Masami Hiramatsu | cf6eb48 | 2010-10-21 19:13:23 +0900 | [diff] [blame] | 79 | struct trace_event_finder { | 
|  | 80 | struct probe_finder	pf; | 
|  | 81 | struct probe_trace_event *tevs;		/* Found trace events */ | 
|  | 82 | int			ntevs;		/* Number of trace events */ | 
|  | 83 | int			max_tevs;	/* Max number of trace events */ | 
|  | 84 | }; | 
|  | 85 |  | 
|  | 86 | struct available_var_finder { | 
|  | 87 | struct probe_finder	pf; | 
|  | 88 | struct variable_list	*vls;		/* Found variable lists */ | 
|  | 89 | int			nvls;		/* Number of variable lists */ | 
|  | 90 | int			max_vls;	/* Max no. of variable lists */ | 
| Masami Hiramatsu | fb8c5a5 | 2010-10-21 19:13:35 +0900 | [diff] [blame] | 91 | bool			externs;	/* Find external vars too */ | 
|  | 92 | bool			child;		/* Search child scopes */ | 
| Masami Hiramatsu | cf6eb48 | 2010-10-21 19:13:23 +0900 | [diff] [blame] | 93 | }; | 
|  | 94 |  | 
| Masami Hiramatsu | 631c9de | 2010-01-06 09:45:34 -0500 | [diff] [blame] | 95 | struct line_finder { | 
| Masami Hiramatsu | 804b360 | 2010-02-25 08:35:42 -0500 | [diff] [blame] | 96 | struct line_range	*lr;		/* Target line range */ | 
| Masami Hiramatsu | 631c9de | 2010-01-06 09:45:34 -0500 | [diff] [blame] | 97 |  | 
| Masami Hiramatsu | 804b360 | 2010-02-25 08:35:42 -0500 | [diff] [blame] | 98 | const char		*fname;		/* File name */ | 
|  | 99 | int			lno_s;		/* Start line number */ | 
|  | 100 | int			lno_e;		/* End line number */ | 
| Masami Hiramatsu | 804b360 | 2010-02-25 08:35:42 -0500 | [diff] [blame] | 101 | Dwarf_Die		cu_die;		/* Current CU */ | 
| Lin Ming | cd25f8b | 2011-03-25 16:27:48 +0800 | [diff] [blame] | 102 | Dwarf_Die		sp_die; | 
| Masami Hiramatsu | 631c9de | 2010-01-06 09:45:34 -0500 | [diff] [blame] | 103 | int			found; | 
|  | 104 | }; | 
|  | 105 |  | 
| Masami Hiramatsu | 4b4da7f | 2010-03-22 13:10:26 -0300 | [diff] [blame] | 106 | #endif /* DWARF_SUPPORT */ | 
| Masami Hiramatsu | 4ea42b1 | 2009-10-08 17:17:38 -0400 | [diff] [blame] | 107 |  | 
|  | 108 | #endif /*_PROBE_FINDER_H */ |