1 /**
2 * D header file for DragonFlyBSD.
3 *
4 * $(LINK2 http://svnweb.freebsd.org/base/head/sys/sys/link_elf.h?view=markup, sys/link_elf.h)
5 * Authors: Diederik de Groot(port:DragonFlyBSD)
6 * Copied: From core/sys/freebsd/sys
7 */
8 module core.sys.dragonflybsd.sys.link_elf;
9
10 version (DragonFlyBSD):
11
12 extern (C) nothrow @system:
13
14 import core.stdc.stdint : uint64_t;
15 import core.sys.dragonflybsd.sys.elf;
16
17 version (D_LP64)
18 enum __ELF_NATIVE_CLASS = 64;
19 else
20 enum __ELF_NATIVE_CLASS = 32;
21
ElfW(string type)22 template ElfW(string type)
23 {
24 mixin("alias Elf"~__ELF_NATIVE_CLASS.stringof~"_"~type~" ElfW;");
25 }
26
27 enum LA_SER_ORIG = 0x01;
28 enum LA_SER_LIBPATH = 0x02;
29 enum LA_SER_RUNPATH = 0x04;
30 enum LA_SER_CONFIG = 0x08;
31 enum LA_SER_DEFAULT = 0x40;
32 enum LA_SER_SECURE = 0x80;
33
34 struct link_map
35 {
36 char* l_addr;
37
38 version (MIPS32)
39 char* l_offs;
40 version (MIPS64)
41 char* l_offs;
42
43 char* l_name;
44 void* l_ld;
45 link_map* l_next, l_prev;
46 }
47 alias link_map Link_map;
48
49 enum
50 {
51 RT_CONSISTENT,
52 RT_ADD,
53 RT_DELETE,
54 }
55
56 struct r_debug
57 {
58 int r_version;
59 link_map* r_map;
60 void function(r_debug*, link_map*) r_brk;
61 }
62
63 struct dl_phdr_info
64 {
65 ElfW!"Addr" dlpi_addr;
66 char* dlpi_name;
67 ElfW!"Phdr"* dlpi_phdr;
68 ElfW!"Half" dlpi_phnum;
69 uint64_t dlpi_adds;
70 uint64_t dlpi_subs;
71 size_t dlpi_tls_modid;
72 void* dlpi_tls_data;
73 }
74
75
76 private alias int function(dl_phdr_info*, size_t, void *) dl_iterate_phdr_cb;
77 private alias int function(dl_phdr_info*, size_t, void *) @nogc dl_iterate_phdr_cb_ngc;
78
79 int dl_iterate_phdr(dl_iterate_phdr_cb __callback, void*__data);
80 int dl_iterate_phdr(dl_iterate_phdr_cb_ngc __callback, void*__data) @nogc;
81 int _rtld_addr_phdr(const void*, dl_phdr_info*) @nogc;
82 int _rtld_get_stack_prot() @nogc;
83