tizen 2.0
[external/ltrace.git] / elf.h
1 #ifndef LTRACE_ELF_H
2 #define LTRACE_ELF_H
3
4 #include <gelf.h>
5 #include <stdlib.h>
6
7 struct 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
39 extern int library_num;
40 extern char *library[MAX_LIBRARIES];
41
42 extern struct library_symbol *read_elf(Process *);
43
44 extern 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