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