Commit | Line | Data |
---|---|---|
fcf53d9b | 1 | /*- |
984263bc MD |
2 | * Copyright (c) 1994 |
3 | * The Regents of the University of California. All rights reserved. | |
4 | * | |
5 | * Redistribution and use in source and binary forms, with or without | |
6 | * modification, are permitted provided that the following conditions | |
7 | * are met: | |
8 | * 1. Redistributions of source code must retain the above copyright | |
9 | * notice, this list of conditions and the following disclaimer. | |
10 | * 2. Redistributions in binary form must reproduce the above copyright | |
11 | * notice, this list of conditions and the following disclaimer in the | |
12 | * documentation and/or other materials provided with the distribution. | |
fcf53d9b | 13 | * 3. Neither the name of the University nor the names of its contributors |
984263bc MD |
14 | * may be used to endorse or promote products derived from this software |
15 | * without specific prior written permission. | |
16 | * | |
17 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |
18 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
19 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
20 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |
21 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
22 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
23 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
24 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
25 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
26 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
27 | * SUCH DAMAGE. | |
28 | * | |
fcf53d9b | 29 | * $FreeBSD: src/include/dlfcn.h,v 1.24 2010/03/24 15:59:51 gahr Exp $ |
984263bc MD |
30 | */ |
31 | ||
32 | #ifndef _DLFCN_H_ | |
33 | #define _DLFCN_H_ | |
34 | ||
35 | #include <sys/cdefs.h> | |
e2565a42 | 36 | #include <machine/stdint.h> /* size_t */ |
984263bc MD |
37 | |
38 | /* | |
39 | * Modes and flags for dlopen(). | |
40 | */ | |
139b8f34 SW |
41 | #define RTLD_LAZY 1 /* Bind function calls lazily. */ |
42 | #define RTLD_NOW 2 /* Bind function calls immediately. */ | |
43 | #define RTLD_MODEMASK 0x3 | |
44 | #define RTLD_GLOBAL 0x100 /* Make symbols globally available. */ | |
45 | #define RTLD_LOCAL 0 /* Opposite of RTLD_GLOBAL, and the default. */ | |
46 | #define RTLD_TRACE 0x200 /* Trace loaded objects and exit. */ | |
fcf53d9b JM |
47 | #define RTLD_NODELETE 0x01000 /* Do not remove members. */ |
48 | #define RTLD_NOLOAD 0x02000 /* Do not load if not already loaded. */ | |
984263bc MD |
49 | |
50 | /* | |
51 | * Request arguments for dlinfo(). | |
52 | */ | |
139b8f34 SW |
53 | #define RTLD_DI_LINKMAP 2 /* Obtain link map. */ |
54 | #define RTLD_DI_SERINFO 4 /* Obtain search path info. */ | |
55 | #define RTLD_DI_SERINFOSIZE 5 /* ... query for required space. */ | |
56 | #define RTLD_DI_ORIGIN 6 /* Obtain object origin */ | |
fcf53d9b | 57 | #define RTLD_DI_MAX RTLD_DI_ORIGIN |
984263bc MD |
58 | |
59 | /* | |
60 | * Special handle arguments for dlsym()/dlinfo(). | |
61 | */ | |
139b8f34 SW |
62 | #define RTLD_NEXT ((void *) -1) /* Search subsequent objects. */ |
63 | #define RTLD_DEFAULT ((void *) -2) /* Use default search algorithm. */ | |
984263bc MD |
64 | #define RTLD_SELF ((void *) -3) /* Search the caller itself. */ |
65 | ||
ed5d5720 | 66 | #if __BSD_VISIBLE |
984263bc MD |
67 | /* |
68 | * Structure filled in by dladdr(). | |
69 | */ | |
70 | typedef struct dl_info { | |
139b8f34 SW |
71 | const char *dli_fname; /* Pathname of shared object. */ |
72 | void *dli_fbase; /* Base address of shared object. */ | |
73 | const char *dli_sname; /* Name of nearest symbol. */ | |
74 | void *dli_saddr; /* Address of nearest symbol. */ | |
984263bc MD |
75 | } Dl_info; |
76 | ||
77 | /* | |
78 | * Avoid sys/types.h namespace pollution. | |
79 | */ | |
984263bc MD |
80 | |
81 | /* | |
82 | * Structures, returned by the RTLD_DI_SERINFO dlinfo() request. | |
83 | */ | |
84 | typedef struct dl_serpath { | |
85 | char * dls_name; /* single search path entry */ | |
86 | unsigned int dls_flags; /* path information */ | |
87 | } Dl_serpath; | |
88 | ||
89 | typedef struct dl_serinfo { | |
e2565a42 | 90 | __size_t dls_size; /* total buffer size */ |
984263bc MD |
91 | unsigned int dls_cnt; /* number of path entries */ |
92 | Dl_serpath dls_serpath[1]; /* there may be more than one */ | |
93 | } Dl_serinfo; | |
94 | ||
ed5d5720 PA |
95 | /* |
96 | * The actual type declared by this typedef is immaterial, provided that | |
97 | * it is a function pointer. Its purpose is to provide a return type for | |
98 | * dlfunc() which can be cast to a function pointer type without depending | |
99 | * on behavior undefined by the C standard, which might trigger a compiler | |
100 | * diagnostic. We intentionally declare a unique type signature to force | |
101 | * a diagnostic should the application not cast the return value of dlfunc() | |
102 | * appropriately. | |
103 | */ | |
104 | struct __dlfunc_arg { | |
105 | int __dlfunc_dummy; | |
106 | }; | |
107 | ||
108 | typedef void (*dlfunc_t)(struct __dlfunc_arg); | |
109 | ||
110 | #endif /* __BSD_VISIBLE */ | |
111 | ||
984263bc | 112 | __BEGIN_DECLS |
139b8f34 | 113 | /* XSI functions first. */ |
5baeefc7 | 114 | int dlclose(void *); |
fcf53d9b | 115 | char *dlerror(void); |
ed5d5720 PA |
116 | void *dlopen(const char *, int); |
117 | void *dlsym(void * __restrict, const char * __restrict); | |
118 | ||
119 | #if __BSD_VISIBLE | |
303c1887 | 120 | void *fdlopen(int, int); |
ed5d5720 PA |
121 | int dladdr(const void * __restrict, Dl_info * __restrict); |
122 | dlfunc_t dlfunc(void * __restrict, const char * __restrict); | |
123 | int dlinfo(void * __restrict, int, void * __restrict); | |
fcf53d9b JM |
124 | void *dlvsym(void * __restrict, const char * __restrict, |
125 | const char * __restrict); | |
ed5d5720 | 126 | #endif /* __BSD_VISIBLE */ |
984263bc MD |
127 | __END_DECLS |
128 | ||
129 | #endif /* !_DLFCN_H_ */ |