xref: /linux/tools/perf/util/symsrc.h (revision 24168c5e6dfbdd5b414f048f47f75d64533296ca)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __PERF_SYMSRC_
3 #define __PERF_SYMSRC_ 1
4 
5 #include <stdbool.h>
6 #include <stddef.h>
7 #include "dso.h"
8 
9 #ifdef HAVE_LIBELF_SUPPORT
10 #include <libelf.h>
11 #include <gelf.h>
12 #endif
13 #include <elf.h>
14 
15 struct symsrc {
16 	char		     *name;
17 	int		     fd;
18 	enum dso_binary_type type;
19 
20 #ifdef HAVE_LIBELF_SUPPORT
21 	Elf		     *elf;
22 	GElf_Ehdr	     ehdr;
23 
24 	Elf_Scn		     *opdsec;
25 	size_t		     opdidx;
26 	GElf_Shdr	     opdshdr;
27 
28 	Elf_Scn		     *symtab;
29 	size_t		     symtab_idx;
30 	GElf_Shdr	     symshdr;
31 
32 	Elf_Scn		     *dynsym;
33 	size_t		     dynsym_idx;
34 	GElf_Shdr	     dynshdr;
35 
36 	bool		     adjust_symbols;
37 	bool		     is_64_bit;
38 #endif
39 };
40 
41 int symsrc__init(struct symsrc *ss, struct dso *dso, const char *name, enum dso_binary_type type);
42 void symsrc__destroy(struct symsrc *ss);
43 
44 bool symsrc__has_symtab(struct symsrc *ss);
45 bool symsrc__possibly_runtime(struct symsrc *ss);
46 
47 #endif /* __PERF_SYMSRC_ */
48