Linux Audio

Check our new training course

Yocto distribution development and maintenance

Need a Yocto distribution for your embedded project?
Loading...
v3.1
 
  1#ifndef _PROBE_FINDER_H
  2#define _PROBE_FINDER_H
  3
  4#include <stdbool.h>
  5#include "util.h"
 
  6#include "probe-event.h"
 
  7
  8#define MAX_PATH_LEN		 256
  9#define MAX_PROBE_BUFFER	1024
 10#define MAX_PROBES		 128
 
 
 
 
 11
 12static inline int is_c_varname(const char *name)
 13{
 14	/* TODO */
 15	return isalpha(name[0]) || name[0] == '_';
 16}
 17
 18#ifdef DWARF_SUPPORT
 19
 20#include "dwarf-aux.h"
 21
 22/* TODO: export debuginfo data structure even if no dwarf support */
 23
 24/* debug information structure */
 25struct debuginfo {
 26	Dwarf		*dbg;
 27	Dwfl		*dwfl;
 28	Dwarf_Addr	bias;
 29};
 30
 31extern struct debuginfo *debuginfo__new(const char *path);
 32extern struct debuginfo *debuginfo__new_online_kernel(unsigned long addr);
 33extern void debuginfo__delete(struct debuginfo *self);
 34
 35/* Find probe_trace_events specified by perf_probe_event from debuginfo */
 36extern int debuginfo__find_trace_events(struct debuginfo *self,
 37					struct perf_probe_event *pev,
 38					struct probe_trace_event **tevs,
 39					int max_tevs);
 40
 41/* Find a perf_probe_point from debuginfo */
 42extern int debuginfo__find_probe_point(struct debuginfo *self,
 43				       unsigned long addr,
 44				       struct perf_probe_point *ppt);
 45
 46/* Find a line range */
 47extern int debuginfo__find_line_range(struct debuginfo *self,
 48				      struct line_range *lr);
 49
 50/* Find available variables */
 51extern 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);
 
 
 
 55
 56struct probe_finder {
 57	struct perf_probe_event	*pev;		/* Target probe event */
 
 58
 59	/* Callback when a probe point is found */
 60	int (*callback)(Dwarf_Die *sc_die, struct probe_finder *pf);
 61
 62	/* For function searching */
 63	int			lno;		/* Line number */
 64	Dwarf_Addr		addr;		/* Address */
 65	const char		*fname;		/* Real file name */
 66	Dwarf_Die		cu_die;		/* Current CU */
 67	Dwarf_Die		sp_die;
 68	struct list_head	lcache;		/* Line cache for lazy match */
 69
 70	/* For variable searching */
 71#if _ELFUTILS_PREREQ(0, 142)
 72	Dwarf_CFI		*cfi;		/* Call Frame Information */
 
 
 
 73#endif
 74	Dwarf_Op		*fb_ops;	/* Frame base attribute */
 
 75	struct perf_probe_arg	*pvar;		/* Current target variable */
 76	struct probe_trace_arg	*tvar;		/* Current result variable */
 
 77};
 78
 79struct 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
 86struct 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 */
 91	bool			externs;	/* Find external vars too */
 92	bool			child;		/* Search child scopes */
 93};
 94
 95struct line_finder {
 96	struct line_range	*lr;		/* Target line range */
 97
 98	const char		*fname;		/* File name */
 99	int			lno_s;		/* Start line number */
100	int			lno_e;		/* End line number */
101	Dwarf_Die		cu_die;		/* Current CU */
102	Dwarf_Die		sp_die;
103	int			found;
104};
105
106#endif /* DWARF_SUPPORT */
107
108#endif /*_PROBE_FINDER_H */
v6.9.4
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#ifndef _PROBE_FINDER_H
  3#define _PROBE_FINDER_H
  4
  5#include <stdbool.h>
  6#include "intlist.h"
  7#include "build-id.h"
  8#include "probe-event.h"
  9#include <linux/ctype.h>
 10
 
 11#define MAX_PROBE_BUFFER	1024
 12#define MAX_PROBES		 128
 13#define MAX_PROBE_ARGS		 128
 14
 15#define PROBE_ARG_VARS		"$vars"
 16#define PROBE_ARG_PARAMS	"$params"
 17
 18static inline int is_c_varname(const char *name)
 19{
 20	/* TODO */
 21	return isalpha(name[0]) || name[0] == '_';
 22}
 23
 24#ifdef HAVE_DWARF_SUPPORT
 25
 26#include "dwarf-aux.h"
 27#include "debuginfo.h"
 
 
 
 
 
 
 
 
 
 
 
 
 28
 29/* Find probe_trace_events specified by perf_probe_event from debuginfo */
 30int debuginfo__find_trace_events(struct debuginfo *dbg,
 31				 struct perf_probe_event *pev,
 32				 struct probe_trace_event **tevs);
 
 33
 34/* Find a perf_probe_point from debuginfo */
 35int debuginfo__find_probe_point(struct debuginfo *dbg, u64 addr,
 36				struct perf_probe_point *ppt);
 
 37
 38/* Find a line range */
 39int debuginfo__find_line_range(struct debuginfo *dbg, struct line_range *lr);
 
 40
 41/* Find available variables */
 42int debuginfo__find_available_vars_at(struct debuginfo *dbg,
 43				      struct perf_probe_event *pev,
 44				      struct variable_list **vls);
 45
 46/* Find a src file from a DWARF tag path */
 47int find_source_path(const char *raw_path, const char *sbuild_id,
 48		     const char *comp_dir, char **new_path);
 49
 50struct probe_finder {
 51	struct perf_probe_event	*pev;		/* Target probe event */
 52	struct debuginfo	*dbg;
 53
 54	/* Callback when a probe point is found */
 55	int (*callback)(Dwarf_Die *sc_die, struct probe_finder *pf);
 56
 57	/* For function searching */
 58	int			lno;		/* Line number */
 59	Dwarf_Addr		addr;		/* Address */
 60	const char		*fname;		/* Real file name */
 61	Dwarf_Die		cu_die;		/* Current CU */
 62	Dwarf_Die		sp_die;
 63	struct intlist		*lcache;	/* Line cache for lazy match */
 64
 65	/* For variable searching */
 66#if _ELFUTILS_PREREQ(0, 142)
 67	/* Call Frame Information from .eh_frame */
 68	Dwarf_CFI		*cfi_eh;
 69	/* Call Frame Information from .debug_frame */
 70	Dwarf_CFI		*cfi_dbg;
 71#endif
 72	Dwarf_Op		*fb_ops;	/* Frame base attribute */
 73	unsigned int		machine;	/* Target machine arch */
 74	struct perf_probe_arg	*pvar;		/* Current target variable */
 75	struct probe_trace_arg	*tvar;		/* Current result variable */
 76	bool			skip_empty_arg;	/* Skip non-exist args */
 77};
 78
 79struct trace_event_finder {
 80	struct probe_finder	pf;
 81	Dwfl_Module		*mod;		/* For solving symbols */
 82	struct probe_trace_event *tevs;		/* Found trace events */
 83	int			ntevs;		/* Number of trace events */
 84	int			max_tevs;	/* Max number of trace events */
 85};
 86
 87struct available_var_finder {
 88	struct probe_finder	pf;
 89	Dwfl_Module		*mod;		/* For solving symbols */
 90	struct variable_list	*vls;		/* Found variable lists */
 91	int			nvls;		/* Number of variable lists */
 92	int			max_vls;	/* Max no. of variable lists */
 
 93	bool			child;		/* Search child scopes */
 94};
 95
 96struct line_finder {
 97	struct line_range	*lr;		/* Target line range */
 98
 99	const char		*fname;		/* File name */
100	int			lno_s;		/* Start line number */
101	int			lno_e;		/* End line number */
102	Dwarf_Die		cu_die;		/* Current CU */
103	Dwarf_Die		sp_die;
104	int			found;
105};
106
107#endif /* HAVE_DWARF_SUPPORT */
108
109#endif /*_PROBE_FINDER_H */