]> git.ipfire.org Git - people/ms/gcc.git/blob - libphobos/libdruntime/core/sys/posix/dlfcn.d
d: Merge upstream dmd, druntime 4ca4140e58, phobos 454dff14d.
[people/ms/gcc.git] / libphobos / libdruntime / core / sys / posix / dlfcn.d
1 /**
2 * D header file for POSIX.
3 *
4 * Copyright: Copyright Sean Kelly 2005 - 2009.
5 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6 * Authors: Sean Kelly, Alex Rønne Petersen
7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
8 */
9
10 /* Copyright Sean Kelly 2005 - 2009.
11 * Distributed under the Boost Software License, Version 1.0.
12 * (See accompanying file LICENSE or copy at
13 * http://www.boost.org/LICENSE_1_0.txt)
14 */
15 module core.sys.posix.dlfcn;
16
17 import core.sys.posix.config;
18
19 version (OSX)
20 version = Darwin;
21 else version (iOS)
22 version = Darwin;
23 else version (TVOS)
24 version = Darwin;
25 else version (WatchOS)
26 version = Darwin;
27
28 version (ARM) version = ARM_Any;
29 version (AArch64) version = ARM_Any;
30 version (HPPA) version = HPPA_Any;
31 version (MIPS32) version = MIPS_Any;
32 version (MIPS64) version = MIPS_Any;
33 version (PPC) version = PPC_Any;
34 version (PPC64) version = PPC_Any;
35 version (RISCV32) version = RISCV_Any;
36 version (RISCV64) version = RISCV_Any;
37 version (S390) version = IBMZ_Any;
38 version (SPARC) version = SPARC_Any;
39 version (SPARC64) version = SPARC_Any;
40 version (SystemZ) version = IBMZ_Any;
41 version (X86) version = X86_Any;
42 version (X86_64) version = X86_Any;
43
44 version (Posix):
45 extern (C):
46 nothrow:
47 @nogc:
48
49 //
50 // XOpen (XSI)
51 //
52 /*
53 RTLD_LAZY
54 RTLD_NOW
55 RTLD_GLOBAL
56 RTLD_LOCAL
57
58 int dlclose(void*);
59 char* dlerror();
60 void* dlopen(const scope char*, int);
61 void* dlsym(void*, const scope char*);
62 */
63
64 version (CRuntime_Glibc)
65 {
66 version (X86_Any)
67 {
68 // http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/dlfcn.h
69 enum RTLD_LAZY = 0x00001;
70 enum RTLD_NOW = 0x00002;
71 enum RTLD_BINDING_MASK = 0x3;
72 enum RTLD_NOLOAD = 0x00004;
73 enum RTLD_DEEPBIND = 0x00008;
74 enum RTLD_GLOBAL = 0x00100;
75 enum RTLD_LOCAL = 0x00000;
76 enum RTLD_NODELETE = 0x01000;
77 }
78 else version (HPPA_Any)
79 {
80 // http://sourceware.org/git/?p=glibc.git;a=blob;f=ports/sysdeps/hppa/bits/dlfcn.h
81 enum RTLD_LAZY = 0x0001;
82 enum RTLD_NOW = 0x0002;
83 enum RTLD_BINDING_MASK = 0x3;
84 enum RTLD_NOLOAD = 0x00004;
85 enum RTLD_DEEPBIND = 0x00008;
86 enum RTLD_GLOBAL = 0x0100;
87 enum RTLD_LOCAL = 0;
88 enum RTLD_NODELETE = 0x01000;
89 }
90 else version (MIPS_Any)
91 {
92 // http://sourceware.org/git/?p=glibc.git;a=blob;f=ports/sysdeps/mips/bits/dlfcn.h
93 enum RTLD_LAZY = 0x0001;
94 enum RTLD_NOW = 0x0002;
95 enum RTLD_BINDING_MASK = 0x3;
96 enum RTLD_NOLOAD = 0x00008;
97 enum RTLD_DEEPBIND = 0x00010;
98 enum RTLD_GLOBAL = 0x0004;
99 enum RTLD_LOCAL = 0;
100 enum RTLD_NODELETE = 0x01000;
101 }
102 else version (PPC_Any)
103 {
104 // http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/dlfcn.h
105 enum RTLD_LAZY = 0x00001;
106 enum RTLD_NOW = 0x00002;
107 enum RTLD_BINDING_MASK = 0x3;
108 enum RTLD_NOLOAD = 0x00004;
109 enum RTLD_DEEPBIND = 0x00008;
110 enum RTLD_GLOBAL = 0x00100;
111 enum RTLD_LOCAL = 0;
112 enum RTLD_NODELETE = 0x01000;
113 }
114 else version (ARM_Any)
115 {
116 // http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/dlfcn.h
117 enum RTLD_LAZY = 0x00001;
118 enum RTLD_NOW = 0x00002;
119 enum RTLD_BINDING_MASK = 0x3;
120 enum RTLD_NOLOAD = 0x00004;
121 enum RTLD_DEEPBIND = 0x00008;
122 enum RTLD_GLOBAL = 0x00100;
123 enum RTLD_LOCAL = 0;
124 enum RTLD_NODELETE = 0x01000;
125 }
126 else version (RISCV_Any)
127 {
128 // http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/dlfcn.h
129 enum RTLD_LAZY = 0x00001;
130 enum RTLD_NOW = 0x00002;
131 enum RTLD_BINDING_MASK = 0x3;
132 enum RTLD_NOLOAD = 0x00004;
133 enum RTLD_DEEPBIND = 0x00008;
134 enum RTLD_GLOBAL = 0x00100;
135 enum RTLD_LOCAL = 0;
136 enum RTLD_NODELETE = 0x01000;
137 }
138 else version (SPARC_Any)
139 {
140 // http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/dlfcn.h
141 enum RTLD_LAZY = 0x00001;
142 enum RTLD_NOW = 0x00002;
143 enum RTLD_BINDING_MASK = 0x3;
144 enum RTLD_NOLOAD = 0x00004;
145 enum RTLD_DEEPBIND = 0x00008;
146 enum RTLD_GLOBAL = 0x00100;
147 enum RTLD_LOCAL = 0;
148 enum RTLD_NODELETE = 0x01000;
149
150 }
151 else version (IBMZ_Any)
152 {
153 // http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/dlfcn.h
154 enum RTLD_LAZY = 0x00001;
155 enum RTLD_NOW = 0x00002;
156 enum RTLD_BINDING_MASK = 0x3;
157 enum RTLD_NOLOAD = 0x00004;
158 enum RTLD_DEEPBIND = 0x00008;
159 enum RTLD_GLOBAL = 0x00100;
160 enum RTLD_LOCAL = 0;
161 enum RTLD_NODELETE = 0x01000;
162 }
163 else
164 static assert(0, "unimplemented");
165
166 int dlclose(void*);
167 char* dlerror();
168 void* dlopen(const scope char*, int);
169 void* dlsym(void*, const scope char*);
170 int dladdr(const scope void*, Dl_info*);
171
172 struct Dl_info
173 {
174 const(char)* dli_fname;
175 void* dli_fbase;
176 const(char)* dli_sname;
177 void* dli_saddr;
178 }
179 }
180 else
181 version (CRuntime_Musl)
182 {
183 enum RTLD_LAZY = 1;
184 enum RTLD_NOW = 2;
185 enum RTLD_NOLOAD = 4;
186 enum RTLD_NODELETE = 4096;
187 enum RTLD_GLOBAL = 256;
188 enum RTLD_LOCAL = 0;
189
190 enum RTLD_NEXT = cast(void *)-1;
191 enum RTLD_DEFAULT = cast(void *)0;
192
193 enum RTLD_DI_LINKMAP = 2;
194
195 int dlclose(void *);
196 char *dlerror();
197 void *dlopen(const(char) *, int);
198
199 pragma(mangle, muslRedirTime64Mangle!("dlsym", "__dlsym_time64"))
200 void *dlsym(void *__restrict, const(char) *__restrict);
201
202 struct Dl_info
203 {
204 const(char)* dli_fname;
205 void* dli_fbase;
206 const(char)* dli_sname;
207 void* dli_saddr;
208 }
209 int dladdr(const(void) *, Dl_info *);
210 int dlinfo(void *, int, void *);
211 }
212 else version (Darwin)
213 {
214 enum RTLD_LAZY = 0x00001;
215 enum RTLD_NOW = 0x00002;
216 enum RTLD_NOLOAD = 0x10;
217 enum RTLD_NODELETE = 0x80;
218 enum RTLD_GLOBAL = 0x00100;
219 enum RTLD_LOCAL = 0x00000;
220 enum RTLD_FIRST = 0x100;
221
222 int dlclose(void*);
223 char* dlerror();
224 void* dlopen(const scope char*, int);
225 void* dlsym(void*, const scope char*);
226 int dladdr(scope const void* addr, Dl_info* info);
227
228 struct Dl_info
229 {
230 const(char)* dli_fname;
231 void* dli_fbase;
232 const(char)* dli_sname;
233 void* dli_saddr;
234 }
235 }
236 else version (FreeBSD)
237 {
238 enum RTLD_LAZY = 1;
239 enum RTLD_NOW = 2;
240 enum RTLD_MODEMASK = 0x3;
241 enum RTLD_GLOBAL = 0x100;
242 enum RTLD_LOCAL = 0;
243 enum RTLD_TRACE = 0x200;
244 enum RTLD_NODELETE = 0x01000;
245 enum RTLD_NOLOAD = 0x02000;
246
247 int dlclose(void*);
248 char* dlerror();
249 void* dlopen(const scope char*, int);
250 void* dlsym(void*, const scope char*);
251 int dladdr(const(void)* addr, Dl_info* info);
252
253 struct Dl_info
254 {
255 const(char)* dli_fname;
256 void* dli_fbase;
257 const(char)* dli_sname;
258 void* dli_saddr;
259 }
260 }
261 else version (NetBSD)
262 {
263 enum RTLD_LAZY = 1;
264 enum RTLD_NOW = 2;
265 enum RTLD_GLOBAL = 0x100;
266 enum RTLD_LOCAL = 0x200;
267 enum RTLD_NODELETE = 0x01000; /* Do not remove members. */
268 enum RTLD_NOLOAD = 0x02000;
269
270 int dlclose(void*);
271 char* dlerror();
272 void* dlopen(const scope char*, int);
273 void* dlsym(void*, const scope char*);
274 int dladdr(const(void)* addr, Dl_info* info);
275
276 struct Dl_info
277 {
278 const(char)* dli_fname;
279 void* dli_fbase;
280 const(char)* dli_sname;
281 void* dli_saddr;
282 }
283 }
284 else version (OpenBSD)
285 {
286 enum RTLD_LAZY = 1;
287 enum RTLD_NOW = 2;
288 enum RTLD_GLOBAL = 0x100;
289 enum RTLD_LOCAL = 0;
290 enum RTLD_TRACE = 0x200;
291 enum RTLD_NODELETE = 0x400;
292
293 int dlclose(void*);
294 char* dlerror();
295 void* dlopen(const scope char*, int);
296 void* dlsym(void*, const scope char*);
297 int dladdr(const(void)* addr, Dl_info* info);
298
299 struct Dl_info
300 {
301 const(char)* dli_fname;
302 void* dli_fbase;
303 const(char)* dli_sname;
304 void* dli_saddr;
305 }
306 }
307 else version (DragonFlyBSD)
308 {
309 enum RTLD_LAZY = 1;
310 enum RTLD_NOW = 2;
311 enum RTLD_MODEMASK = 0x3;
312 enum RTLD_GLOBAL = 0x100;
313 enum RTLD_LOCAL = 0;
314 enum RTLD_TRACE = 0x200;
315 enum RTLD_NODELETE = 0x01000;
316 enum RTLD_NOLOAD = 0x02000;
317
318 int dlclose(void*);
319 char* dlerror();
320 void* dlopen(const scope char*, int);
321 void* dlsym(void*, const scope char*);
322 int dladdr(const(void)* addr, Dl_info* info);
323
324 struct Dl_info
325 {
326 const(char)* dli_fname;
327 void* dli_fbase;
328 const(char)* dli_sname;
329 void* dli_saddr;
330 }
331 }
332 else version (Solaris)
333 {
334 enum RTLD_LAZY = 1;
335 enum RTLD_NOW = 2;
336 enum RTLD_NOLOAD = 0x00004;
337 enum RTLD_DEEPBIND = 0x00008;
338 enum RTLD_GLOBAL = 0x100;
339 enum RTLD_LOCAL = 0;
340 enum RTLD_PARENT = 0x00200;
341 enum RTLD_GROUP = 0x00400;
342 enum RTLD_WORLD = 0x00800;
343 enum RTLD_NODELETE = 0x01000;
344 enum RTLD_FIRST = 0x02000;
345 enum RTLD_CONFGEN = 0x10000;
346
347 int dlclose(void*);
348 char* dlerror();
349 void* dlopen(const scope char*, int);
350 void* dlsym(void*, const scope char*);
351 int dladdr(const(void)* addr, Dl_info* info);
352
353 struct Dl_info
354 {
355 const(char)* dli_fname;
356 void* dli_fbase;
357 const(char)* dli_sname;
358 void* dli_saddr;
359 }
360 }
361 else version (CRuntime_Bionic)
362 {
363 enum
364 {
365 RTLD_NOW = 0,
366 RTLD_LAZY = 1,
367 RTLD_LOCAL = 0,
368 RTLD_GLOBAL = 2
369 }
370
371 int dladdr(const scope void*, Dl_info*);
372 int dlclose(void*);
373 const(char)* dlerror();
374 void* dlopen(const scope char*, int);
375 void* dlsym(void*, const scope char*);
376
377 struct Dl_info
378 {
379 const(char)* dli_fname;
380 void* dli_fbase;
381 const(char)* dli_sname;
382 void* dli_saddr;
383 }
384 }
385 else version (CRuntime_Musl)
386 {
387 enum {
388 RTLD_LAZY = 1,
389 RTLD_NOW = 2,
390 RTLD_NOLOAD = 4,
391 RTLD_NODELETE = 4096,
392 RTLD_GLOBAL = 256,
393 RTLD_LOCAL = 0,
394 }
395 int dlclose(void*);
396 const(char)* dlerror();
397 void* dlopen(const scope char*, int);
398 void* dlsym(void*, const scope char*);
399
400 int dladdr(scope const void *addr, Dl_info *info);
401 struct Dl_info
402 {
403 const(char)* dli_fname;
404 void* dli_fbase;
405 const(char)* dli_sname;
406 void* dli_saddr;
407 }
408 }
409 else version (CRuntime_UClibc)
410 {
411 version (X86_Any)
412 {
413 enum RTLD_LAZY = 0x0001;
414 enum RTLD_NOW = 0x0002;
415 enum RTLD_BINDING_MASK = 0x3;
416 enum RTLD_NOLOAD = 0x00004;
417 enum RTLD_GLOBAL = 0x00100;
418 enum RTLD_LOCAL = 0;
419 enum RTLD_NODELETE = 0x01000;
420 }
421 else version (MIPS_Any)
422 {
423 enum RTLD_LAZY = 0x0001;
424 enum RTLD_NOW = 0x0002;
425 enum RTLD_BINDING_MASK = 0x3;
426 enum RTLD_NOLOAD = 0x00008;
427 enum RTLD_GLOBAL = 0x0004;
428 enum RTLD_LOCAL = 0;
429 enum RTLD_NODELETE = 0x01000;
430 }
431 else version (ARM)
432 {
433 enum RTLD_LAZY = 0x0001;
434 enum RTLD_NOW = 0x0002;
435 enum RTLD_BINDING_MASK = 0x3;
436 enum RTLD_NOLOAD = 0x00004;
437 enum RTLD_GLOBAL = 0x00100;
438 enum RTLD_LOCAL = 0;
439 enum RTLD_NODELETE = 0x01000;
440 }
441 else
442 static assert(0, "unimplemented");
443
444 int dlclose(void*);
445 char* dlerror();
446 void* dlopen(const scope char*, int);
447 void* dlsym(void*, const scope char*);
448 int dladdr(const scope void*, Dl_info*);
449
450 struct Dl_info
451 {
452 const(char)* dli_fname;
453 void* dli_fbase;
454 const(char)* dli_sname;
455 void* dli_saddr;
456 }
457 }