ltrace-elf.h revision 747c73d5b7d66d312a1b1a293e67f9ddf2f17d93
1#ifndef LTRACE_ELF_H
2#define LTRACE_ELF_H
3
4#include <gelf.h>
5#include <stdlib.h>
6
7struct ltelf {
8	int fd;
9	Elf *elf;
10	GElf_Ehdr ehdr;
11	Elf_Data *dynsym;
12	size_t dynsym_count;
13	const char *dynstr;
14	GElf_Addr plt_addr;
15	size_t plt_size;
16	Elf_Data *relplt;
17	size_t relplt_count;
18	Elf_Data *symtab;
19	const char *strtab;
20	size_t symtab_count;
21	Elf_Data *opd;
22	GElf_Addr *opd_addr;
23	size_t opd_size;
24	Elf32_Word *hash;
25	int hash_type;
26	int lte_flags;
27#ifdef __mips__
28	size_t pltgot_addr;
29	size_t mips_local_gotno;
30	size_t mips_gotsym;
31#endif // __mips__
32};
33
34#define LTE_HASH_MALLOCED 1
35#define LTE_PLT_EXECUTABLE 2
36
37#define PLTS_ARE_EXECUTABLE(lte) ((lte->lte_flags & LTE_PLT_EXECUTABLE) != 0)
38
39extern int library_num;
40extern char *library[MAX_LIBRARIES];
41
42extern struct library_symbol *read_elf(Process *);
43
44extern GElf_Addr arch_plt_sym_val(struct ltelf *, size_t, GElf_Rela *);
45
46#ifndef SHT_GNU_HASH
47#define SHT_GNU_HASH	0x6ffffff6	/* GNU-style hash table. */
48#endif
49#endif
50