xref: /linux/tools/perf/util/debuginfo.h (revision c532de5a67a70f8533d495f8f2aaa9a0491c3ad0)
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 #ifndef _PERF_DEBUGINFO_H
3 #define _PERF_DEBUGINFO_H
4 
5 #include <errno.h>
6 #include <linux/compiler.h>
7 
8 #ifdef HAVE_DWARF_SUPPORT
9 
10 #include "dwarf-aux.h"
11 
12 /* debug information structure */
13 struct debuginfo {
14 	Dwarf		*dbg;
15 	Dwfl_Module	*mod;
16 	Dwfl		*dwfl;
17 	Dwarf_Addr	bias;
18 	const unsigned char	*build_id;
19 };
20 
21 /* This also tries to open distro debuginfo */
22 struct debuginfo *debuginfo__new(const char *path);
23 void debuginfo__delete(struct debuginfo *dbg);
24 
25 int debuginfo__get_text_offset(struct debuginfo *dbg, Dwarf_Addr *offs,
26 			       bool adjust_offset);
27 
28 #else /* HAVE_DWARF_SUPPORT */
29 
30 /* dummy debug information structure */
31 struct debuginfo {
32 };
33 
34 static inline struct debuginfo *debuginfo__new(const char *path __maybe_unused)
35 {
36 	return NULL;
37 }
38 
39 static inline void debuginfo__delete(struct debuginfo *dbg __maybe_unused)
40 {
41 }
42 
43 typedef void Dwarf_Addr;
44 
45 static inline int debuginfo__get_text_offset(struct debuginfo *dbg __maybe_unused,
46 					     Dwarf_Addr *offs __maybe_unused,
47 					     bool adjust_offset __maybe_unused)
48 {
49 	return -EINVAL;
50 }
51 
52 #endif /* HAVE_DWARF_SUPPORT */
53 
54 #ifdef HAVE_DEBUGINFOD_SUPPORT
55 int get_source_from_debuginfod(const char *raw_path, const char *sbuild_id,
56 			       char **new_path);
57 #else /* HAVE_DEBUGINFOD_SUPPORT */
58 static inline int get_source_from_debuginfod(const char *raw_path __maybe_unused,
59 					     const char *sbuild_id __maybe_unused,
60 					     char **new_path __maybe_unused)
61 {
62 	return -ENOTSUP;
63 }
64 #endif /* HAVE_DEBUGINFOD_SUPPORT */
65 
66 #endif /* _PERF_DEBUGINFO_H */
67