2009-10-09 01:17:38 +04:00
# ifndef _PROBE_FINDER_H
# define _PROBE_FINDER_H
2009-12-28 02:37:00 +03:00
# include "util.h"
2009-12-17 01:16:19 +03:00
# define MAX_PATH_LEN 256
# define MAX_PROBE_BUFFER 1024
# define MAX_PROBES 128
2009-10-09 01:17:38 +04:00
static inline int is_c_varname ( const char * name )
{
/* TODO */
return isalpha ( name [ 0 ] ) | | name [ 0 ] = = ' _ ' ;
}
struct probe_point {
2009-12-17 01:16:19 +03:00
char * event ; /* Event name */
char * group ; /* Event group */
2009-12-15 18:32:18 +03:00
2009-10-09 01:17:38 +04:00
/* Inputs */
2009-12-17 01:16:19 +03:00
char * file ; /* File name */
int line ; /* Line number */
2009-10-09 01:17:38 +04:00
2009-12-17 01:16:19 +03:00
char * function ; /* Function name */
int offset ; /* Offset bytes */
2009-10-09 01:17:38 +04:00
2009-12-17 01:16:19 +03:00
int nr_args ; /* Number of arguments */
char * * args ; /* Arguments */
2009-10-09 01:17:38 +04:00
2009-12-17 01:16:19 +03:00
int retprobe ; /* Return probe */
2009-10-27 23:43:10 +03:00
2009-10-09 01:17:38 +04:00
/* Output */
2009-12-17 01:16:19 +03:00
int found ; /* Number of found probe points */
char * probes [ MAX_PROBES ] ; /* Output buffers (will be allocated)*/
2009-10-09 01:17:38 +04:00
} ;
2010-01-06 17:45:34 +03:00
/* Line number container */
struct line_node {
struct list_head list ;
unsigned int line ;
} ;
/* Line range */
struct line_range {
char * file ; /* File name */
char * function ; /* Function name */
unsigned int start ; /* Start line number */
unsigned int end ; /* End line number */
unsigned int offset ; /* Start line offset */
char * path ; /* Real path name */
struct list_head line_list ; /* Visible lines */
} ;
2009-10-08 02:28:30 +04:00
# ifndef NO_LIBDWARF
2009-10-09 01:17:38 +04:00
extern int find_probepoint ( int fd , struct probe_point * pp ) ;
2010-01-06 17:45:34 +03:00
extern int find_line_range ( int fd , struct line_range * lr ) ;
2009-10-09 01:17:38 +04:00
2009-12-17 01:16:19 +03:00
/* Workaround for undefined _MIPS_SZLONG bug in libdwarf.h: */
# ifndef _MIPS_SZLONG
# define _MIPS_SZLONG 0
# endif
# include <dwarf.h>
# include <libdwarf.h>
2009-10-09 01:17:38 +04:00
struct probe_finder {
2009-12-17 01:16:19 +03:00
struct probe_point * pp ; /* Target probe point */
2009-10-09 01:17:38 +04:00
/* For function searching */
2009-12-17 01:16:19 +03:00
Dwarf_Addr addr ; /* Address */
Dwarf_Unsigned fno ; /* File number */
Dwarf_Unsigned lno ; /* Line number */
Dwarf_Off inl_offs ; /* Inline offset */
Dwarf_Die cu_die ; /* Current CU */
2009-10-09 01:17:38 +04:00
/* For variable searching */
2009-12-17 01:16:19 +03:00
Dwarf_Addr cu_base ; /* Current CU base address */
Dwarf_Locdesc fbloc ; /* Location of Current Frame Base */
const char * var ; /* Current variable name */
char * buf ; /* Current output buffer */
int len ; /* Length of output buffer */
2009-10-09 01:17:38 +04:00
} ;
2010-01-06 17:45:34 +03:00
struct line_finder {
struct line_range * lr ; /* Target line range */
Dwarf_Unsigned fno ; /* File number */
Dwarf_Unsigned lno_s ; /* Start line number */
Dwarf_Unsigned lno_e ; /* End line number */
Dwarf_Addr addr_s ; /* Start address */
Dwarf_Addr addr_e ; /* End address */
Dwarf_Die cu_die ; /* Current CU */
int found ;
} ;
2009-10-08 02:28:30 +04:00
# endif /* NO_LIBDWARF */
2009-10-09 01:17:38 +04:00
# endif /*_PROBE_FINDER_H */