#ifndef _LINK_H #define _LINK_H #ifdef __cplusplus extern "C" { #endif #include #define __NEED_size_t #define __NEED_uint32_t #include #if UINTPTR_MAX > 0xffffffff #define ElfW(type) Elf64_ ## type #else #define ElfW(type) Elf32_ ## type #endif /* this is the same everywhere except alpha and s390 */ typedef uint32_t Elf_Symndx; struct dl_phdr_info { ElfW(Addr) dlpi_addr; const char *dlpi_name; const ElfW(Phdr) *dlpi_phdr; ElfW(Half) dlpi_phnum; unsigned long long int dlpi_adds; unsigned long long int dlpi_subs; size_t dlpi_tls_modid; void *dlpi_tls_data; }; struct link_map { ElfW(Addr) l_addr; char *l_name; ElfW(Dyn) *l_ld; struct link_map *l_next, *l_prev; }; struct r_debug { int r_version; struct link_map *r_map; ElfW(Addr) r_brk; enum { RT_CONSISTENT, RT_ADD, RT_DELETE } r_state; ElfW(Addr) r_ldbase; }; int dl_iterate_phdr(int (*)(struct dl_phdr_info *, size_t, void *), void *); #ifdef __cplusplus } #endif #endif