xref: /aosp_15_r20/external/musl/include/link.h (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
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