add dependency of dlstart.lo on crt_arch.h to Makefile
[oweals/musl.git] / include / link.h
1 #ifndef _LINK_H
2 #define _LINK_H
3
4 #ifdef __cplusplus
5 extern "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 /* this is the same everywhere except alpha and s390 */
20 typedef uint32_t Elf_Symndx;
21
22 struct dl_phdr_info {
23         ElfW(Addr) dlpi_addr;
24         const char *dlpi_name;
25         const ElfW(Phdr) *dlpi_phdr;
26         ElfW(Half) dlpi_phnum;
27         unsigned long long int dlpi_adds;
28         unsigned long long int dlpi_subs;
29         size_t dlpi_tls_modid;
30         void *dlpi_tls_data;
31 };
32
33 struct link_map {
34         ElfW(Addr) l_addr;
35         char *l_name;
36         ElfW(Dyn) *l_ld;
37         struct link_map *l_next, *l_prev;
38 };
39
40 struct r_debug {
41         int r_version;
42         struct link_map *r_map;
43         ElfW(Addr) r_brk;
44         enum { RT_CONSISTENT, RT_ADD, RT_DELETE } r_state;
45         ElfW(Addr) r_ldbase;
46 };
47
48 int dl_iterate_phdr(int (*)(struct dl_phdr_info *, size_t, void *), void *);
49
50 #ifdef __cplusplus
51 }
52 #endif
53
54 #endif