17777dab0Sopenharmony_ci#ifndef _LINK_H 27777dab0Sopenharmony_ci#define _LINK_H 37777dab0Sopenharmony_ci 47777dab0Sopenharmony_ci#ifdef __cplusplus 57777dab0Sopenharmony_ciextern "C" { 67777dab0Sopenharmony_ci#endif 77777dab0Sopenharmony_ci 87777dab0Sopenharmony_ci#include <elf.h> 97777dab0Sopenharmony_ci#define __NEED_size_t 107777dab0Sopenharmony_ci#define __NEED_uint32_t 117777dab0Sopenharmony_ci#include <bits/alltypes.h> 127777dab0Sopenharmony_ci 137777dab0Sopenharmony_ci#if UINTPTR_MAX > 0xffffffff 147777dab0Sopenharmony_ci#define ElfW(type) Elf64_ ## type 157777dab0Sopenharmony_ci#else 167777dab0Sopenharmony_ci#define ElfW(type) Elf32_ ## type 177777dab0Sopenharmony_ci#endif 187777dab0Sopenharmony_ci 197777dab0Sopenharmony_ci#include <bits/link.h> 207777dab0Sopenharmony_ci 217777dab0Sopenharmony_cistruct dl_phdr_info { 227777dab0Sopenharmony_ci ElfW(Addr) dlpi_addr; 237777dab0Sopenharmony_ci const char *dlpi_name; 247777dab0Sopenharmony_ci const ElfW(Phdr) *dlpi_phdr; 257777dab0Sopenharmony_ci ElfW(Half) dlpi_phnum; 267777dab0Sopenharmony_ci unsigned long long int dlpi_adds; 277777dab0Sopenharmony_ci unsigned long long int dlpi_subs; 287777dab0Sopenharmony_ci size_t dlpi_tls_modid; 297777dab0Sopenharmony_ci void *dlpi_tls_data; 307777dab0Sopenharmony_ci}; 317777dab0Sopenharmony_ci 327777dab0Sopenharmony_cistruct link_map { 337777dab0Sopenharmony_ci ElfW(Addr) l_addr; 347777dab0Sopenharmony_ci char *l_name; 357777dab0Sopenharmony_ci ElfW(Dyn) *l_ld; 367777dab0Sopenharmony_ci struct link_map *l_next, *l_prev; 377777dab0Sopenharmony_ci}; 387777dab0Sopenharmony_ci 397777dab0Sopenharmony_cistruct r_debug { 407777dab0Sopenharmony_ci int r_version; 417777dab0Sopenharmony_ci struct link_map *r_map; 427777dab0Sopenharmony_ci ElfW(Addr) r_brk; 437777dab0Sopenharmony_ci enum { RT_CONSISTENT, RT_ADD, RT_DELETE } r_state; 447777dab0Sopenharmony_ci ElfW(Addr) r_ldbase; 457777dab0Sopenharmony_ci}; 467777dab0Sopenharmony_ci 477777dab0Sopenharmony_ciint dl_iterate_phdr(int (*)(struct dl_phdr_info *, size_t, void *), void *); 487777dab0Sopenharmony_ci 497777dab0Sopenharmony_ci#ifdef __cplusplus 507777dab0Sopenharmony_ci} 517777dab0Sopenharmony_ci#endif 527777dab0Sopenharmony_ci 537777dab0Sopenharmony_ci#endif 54