summaryrefslogtreecommitdiff
path: root/static/netbsd/man3/dlfcn.3
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man3/dlfcn.3')
-rw-r--r--static/netbsd/man3/dlfcn.3377
1 files changed, 377 insertions, 0 deletions
diff --git a/static/netbsd/man3/dlfcn.3 b/static/netbsd/man3/dlfcn.3
new file mode 100644
index 00000000..65910c07
--- /dev/null
+++ b/static/netbsd/man3/dlfcn.3
@@ -0,0 +1,377 @@
+.\" $NetBSD: dlfcn.3,v 1.42 2024/03/09 18:43:39 gutteridge Exp $
+.\"
+.\" Copyright (c) 1998 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Paul Kranenburg.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd March 7, 2024
+.Dt DLFCN 3
+.Os
+.Sh NAME
+.Nm _dlauxinfo ,
+.Nm dlopen ,
+.Nm dlclose ,
+.Nm dlsym ,
+.Nm dlvsym ,
+.Nm dladdr ,
+.Nm dlctl ,
+.Nm dlerror
+.Nd dynamic link interface
+.Sh LIBRARY
+(These functions are not in a library.
+They are included in every
+dynamically linked program automatically.)
+.Sh SYNOPSIS
+.In dlfcn.h
+.Ft "void *"
+.Fn _dlauxinfo "void"
+.Ft "void *"
+.Fn dlopen "const char *path" "int mode"
+.Ft "int"
+.Fn dlclose "void *handle"
+.Ft "void *"
+.Fn dlsym "void * restrict handle" "const char * restrict symbol"
+.Ft "void *"
+.Fn dlvsym "void * restrict handle" "const char * restrict symbol" "const char *version"
+.Ft "int"
+.Fn dladdr "void * restrict addr" "Dl_info * restrict dli"
+.Ft "int"
+.Fn dlctl "void *handle" "int cmd" "void *data"
+.Ft "char *"
+.Fn dlerror "void"
+.Sh DESCRIPTION
+These functions provide an interface to the run-time linker
+.Xr ld.so 1 .
+They allow new shared objects to be loaded into the process' address space
+under program control.
+.Pp
+The
+.Fn _dlauxinfo
+function returns a pointer to the
+.Xr elf 5
+array of
+.Vt AuxInfo
+structures for the current executable.
+.Pp
+The
+.Fn dlopen
+function takes the name of a shared object as the first argument.
+The
+.Fa path
+argument can be specified as either an absolute pathname to a shared object
+or just the name of the shared object itself.
+When an absolute pathname is specified,
+only the path provided will be searched.
+When just a shared object name is specified, the same search rules apply that
+are used for
+.Dq intrinsic
+shared object searches
+.Po
+see
+.Xr ld.elf_so 1
+.Pc .
+.Pp
+Shared libraries take the following form:
+.Sm off
+.Ic lib\^ Ao Ar name Ac Ic .so Oo Ic \&. Ar xx\^ Oo Ic \&. Ar yy\^ Oc Oc .
+.Sm on
+.Pp
+The shared object is mapped into the address space, relocated, and
+its external references are resolved in the same way as is done
+with the implicitly loaded shared libraries at program startup.
+.Pp
+If the first argument is
+.Dv NULL ,
+.Fn dlopen
+returns a
+.Fa handle
+on the global symbol object.
+This object
+provides access to all symbols from an ordered set of objects consisting
+of the original program image and any dependencies loaded during startup.
+.Pp
+The
+.Fa mode
+parameter specifies symbol resolution time and symbol visibility.
+One of the following values may be used to specify symbol resolution time:
+.Bl -tag -width ".Dv RTLD_NODELETE" -offset indent
+.It Dv RTLD_NOW
+Symbols are resolved immediately.
+.It Dv RTLD_LAZY
+Symbols are resolved when they are first referred to.
+This is the default value if resolution time is unspecified.
+.El
+.Pp
+One of the following values may be used to specify symbol visibility:
+.Bl -tag -width ".Dv RTLD_NODELETE" -offset indent
+.It Dv RTLD_GLOBAL
+The object's symbols and the symbols of its dependencies will be visible to
+other objects.
+.It Dv RTLD_LOCAL
+The object's symbols and the symbols of its dependencies will not be visible to
+other objects.
+This is the default value if visibility is unspecified.
+.El
+.Pp
+To specify both resolution time and visibility, bitwise inclusive
+.Tn OR
+one of each of the above values together.
+If an object was opened with
+.Dv RTLD_LOCAL
+and later opened with
+.Dv RTLD_GLOBAL ,
+then it is promoted to
+.Dv RTLD_GLOBAL .
+.Pp
+Additionally, one of the following flags may be
+.Tn OR Ap ed
+into the
+.Fa mode
+argument:
+.Bl -tag -width ".Dv RTLD_NODELETE" -offset indent
+.It Dv RTLD_NODELETE
+Prevents unload of the loaded object on
+.Fn dlclose .
+The same behaviour may be requested by
+.Fl z Cm nodelete
+option of the static linker
+.Xr ld 1 .
+.It Dv RTLD_NOLOAD
+Only return valid handle for the object if it is already loaded in
+the process address space, otherwise do not load the object and return
+.Dv NULL .
+.El
+.Pp
+.Fn dlopen
+returns a
+.Fa handle
+to be used in calls to
+.Fn dlclose ,
+.Fn dlsym ,
+.Fn dlvsym ,
+and
+.Fn dlctl .
+If the named shared object has already
+been loaded by a previous call to
+.Fn dlopen
+.Pq and not yet unloaded by Fn dlclose ,
+a
+.Fa handle
+referring to the resident copy is returned.
+.Pp
+.Fn dlclose
+unlinks and removes the object referred to by
+.Fa handle
+from the process address space.
+If multiple calls to
+.Fn dlopen
+have been done on this object, or the object was one loaded at startup time,
+or the object is a dependency of another object
+then the object is removed when its reference count drops to zero.
+.Fn dlclose
+returns 0 on success and non-zero on failure.
+.Pp
+.Fn dlsym
+looks for a definition of
+.Fa symbol
+in the shared object designated by
+.Fa handle ,
+and all shared objects that are listed as dependencies.
+The symbol's address is returned.
+If the symbol cannot be resolved,
+.Dv NULL
+is returned.
+.Pp
+.Fn dlsym
+may also be called with special
+.Fa handle
+values.
+.Fn dlsym
+respects symbol visibility as specified by the
+.Fn dlopen
+.Fa mode
+parameter.
+However, the symbols of an object's dependencies are always visible to it.
+All shared objects loaded at program startup are globally visible.
+Only the symbols in the main executable that are referenced by a
+shared object at link time will be visible unless it has been linked
+with the
+.Fl Fl export-dynamic
+option where all of its symbols will be visible.
+The following special
+.Fa handle
+values may be used with
+.Fn dlsym :
+.Bl -tag -width ".Dv RTLD_DEFAULT" -offset indent
+.It Dv NULL
+Interpreted as a reference to the executable or shared object
+from which the call is being made.
+Thus an object can reference its own symbols and the symbols of its
+dependencies without calling
+.Fn dlopen .
+.It Dv RTLD_DEFAULT
+All the visible shared objects and the executable will be searched in the order
+they were loaded.
+.It Dv RTLD_NEXT
+The search for
+.Fa symbol
+is limited to the visible shared objects which were loaded after the one
+issuing the call to
+.Fn dlsym .
+Thus, if
+.Fn dlsym
+is called from the main program, all the visible shared libraries are searched.
+If it is called from a shared library, all subsequently visible shared
+libraries are searched.
+.It Dv RTLD_SELF
+The search for
+.Fa symbol
+is limited to the shared object issuing the call to
+.Fn dlsym
+and those shared objects which were loaded after it that are visible.
+.El
+.Pp
+.Fn dlvsym
+does the same as
+.Fn dlsym
+but takes a
+.Fa version
+string as an additional argument.
+Both the
+.Fa symbol
+and the
+.Fa version
+must match in order for the symbol to be resolved.
+.Pp
+.Fn dladdr
+examines all currently mapped shared objects for a symbol whose address \(em
+as mapped in the process address space \(em is closest to but not exceeding
+the value passed in the first argument
+.Fa addr .
+The symbols of a shared object are only eligible if
+.Fa addr
+is between the base address of the shared object and the value of the
+symbol
+.Va _end
+in the same shared object.
+If no object for which this condition holds true can be found,
+.Fn dladdr
+will return 0.
+Otherwise, a non-zero value is returned and the
+.Fa dli
+argument will be used to provide information on the selected symbol
+and the shared object it is contained in.
+The
+.Fa dli
+argument points at a caller-provided
+.Vt Dl_info
+structure defined as follows:
+.Bd -literal -offset indent
+typedef struct {
+ const char *dli_fname; /* File defining the symbol */
+ void *dli_fbase; /* Base address */
+ const char *dli_sname; /* Symbol name */
+ const void *dli_saddr; /* Symbol address */
+} Dl_info;
+.Ed
+.Pp
+The structure members are further described as follows:
+.Bl -tag -width Fa
+.It Fa dli_fname
+The pathname of the shared object containing the address
+.Fa addr .
+.It Fa dli_fbase
+The base address at which this shared object is loaded in the process
+address space.
+This may be zero if the symbol was found in the internally generated
+.Dq copy
+section
+.Po
+see
+.Xr link 5
+.Pc
+which is not associated with a file.
+.It Fa dli_sname
+points at the nul-terminated name of the selected symbol
+.It Fa dli_saddr
+is the actual address
+.Pq as it appears in the process address space
+of the symbol.
+.El
+.Pp
+.Em Note :
+both strings pointed at by
+.Fa dli_fname
+and
+.Fa dli_sname
+reside in memory private to the run-time linker module and should not
+be modified by the caller.
+.Pp
+In dynamically linked programs, the address of a global function will
+point to its program linkage table entry, rather than to the entry
+point of the function itself.
+This causes most global functions to appear to be defined within the
+main executable, rather than in the shared libraries where the actual
+code resides.
+.Pp
+.Fn dlctl
+provides an interface similar to
+.Xr ioctl 2
+to control several aspects of the run-time linker's operation.
+This interface is
+.Ud
+.Pp
+.Fn dlerror
+returns a character string representing the most recent error that has
+occurred while processing one of the other functions described here.
+If no dynamic linking errors have occurred since the last invocation of
+.Fn dlerror ,
+.Fn dlerror
+returns
+.Dv NULL .
+Thus, invoking
+.Fn dlerror
+a second time, immediately following a prior invocation, will result in
+.Dv NULL
+being returned.
+.Sh ERRORS
+.Bl -diag
+.It Cannot dlopen non-loadable /usr/lib/libpthread.so.1
+A program tries to
+.Fn dlopen
+a module that needs
+.Lb libpthread
+but the program isn't linked against it itself.
+.El
+.Sh SEE ALSO
+.Xr ld 1 ,
+.Xr rtld 1 ,
+.Xr dlinfo 3 ,
+.Xr link 5
+.Sh HISTORY
+Some of the
+.Nm dl*
+functions first appeared in SunOS\~4.