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