IPnom Home • Manuals • FreeBSD

 FreeBSD Man Pages

Man Sections:Commands (1)System Calls (2)Library Functions (3)Device Drivers (4)File Formats (5)Miscellaneous (7)System Utilities (8)
Keyword Live Search (10 results max):
 Type in part of a command in the search box.
 


dlinfo(3)

NAME

     dlinfo -- information about dynamically loaded object


LIBRARY

     Standard C Library (libc, -lc)


SYNOPSIS

     #include <link.h>
     #include <dlfcn.h>

     int
     dlinfo(void * restrict handle, int request, void * restrict p);


DESCRIPTION

     The dlinfo() function provides information about dynamically loaded
     object.  The action taken by dlinfo() and exact meaning and type of p
     argument depend on value of the request argument provided by caller.

     The handle argument is either the value returned from the dlopen(3) func-
     tion call or special handle RTLD_SELF.  If handle is the value returned
     from dlopen(3), the information returned by the dlinfo() function per-
     tains to the specified object.  If handle is the special handle
     RTLD_SELF, the information returned pertains to the caller itself.

     Possible values for the request argument are:

     RTLD_DI_LINKMAP
	     Retrieve the Link_map (struct link_map) structure pointer for the
	     specified handle.	On successful return, the p argument is filled
	     with the pointer to the Link_map structure (Link_map **p)
	     describing a shared object specified by the handle argument.  The
	     Link_map structures are maintained as a doubly linked list by
	     ld.so(1), in the same order as dlopen(3) and dlclose(3) are
	     called.  See EXAMPLES, example 1.

	     The Link_map structure is defined in <link.h> and has the follow-
	     ing members:

		   caddr_t	   l_addr;    /* Base Address of library */
		   const char	   *l_name;   /* Absolute Path to Library */
		   const void	   *l_ld;     /* Pointer to .dynamic in memory */
		   struct link_map *l_next,   /* linked list of mapped libs */
				   *l_prev;

	     l_addr  The base address of the object loaded into memory.

	     l_name  The full name of the loaded shared object.

	     l_ld    The address of the dynamic linking information segment
		     (PT_DYNAMIC) loaded into memory.

	     l_next  The next Link_map structure on the link-map list.

	     l_prev  The previous Link_map structure on the link-map list.

     RTLD_DI_SERINFO
	     Retrieve the library search paths associated with the given
	     the <link.h> header file).  See EXAMPLES, example 2, for a usage
	     example.

     RTLD_DI_SERINFOSIZE
	     Initialize a Dl_serinfo structure for use in a RTLD_DI_SERINFO
	     request.  Both the dls_cnt and dls_size fields are returned to
	     indicate the number of search paths applicable to the handle, and
	     the total size of a Dl_serinfo buffer required to hold dls_cnt
	     Dl_serpath entries and the associated search path strings.  See
	     EXAMPLES, example 2, for a usage example.

     RTLD_DI_ORIGIN
	     Retrieve the origin of the dynamic object associated with the
	     handle.  On successful return, p argument is filled with the char
	     pointer (char *p).


EXAMPLES

     Example 1: Using dlinfo() to retrieve Link_map structure.

     The following example shows how dynamic library can detect the list of
     shared libraries loaded after caller's one.  For simplicity, error check-
     ing has been omitted.

	   Link_map *map;

	   dlinfo(RTLD_SELF, RTLD_DI_LINKMAP, &map);

	   while (map != NULL) {
		   printf("%p: %s\n", map->l_addr, map->l_name);
		   map = map->l_next;
	   }

     Example 2: Using dlinfo() to retrieve the library search paths.

     The following example shows how a dynamic object can inspect the library
     search paths that would be used to locate a simple filename with
     dlopen(3).  For simplicity, error checking has been omitted.

	   Dl_serinfo	    _info, *info = &_info;
	   Dl_serpath	   *path;
	   unsigned int     cnt;

	   /* determine search path count and required buffer size */
	   dlinfo(RTLD_SELF, RTLD_DI_SERINFOSIZE, (void *)info);

	   /* allocate new buffer and initialize */
	   info = malloc(_info.dls_size);
	   info->dls_size = _info.dls_size;
	   info->dls_cnt = _info.dls_cnt;

	   /* obtain sarch path information */
	   dlinfo(RTLD_SELF, RTLD_DI_SERINFO, (void *)info);

	   path = &info->dls_serpath[0];

	   for (cnt = 1; cnt <= info->dls_cnt; cnt++, path++) {
		   (void) printf("%2d: %s\n", cnt, path->dls_name);
	   }


HISTORY

     The dlinfo() function first appeared in the Solaris operating system.  In
     FreeBSD, it first appeared in FreeBSD 4.8.


AUTHORS

     The FreeBSD implementation of the dlinfo() function was originally writ-
     ten by Alexey Zelkin <phantom@FreeBSD.org> and later extended and
     improved by Alexander Kabaev <kan@FreeBSD.org>.

     The manual page for this function was written by Alexey Zelkin
     <phantom@FreeBSD.org>.

FreeBSD 5.4		       February 14, 2003		   FreeBSD 5.4

SPONSORED LINKS




Man(1) output converted with man2html , sed , awk