Linux Audio

Check our new training course

Linux debugging, profiling, tracing and performance analysis training

Mar 24-27, 2025, special US time zones
Register
Loading...
v6.8
  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 */
v3.5.6
 
  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_PROBE_BUFFER	1024
  9#define MAX_PROBES		 128
 
 
 
 
 10
 11static inline int is_c_varname(const char *name)
 12{
 13	/* TODO */
 14	return isalpha(name[0]) || name[0] == '_';
 15}
 16
 17#ifdef DWARF_SUPPORT
 18
 19#include "dwarf-aux.h"
 20
 21/* TODO: export debuginfo data structure even if no dwarf support */
 22
 23/* debug information structure */
 24struct debuginfo {
 25	Dwarf		*dbg;
 26	Dwfl		*dwfl;
 27	Dwarf_Addr	bias;
 28};
 29
 30extern struct debuginfo *debuginfo__new(const char *path);
 31extern struct debuginfo *debuginfo__new_online_kernel(unsigned long addr);
 32extern void debuginfo__delete(struct debuginfo *self);
 33
 34/* Find probe_trace_events specified by perf_probe_event from debuginfo */
 35extern int debuginfo__find_trace_events(struct debuginfo *self,
 36					struct perf_probe_event *pev,
 37					struct probe_trace_event **tevs,
 38					int max_tevs);
 39
 40/* Find a perf_probe_point from debuginfo */
 41extern int debuginfo__find_probe_point(struct debuginfo *self,
 42				       unsigned long addr,
 43				       struct perf_probe_point *ppt);
 44
 45/* Find a line range */
 46extern int debuginfo__find_line_range(struct debuginfo *self,
 47				      struct line_range *lr);
 48
 49/* Find available variables */
 50extern int debuginfo__find_available_vars_at(struct debuginfo *self,
 51					     struct perf_probe_event *pev,
 52					     struct variable_list **vls,
 53					     int max_points, bool externs);
 
 
 
 54
 55struct probe_finder {
 56	struct perf_probe_event	*pev;		/* Target probe event */
 
 57
 58	/* Callback when a probe point is found */
 59	int (*callback)(Dwarf_Die *sc_die, struct probe_finder *pf);
 60
 61	/* For function searching */
 62	int			lno;		/* Line number */
 63	Dwarf_Addr		addr;		/* Address */
 64	const char		*fname;		/* Real file name */
 65	Dwarf_Die		cu_die;		/* Current CU */
 66	Dwarf_Die		sp_die;
 67	struct list_head	lcache;		/* Line cache for lazy match */
 68
 69	/* For variable searching */
 70#if _ELFUTILS_PREREQ(0, 142)
 71	Dwarf_CFI		*cfi;		/* Call Frame Information */
 
 
 
 72#endif
 73	Dwarf_Op		*fb_ops;	/* Frame base attribute */
 
 74	struct perf_probe_arg	*pvar;		/* Current target variable */
 75	struct probe_trace_arg	*tvar;		/* Current result variable */
 
 76};
 77
 78struct trace_event_finder {
 79	struct probe_finder	pf;
 
 80	struct probe_trace_event *tevs;		/* Found trace events */
 81	int			ntevs;		/* Number of trace events */
 82	int			max_tevs;	/* Max number of trace events */
 83};
 84
 85struct available_var_finder {
 86	struct probe_finder	pf;
 
 87	struct variable_list	*vls;		/* Found variable lists */
 88	int			nvls;		/* Number of variable lists */
 89	int			max_vls;	/* Max no. of variable lists */
 90	bool			externs;	/* Find external vars too */
 91	bool			child;		/* Search child scopes */
 92};
 93
 94struct line_finder {
 95	struct line_range	*lr;		/* Target line range */
 96
 97	const char		*fname;		/* File name */
 98	int			lno_s;		/* Start line number */
 99	int			lno_e;		/* End line number */
100	Dwarf_Die		cu_die;		/* Current CU */
101	Dwarf_Die		sp_die;
102	int			found;
103};
104
105#endif /* DWARF_SUPPORT */
106
107#endif /*_PROBE_FINDER_H */