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: head/lib/libc/gen/dlinfo.3 206622 2010-04-14 19:08:06Z uqs $
33 .Nd information about dynamically loaded object
35 This function is not in a library.
36 It is included in every dynamically linked program automatically.
41 .Fn dlinfo "void * handle" "int request" "void * 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 the
58 function call or special handle
62 is the value returned from
64 the information returned by the
66 function pertains to the specified object.
67 If handle is the special handle
69 the information returned pertains to the caller itself.
71 Possible values for the
74 .Bl -tag -width indent
75 .It Dv RTLD_DI_LINKMAP
78 .Pq Vt "struct link_map"
79 structure pointer for the specified
81 On successful return, the
83 argument is filled with the pointer to the
87 describing a shared object specified by the
92 structures are maintained as a doubly linked list by
105 structure is defined in
107 and has the following members:
108 .Bd -literal -offset indent
109 caddr_t l_addr; /* Base Address of library */
110 const char *l_name; /* Absolute Path to Library */
111 const void *l_ld; /* Pointer to .dynamic in memory */
112 struct link_map *l_next, /* linked list of mapped libs */
115 .Bl -tag -width ".Va l_addr"
117 The base address of the object loaded into memory.
119 The full name of the loaded shared object.
121 The address of the dynamic linking information segment
127 structure on the link-map list.
131 structure on the link-map list.
133 .It Dv RTLD_DI_SERINFO
134 Retrieve the library search paths associated with the given
139 argument should point to
142 .Pq Fa "Dl_serinfo *p" .
145 structure must be initialized first with the
146 .Dv RTLD_DI_SERINFOSIZE
157 field points to the search path.
160 field contains one of more flags indicating the origin of the path (see the
167 example 2, for a usage example.
168 .It Dv RTLD_DI_SERINFOSIZE
171 structure for use in a
178 fields are returned to indicate the number of search paths applicable
179 to the handle, and the total size of a
181 buffer required to hold
184 entries and the associated search path strings.
187 example 2, for a usage example.
188 .It Va RTLD_DI_ORIGIN
189 Retrieve the origin of the dynamic object associated with the handle.
190 On successful return,
192 argument is filled with the
200 function returns 0 on success, or \-1 if an error occurred.
201 Whenever an error has been detected, a message detailing it can
202 be retrieved via a call to
211 The following example shows how dynamic library can detect the list
212 of shared libraries loaded after caller's one.
213 For simplicity, error checking has been omitted.
214 .Bd -literal -offset indent
217 dlinfo(RTLD_SELF, RTLD_DI_LINKMAP, &map);
219 while (map != NULL) {
220 printf("%p: %s\\n", map->l_addr, map->l_name);
227 to retrieve the library search paths.
229 The following example shows how a dynamic object can inspect the library
230 search paths that would be used to locate a simple filename with
232 For simplicity, error checking has been omitted.
233 .Bd -literal -offset indent
234 Dl_serinfo _info, *info = &_info;
238 /* determine search path count and required buffer size */
239 dlinfo(RTLD_SELF, RTLD_DI_SERINFOSIZE, (void *)info);
241 /* allocate new buffer and initialize */
242 info = malloc(_info.dls_size);
243 info->dls_size = _info.dls_size;
244 info->dls_cnt = _info.dls_cnt;
246 /* obtain sarch path information */
247 dlinfo(RTLD_SELF, RTLD_DI_SERINFO, (void *)info);
249 path = &info->dls_serpath[0];
251 for (cnt = 1; cnt <= info->dls_cnt; cnt++, path++) {
252 (void) printf("%2d: %s\\n", cnt, path->dls_name);
261 function first appeared in the Solaris operating system.
270 implementation of the
272 function was originally written by
273 .An Alexey Zelkin Aq Mt phantom@FreeBSD.org
274 and later extended and improved by
275 .An Alexander Kabaev Aq Mt kan@FreeBSD.org .
277 The manual page for this function was written by
278 .An Alexey Zelkin Aq Mt phantom@FreeBSD.org .