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