#ifndef _PROBE_FINDER_H
#define _PROBE_FINDER_H

#include <stdbool.h>
#include "util.h"

#define MAX_PATH_LEN		 256
#define MAX_PROBE_BUFFER	1024
#define MAX_PROBES		 128

static inline int is_c_varname(const char *name)
{
	/* TODO */
	return isalpha(name[0]) || name[0] == '_';
}

struct probe_point {
	char			*event;			/* Event name */
	char			*group;			/* Event group */

	/* Inputs */
	char			*file;			/* File name */
	int			line;			/* Line number */
	char			*lazy_line;		/* Lazy line pattern */

	char			*function;		/* Function name */
	int			offset;			/* Offset bytes */

	int			nr_args;		/* Number of arguments */
	char			**args;			/* Arguments */

	int			retprobe;		/* Return probe */

	/* Output */
	int			found;			/* Number of found probe points */
	char			*probes[MAX_PROBES];	/* Output buffers (will be allocated)*/
};

/* 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 */
	int			offset;			/* Start line offset */
	char			*path;			/* Real path name */
	struct list_head	line_list;		/* Visible lines */
};

#ifndef NO_DWARF_SUPPORT
extern int find_probe_point(int fd, struct probe_point *pp);
extern int find_line_range(int fd, struct line_range *lr);

#include <dwarf.h>
#include <libdw.h>

struct probe_finder {
	struct probe_point	*pp;		/* Target probe point */

	/* For function searching */
	Dwarf_Addr		addr;		/* Address */
	const char		*fname;		/* File name */
	int			lno;		/* Line number */
	Dwarf_Die		cu_die;		/* Current CU */

	/* For variable searching */
	Dwarf_Op		*fb_ops;	/* Frame base attribute */
	const char		*var;		/* Current variable name */
	char			*buf;		/* Current output buffer */
	int			len;		/* Length of output buffer */
	struct list_head	lcache;		/* Line cache for lazy match */
};

struct line_finder {
	struct line_range	*lr;		/* Target line range */

	const char		*fname;		/* File name */
	int			lno_s;		/* Start line number */
	int			lno_e;		/* End line number */
	Dwarf_Die		cu_die;		/* Current CU */
	int			found;
};

#endif /* NO_DWARF_SUPPORT */

#endif /*_PROBE_FINDER_H */
