1#pragma once 2 3#ifdef __cplusplus 4extern "C" { 5#endif 6 7#include <elf.h> 8#define __NEED_size_t 9#define __NEED_uint32_t 10#include <bits/alltypes.h> 11 12#define ElfW(type) Elf64_##type 13 14/* this is the same everywhere except alpha and s390 */ 15typedef uint32_t Elf_Symndx; 16 17struct dl_phdr_info { 18 ElfW(Addr) dlpi_addr; 19 const char* dlpi_name; 20 const ElfW(Phdr) * dlpi_phdr; 21 ElfW(Half) dlpi_phnum; 22 unsigned long long int dlpi_adds; 23 unsigned long long int dlpi_subs; 24 size_t dlpi_tls_modid; 25 void* dlpi_tls_data; 26}; 27 28struct link_map { 29 ElfW(Addr) l_addr; 30 char* l_name; 31 ElfW(Dyn) * l_ld; 32 struct link_map *l_next, *l_prev; 33}; 34 35struct r_debug { 36 int r_version; 37 struct link_map* r_map; 38 ElfW(Addr) r_brk; 39 enum { RT_CONSISTENT, 40 RT_ADD, 41 RT_DELETE } r_state; 42 ElfW(Addr) r_ldbase; 43}; 44 45int dl_iterate_phdr(int (*)(struct dl_phdr_info*, size_t, void*), void*); 46 47#ifdef __cplusplus 48} 49#endif 50