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