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