ltrace-elf.h revision fe1c171b8988a4e9a882b11291faf9d3fa09e944
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 GElf_Addr plt_stub_vma; 33}; 34 35#define LTE_HASH_MALLOCED 1 36#define LTE_PLT_EXECUTABLE 2 37 38#define PLTS_ARE_EXECUTABLE(lte) ((lte->lte_flags & LTE_PLT_EXECUTABLE) != 0) 39 40extern int library_num; 41extern char *library[MAX_LIBRARIES]; 42 43extern struct library_symbol *read_elf(Process *); 44 45extern GElf_Addr arch_plt_sym_val(struct ltelf *, size_t, GElf_Rela *); 46 47#ifndef SHT_GNU_HASH 48#define SHT_GNU_HASH 0x6ffffff6 /* GNU-style hash table. */ 49#endif 50#endif 51