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 	GElf_Shdr	     symshdr;
30 
31 	Elf_Scn		     *dynsym;
32 	size_t		     dynsym_idx;
33 	GElf_Shdr	     dynshdr;
34 
35 	bool		     adjust_symbols;
36 	bool		     is_64_bit;
37 #endif
38 };
39 
40 int symsrc__init(struct symsrc *ss, struct dso *dso, const char *name, enum dso_binary_type type);
41 void symsrc__destroy(struct symsrc *ss);
42 
43 bool symsrc__has_symtab(struct symsrc *ss);
44 bool symsrc__possibly_runtime(struct symsrc *ss);
45 
46 #endif /* __PERF_SYMSRC_ */
47