2 .\" Copyright (c) 2003 Alexey Zelkin <phantom@FreeBSD.org>
3 .\" All rights reserved.
5 .\" Redistribution and use in source and binary forms, with or without
6 .\" modification, are permitted provided that the following conditions
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.
14 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 .\" $FreeBSD: src/lib/libc/gen/dlinfo.3,v 1.3.2.1 2003/02/20 20:42:45 kan Exp $
27 .\" $DragonFly: src/lib/libc/gen/dlinfo.3,v 1.11 2007/05/17 08:19:00 swildner Exp $
34 .Nd information about dynamically loaded object
41 .Fn dlinfo "void * __restrict handle" "int request" "void * __restrict p"
45 function provides information about dynamically loaded object.
48 and exact meaning and type of
50 argument depend on value of the
52 argument provided by caller.
56 argument is either the value returned from a
58 function call or special handle
60 If handle is the value returned from
62 call, the information returned by the
64 function is pertains the specified object.
65 If handle is the special handle
67 the information returned pertains to the caller itself.
69 The following are possible values for
71 argument to be passed into
74 .It Dv RTLD_DI_LINKMAP
75 Retrieve the Link_map (or
80 On successful return the
82 argument is filled with pointer to Link_map structure
84 describing shared object specified by
88 structures are maintained as double-linked list by
101 structure is defined in
103 and has the following members:
106 caddr_t l_addr; /* Base Address of library */
107 const char *l_name; /* Absolute Path to Library */
108 const void *l_ld; /* Pointer to .dynamic in memory */
109 struct link_map *l_next, /* linked list of of mapped libs */
114 The base address of the object loaded into memory.
116 The full name of loaded shared object.
118 The address of dynamic linking information segment
122 The next Link_map structure on the link-map list.
124 The previous Link_map structure on the link-map list.
126 .It Dv RTLD_DI_SERINFO
127 Retrieve the library search paths associated with given
132 argument should point to
135 .Fa ( Dl_serinfo *p ) .
137 structure must be initialized first with a
138 .Dv RTLD_DI_SERINFOSIZE
149 field points to the search path.
152 field contains one of more flags indicating the origin of the path (see the
159 (Example 2) for usage example.
160 .It Dv RTLD_DI_SERINFOSIZE
163 structure for use in a
170 fields are returned to indicate the number of search paths applicable
171 to the handle, and the total size of a
173 buffer required to hold
176 entries and the associated search path strings.
179 (Example 2) for usage example.
180 .It Dv RTLD_DI_ORIGIN
181 Retrieve the origin of the dynamic object associated with the handle.
184 argument is filled with
191 returns 0 on success, or -1 if error occurred.
192 Whenever an error has been detected, a message detailing it can
193 be retrieved via a call to
198 to retrieve Link_map structure.
200 The following example shows how dynamic library can detect the list
201 of shared libraries loaded after caller's one.
202 For simplicity, error checking has been omitted.
206 dlinfo(RTLD_SELF, RTLD_DI_LINKMAP, &map);
208 while (map != NULL) {
209 printf("%p: %s\en", map->l_addr, map->l_name);
216 to retrieve the library search paths.
218 The following example shows how a dynamic object can inspect the library
219 search paths that would be used to locate a simple filename with
221 For simplicity, error checking has been omitted.
223 Dl_serinfo _info, *info = &_info;
227 /* determine search path count and required buffer size */
228 dlinfo(RTLD_SELF, RTLD_DI_SERINFOSIZE, (void *)info);
230 /* allocate new buffer and initialize */
231 info = malloc(_info.dls_size);
232 info->dls_size = _info.dls_size;
233 info->dls_cnt = _info.dls_cnt;
235 /* obtain sarch path information */
236 dlinfo(RTLD_SELF, RTLD_DI_SERINFO, (void *)info);
238 path = &info->dls_serpath[0];
240 for (cnt = 1; cnt <= info->dls_cnt; cnt++, path++) {
241 (void) printf("%2d: %s\en", cnt, path->dls_name);
252 function first appeared in the Solaris operating system.
263 function was originally written by
265 .Aq phantom@FreeBSD.org
266 and later extended and improved by
268 .Aq kan@FreeBSD.org .
270 The manual page for this function was written by
272 .Aq phantom@FreeBSD.org .