1/* $OpenBSD: dlfcn.h,v 1.17 2024/09/01 04:27:45 guenther Exp $ */
2/* $NetBSD: dlfcn.h,v 1.2 1995/06/05 19:38:00 pk Exp $ */
3
4/*
5 * Copyright (c) 1995 Paul Kranenburg
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 * must display the following acknowledgement:
18 * This product includes software developed by Paul Kranenburg.
19 * 4. The name of the author may not be used to endorse or promote products
20 * derived from this software without specific prior written permission
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34#ifndef _DLFCN_H_
35#define _DLFCN_H_
36
37#include <sys/cdefs.h>
38
39/* Values for dlopen `mode'. */
40#define RTLD_LAZY 1
41#define RTLD_NOW 2
42#define RTLD_GLOBAL 0x100
43#define RTLD_LOCAL 0x000
44#define RTLD_TRACE 0x200
45#define RTLD_NODELETE 0x400
46#define RTLD_NOLOAD 0x800
47
48/*
49 * Special handle arguments for dlsym().
50 */
51#define RTLD_NEXT ((void *) -1) /* Search subsequent objects. */
52#define RTLD_DEFAULT ((void *) -2) /* Use default search algorithm. */
53#define RTLD_SELF ((void *) -3) /* Search the caller itself. */
54
55#if __BSD_VISIBLE || __POSIX_VISIBLE >= 202405
56/*
57 * Structure filled in by dladdr().
58 */
59typedef struct
60#if __BSD_VISIBLE
61 dl_info
62#endif
63{
64 const char *dli_fname; /* Pathname of shared object. */
65 void *dli_fbase; /* Base address of shared object. */
66 const char *dli_sname; /* Name of nearest symbol. */
67 void *dli_saddr; /* Address of nearest symbol. */
68} Dl_info_t;
69#endif /* __BSD_VISIBLE || __POSIX_VISIBLE >= 202405 */
70
71#if __BSD_VISIBLE
72typedef Dl_info_t Dl_info;
73
74/*
75 * dlctl() commands
76 */
77#define DL_GETERRNO 1
78#define DL_SETSRCHPATH x
79#define DL_GETLIST x
80#define DL_GETREFCNT x
81#define DL_GETLOADADDR x
82#define DL_SETTHREADLCK 2
83#define DL_SETBINDLCK 3
84#define DL_REFERENCE 4
85
86#define DL_LAZY RTLD_LAZY /* Compat */
87
88#endif /* __BSD_VISIBLE */
89
90
91/*
92 * User interface to the run-time linker.
93 */
94__BEGIN_DECLS
95void *dlopen(const char *, int);
96int dlclose(void *);
97void *dlsym(void *__restrict, const char *__restrict);
98char *dlerror(void);
99
100#if __BSD_VISIBLE || __POSIX_VISIBLE >= 202405
101int dladdr(const void *__restrict, Dl_info_t *__restrict);
102#endif
103
104#if __BSD_VISIBLE
105int dlctl(void *, int, void *);
106#endif /* __BSD_VISIBLE */
107
108__END_DECLS
109
110#endif /* _DLFCN_H_ */