DLINFO(3C)              Standard C Library Functions              DLINFO(3C)
NAME
       dlinfo - dynamic load information
SYNOPSIS
       #include <dlfcn.h>
       #include <link.h>
       #include <limits.h>
       #include <sys/mman.h>       
int dlinfo(
void *handle, 
int request, 
void *p);
DESCRIPTION
       The 
dlinfo() function sets or extracts information from the runtime
       linker 
ld.so.1(1). This function is loosely modeled after the       
ioctl(2) function. The 
request argument and a third argument of
       varying type are passed to 
dlinfo(). The action taken by 
dlinfo()       depends on the value of the 
request that is provided.
       The 
handle argument is either the value that is returned from a       
dlopen(3C) or 
dlmopen() call, or the special handle 
RTLD_SELF. A       
handle argument is required for all requests except       
RTLD_DI_CONFIGADDR, 
RTLD_DI_GETSIGNAL, and 
RTLD_DI_SETSIGNAL.  If       
handle is the value that is returned from a 
dlopen() or 
dlmopen()       call, the information returned by the 
dlinfo() call pertains to the
       specified object. If 
handle is the special handle 
RTLD_SELF, the
       information returned by the 
dlinfo() call pertains to the caller.
       The 
request argument can take the following values:       
RTLD_DI_ARGSINFO           Obtain process argument information. The 
p argument is a pointer
           (
Dl_argsinfo_t *p). The following elements from this structure
           are initialized:           
dla_argc                       The number of arguments passed to the process.           
dla_argv                       The argument array passed to the process.           
dla_envp                       The active environment variable array that is
                       available to the process. This element initially
                       points to the environment variable array that is made
                       available to 
exec(2). This element can be updated
                       should an alternative environment be established by
                       the process. See 
putenv(3C).           
dla_auxv                       The auxiliary vector array passed to the process.
           A process can be established from executing the runtime linker
           directly from the command line. See 
ld.so.1(1). The 
Dl_argsinfo_t           information reflects the information that is made available to
           the application regardless of how the runtime linker has been
           invoked.       
RTLD_DI_CONFIGADDR           Obtain the configuration file information. The 
p argument is a           
Dl_info_t pointer (
Dl_info_t *p). The following elements from
           this structure are initialized:           
dli_fname                        The full name of the configuration file.           
dli_fbase                        The base address of the configuration file loaded
                        into memory.       
RTLD_DI_LINKMAP           Obtain the 
Link_map for the 
handle that is specified. The 
p           argument points to a 
Link_map pointer (
Link_map **p). The actual
           storage for the 
Link_map structure is maintained by 
ld.so.1.
           The 
Link_map structure includes the following members:
                 unsigned long l_addr;      /* base address */
                 char          *l_name;     /* object name */
                 Elf32_Dyn     *l_ld;       /* .dynamic section */
                 Link_map      *l_next;     /* next link object */
                 Link_map      *l_prev;     /* previous link object */
                 char          *l_refname;  /* filter reference name */           
l_addr                        The base address of the object loaded into memory.           
l_name                        The full name of the loaded object. This full name
                        is the filename of the object as referenced by                        
ld.so.1.           
l_ld                        Points to the 
SHT_DYNAMIC structure.           
l_next                        The next 
Link_map on the link-map list. Other
                        objects on the same link-map list as the current
                        object can be examined by following the 
l_next and                        
l_prev members.           
l_prev                        The previous 
Link_map on the link-map list.           
l_refname                        If the object that is referenced is a 
filter, this
                        member points to the name of the object being
                        filtered. If the object is not a 
filter, this member
                        is 
0. See the 
Linker and Libraries Guide.       
RTLD_DI_LMID           Obtain the 
ID for the link-map list upon which the 
handle is
           loaded. The 
p argument is a 
Lmid_t pointer (
Lmid_t *p).       
RTLD_DI_MMAPCNT           Determine the number of segment mappings for the 
handle that is
           specified, for use in a 
RTLD_DI_MMAPS request. The 
p argument is
           a 
uint_t pointer (
uint_t *p). On return from a 
RTLD_DI_MMAPCNT           request, the 
uint_t value that is pointed to by 
p contains the
           number of segment mappings that the associated object uses.
           To obtain the complete mapping information for an object, a           
mmapobj_result_t array for 
RTLD_DI_MMAPCNT entries must be
           provided. This array is assigned to the 
dlm_maps member, and the
           number of entries available in the array are assigned to the           
dlm_acnt member.  This initialized structure is then passed to a           
RTLD_DI_MMAPS request. See 
EXAMPLES.       
RTLD_DI_MMAPS           Obtain segment mapping information for the 
handle that is
           specified. The 
p argument is a 
Dl_mapinfo_t pointer (
Dl_mapinfo_t           *p).  This structure can be initialized from the mapping count
           obtained from a previous 
RTLD_DI_MMAPCNT request.
           Segment mapping information is provided in an array of           
mmapobj_result_t structures that originate from the 
mmapobj(2) of
           the associated object.  The 
dlm_acnt member, typically
           initialized from a previous 
RTLD_DI_MMAPCNT request, indicates
           the number of entries in a 
mmapobj_result_t array. This array is
           assigned to the 
dlm_maps member. This initialized structure is
           then passed to a 
RTLD_DI_MMAPS request, where the segment mapping
           information is copied to the 
mmapobj_result_t array. The 
dlm_rcnt           member indicates the number of 
mmapobj_result_t element entries
           that are returned. See 
EXAMPLES.       
RTLD_DI_SERINFO           Obtain the library search paths for the 
handle that is specified.
           The 
p argument is a 
Dl_serinfo_t pointer (
Dl_serinfo_t *p).  A
           user must first initialize the 
Dl_serinfo_t structure with a           
RTLD_DI_SERINFOSIZE request. See 
EXAMPLES.
           The returned 
Dl_serinfo_t structure contains 
dls_cnt Dl_serpath_t           entries. Each entry's 
dlp_name member points to the search path.
           The corresponding 
dlp_info member contains one of more flags
           indicating the origin of the path. See the 
LA_SER_* flags that
           are defined in <
link.h>.       
RTLD_DI_SERINFOSIZE           Initialize a 
Dl_serinfo_t structure for the 
handle that is
           specified, for use in a 
RTLD_DI_SERINFO request. Both the 
dls_cnt           and 
dls_size members are returned. The 
dls_cnt member indicates
           the number of search paths that are applicable to the 
handle. The           
dls_size member indicates the total size of a 
Dl_serinfo_t buffer
           required to hold 
dls_cnt Dl_serpath_t entries and the associated
           search path strings. The 
p argument is a 
Dl_serinfo_t pointer
           (
Dl_serinfo_t *p).
           To obtain the complete path information, a new 
Dl_serinfo_t           buffer of size 
dls_size should be allocated. This new buffer
           should be initialized with the 
dls_cnt and 
dls_size entries. The
           initialized buffer is then passed to a 
RTLD_DI_SERINFO request.
           See 
EXAMPLES.       
RTLD_DI_ORIGIN           Obtain the origin of the dynamic object that is associated with
           the 
handle. The 
p argument is a 
char pointer (
char *p). The           
dirname(3C) of the associated object's 
realpath(3C), which can be
           no larger than {
PATH_MAX}, is copied to the pointer 
p.       
RTLD_DI_GETSIGNAL           Obtain the numeric signal number used by the runtime linker to
           kill the process in the event of a fatal runtime error. The 
p           argument is an 
int pointer (
int *p). The signal number is copied
           to the pointer 
p.
           By default, the signal used by the runtime linker to terminate a
           process is 
SIGKILL. See 
thr_kill(3C). This default can be changed
           by calling 
dlinfo() with 
RTLD_DI_SETSIGNAL or by setting the
           environment variable 
LD_SIGNAL. See 
ld.so.1(1).       
RTLD_DI_SETSIGNAL           Provide a numeric signal number used by the runtime linker to
           kill the process in the event of a fatal runtime error. The 
p           argument is an 
int pointer (
int *p). The value pointed to by 
p is
           established as the terminating signal value.
           The current signal number used by the runtime linker to terminate
           a process can be obtained from 
dlinfo() using 
RTLD_DI_GETSIGNAL.
           Use of the 
RTLD_DI_SETSIGNAL option is equivalent to setting the
           environment variable 
LD_SIGNAL. See 
ld.so.1(1).
RETURN VALUES
       The 
dlinfo() function returns -1 if the 
request is invalid, the
       parameter 
p is 
NULL, or the 
Dl_serinfo_t structure is uninitialized
       for a 
RTLD_DI_SERINFO request. 
dlinfo() also returns -1 if the 
handle       argument does not refer to a valid object opened by 
dlopen(), or is
       not the special handle 
RTLD_SELF. Detailed diagnostic information is
       available with 
dlerror(3C).
EXAMPLES
       Example 1: Use dlinfo() to obtain library search paths.
       The following example demonstrates how a dynamic object can inspect
       the library search paths that would be used to locate a simple
       filename with 
dlopen(). For simplicity, error checking has been
       omitted.
             Dl_serinfo_t   _info, *info = &_info;
             Dl_serpath_t   *path;
             uint_t         cnt;
             /* determine search path count and required buffer size */
             dlinfo(RTLD_SELF, RTLD_DI_SERINFOSIZE, info);
             /* allocate new buffer and initialize */
             info = malloc(_info.dls_size);
             info->dls_size = _info.dls_size;
             info->dls_cnt = _info.dls_cnt;
             /* obtain search path information */
             dlinfo(RTLD_SELF, RTLD_DI_SERINFO, info);
             path = &info->dls_serpath[0];
             for (cnt = 1; cnt <= info->dls_cnt; cnt++, path++) {
                 (void) printf("%2d: %s\n", cnt, path->dls_name);
             }
       Example 2: Use dlinfo() to obtain segment information.
       The following example demonstrates how a dynamic object can inspect
       its segment mapping information. For simplicity, error checking has
       been omitted
             Dl_mapinfo_t   mi;
             uint_t         cnt;
             /* determine the number of segment mappings */
             dlinfo(RTLD_SELF, RTLD_DI_MMAPCNT, &mi.dlm_acnt);
             /* allocate the appropriate mapping array */
             mi.dlm_maps = malloc(mi.dlm_acnt * sizeof (mmapobj_result_t));
             /* obtain the mapping information */
             dlinfo(RTLD_SELF, RTLD_DI_MMAPS, &mi);
             for (cnt = 0; cnt < mi.dlm_rcnt; cnt++) {
                 (void) printf("addr=%x - memory size=%x\n",
                     mi.dlm_maps[cnt].mr_addr, mi.dlm_maps[cnt].mr_msize);
             }
USAGE
       The 
dlinfo() function is one of a family of functions that give the
       user direct access to the dynamic linking facilities. These
       facilities are available to dynamically-linked processes only. See
       the 
Linker and Libraries Guide.
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+-----------------+
       |  ATTRIBUTE TYPE    | ATTRIBUTE VALUE |
       +--------------------+-----------------+
       |Interface Stability | Stable          |
       +--------------------+-----------------+
       |MT-Level            | MT-Safe         |
       +--------------------+-----------------+
SEE ALSO
       ld(1), 
ld.so.1(1), 
exec(2), 
ioctl(2), 
mmapobj(2), 
dirname(3C),       
dlclose(3C), 
dldump(3C), 
dlerror(3C), 
dlopen(3C), 
dlsym(3C),       
putenv(3C), 
realpath(3C), 
thr_kill(3C), 
attributes(7)       Linker and Libraries Guide                              February 17, 2023                   DLINFO(3C)