2 * D header file for Solaris.
4 * $(LINK2 http://src.illumos.org/source/xref/illumos-gate/usr/src/head/link.h, illumos link.h)
6 module core.sys.solaris.link;
12 import core.stdc.stdint;
13 import core.sys.solaris.dlfcn;
14 import core.sys.solaris.libelf;
15 import core.sys.solaris.sys.elf;
16 import core.sys.solaris.sys.link;
18 uint ld_version(uint);
19 void ld_input_done(uint*);
21 void ld_start(in char*, in Elf32_Half, in char*);
23 void ld_open(in char**, in char**, int*, int, Elf**, Elf*, size_t, in Elf_Kind);
24 void ld_file(in char*, in Elf_Kind, int, Elf*);
25 void ld_input_section(in char*, Elf32_Shdr**, Elf32_Word, Elf_Data*, Elf*, uint*);
26 void ld_section(in char*, Elf32_Shdr*, Elf32_Word, Elf_Data*, Elf*);
30 void ld_start64(in char*, in Elf64_Half, in char*);
31 void ld_atexit64(int);
32 void ld_open64(in char**, in char**, int*, int, Elf**, Elf*, size_t, in Elf_Kind);
33 void ld_file64(in char*, in Elf_Kind, int, Elf*);
34 void ld_input_section64(in char*, Elf64_Shdr**, Elf64_Word, Elf_Data*, Elf*, uint*);
35 void ld_section64(in char*, Elf64_Shdr*, Elf64_Word, Elf_Data*, Elf*);
38 enum LD_SUP_VNONE = 0;
39 enum LD_SUP_VERSION1 = 1;
40 enum LD_SUP_VERSION2 = 2;
41 enum LD_SUP_VERSION3 = 3;
42 enum LD_SUP_VCURRENT = LD_SUP_VERSION3;
44 enum LD_SUP_DERIVED = 0x1;
45 enum LD_SUP_INHERITED = 0x2;
46 enum LD_SUP_EXTRACTED = 0x4;
48 enum LM_ID_BASE = 0x00;
49 enum LM_ID_LDSO = 0x01;
52 enum LM_ID_BRAND = 0xfd;
53 enum LM_ID_NONE = 0xfe;
54 enum LM_ID_NEWLM = 0xff;
57 enum LAV_VERSION1 = 1;
58 enum LAV_VERSION2 = 2;
59 enum LAV_VERSION3 = 3;
60 enum LAV_VERSION4 = 4;
61 enum LAV_VERSION5 = 5;
62 enum LAV_CURRENT = LAV_VERSION5;
65 enum LA_FLG_BINDTO = 0x0001;
66 enum LA_FLG_BINDFROM = 0x0002;
68 enum LA_SYMB_NOPLTENTER = 0x0001;
69 enum LA_SYMB_NOPLTEXIT = 0x0002;
70 enum LA_SYMB_STRUCTCALL = 0x0004;
71 enum LA_SYMB_DLSYM = 0x0008;
72 enum LA_SYMB_ALTVALUE = 0x0010;
74 enum LA_SER_ORIG = 0x001;
75 enum LA_SER_LIBPATH = 0x002;
76 enum LA_SER_RUNPATH = 0x004;
77 enum LA_SER_CONFIG = 0x008;
78 enum LA_SER_DEFAULT = 0x040;
79 enum LA_SER_SECURE = 0x080;
81 enum LA_SER_MASK = 0xfff;
83 enum LA_ACT_CONSISTENT = 0x00;
84 enum LA_ACT_ADD = 0x01;
85 enum LA_ACT_DELETE = 0x02;
107 alias _la_sparc_regs La_sparcv9_regs;
122 alias _la_sparc_regs La_sparcv8_regs;
130 uint la_version(uint);
131 void la_activity(uintptr_t*, uint);
132 void la_preinit(uintptr_t*);
133 char* la_objsearch(in char*, uintptr_t*, uint);
134 uint la_objopen(Link_map*, Lmid_t, uintptr_t*);
135 uint la_objclose(uintptr_t*);
136 int la_objfilter(uintptr_t*, in char*, uintptr_t*, uint);
140 uintptr_t la_amd64_pltenter(Elf64_Sym*, uint, uintptr_t*, uintptr_t*, La_amd64_regs*, uint*, in char*);
141 uintptr_t la_symbind64(Elf64_Sym*, uint, uintptr_t*, uintptr_t*, uint*, in char*);
142 uintptr_t la_sparcv9_pltenter(Elf64_Sym*, uint, uintptr_t*, uintptr_t*, La_sparcv9_regs*, uint*, in char*);
143 uintptr_t la_pltexit64(Elf64_Sym*, uint, uintptr_t*, uintptr_t*, uintptr_t, in char*);
147 uintptr_t la_symbind32(Elf32_Sym*, uint, uintptr_t*, uintptr_t*, uint*);
148 uintptr_t la_sparcv8_pltenter(Elf32_Sym*, uint, uintptr_t*, uintptr_t*, La_sparcv8_regs*, uint*);
149 uintptr_t la_i86_pltenter(Elf32_Sym*, uint, uintptr_t*, uintptr_t*, La_i86_regs*, uint*);
150 uintptr_t la_pltexit(Elf32_Sym*, uint, uintptr_t*, uintptr_t*, uintptr_t);
153 template ElfW(string type)
156 mixin("alias Elf64_"~type~" ElfW;");
158 mixin("alias Elf32_"~type~" ElfW;");
161 struct dl_phdr_info {
162 ElfW!"Addr" dlpi_addr;
164 ElfW!"Phdr"* dlpi_phdr;
165 ElfW!"Half" dlpi_phnum;
170 private alias extern(C) int function(dl_phdr_info*, size_t, void *) dl_iterate_phdr_cb;
171 private alias extern(C) int function(dl_phdr_info*, size_t, void *) @nogc dl_iterate_phdr_cb_ngc;
172 extern int dl_iterate_phdr(dl_iterate_phdr_cb __callback, void*__data);
173 extern int dl_iterate_phdr(dl_iterate_phdr_cb_ngc __callback, void*__data) @nogc;