xref: /linux/tools/perf/util/debuginfo.h (revision eeb9f5c2dcec90009d7cf12e780e7f9631993fc5)
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 static inline int debuginfo__get_text_offset(struct debuginfo *dbg __maybe_unused,
44 					     Dwarf_Addr *offs __maybe_unused,
45 					     bool adjust_offset __maybe_unused)
46 {
47 	return -EINVAL;
48 }
49 
50 #endif /* HAVE_DWARF_SUPPORT */
51 
52 #ifdef HAVE_DEBUGINFOD_SUPPORT
53 int get_source_from_debuginfod(const char *raw_path, const char *sbuild_id,
54 			       char **new_path);
55 #else /* HAVE_DEBUGINFOD_SUPPORT */
56 static inline int get_source_from_debuginfod(const char *raw_path __maybe_unused,
57 					     const char *sbuild_id __maybe_unused,
58 					     char **new_path __maybe_unused)
59 {
60 	return -ENOTSUP;
61 }
62 #endif /* HAVE_DEBUGINFOD_SUPPORT */
63 
64 #endif /* _PERF_DEBUGINFO_H */
65