1 .\"
   2 .\" This file and its contents are supplied under the terms of the
   3 .\" Common Development and Distribution License ("CDDL"), version 1.0.
   4 .\" You may only use this file in accordance with the terms of version
   5 .\" 1.0 of the CDDL.
   6 .\"
   7 .\" A full copy of the text of the CDDL should have accompanied this
   8 .\" source.  A copy of the CDDL is also available via the Internet at
   9 .\" http://www.illumos.org/license/CDDL.
  10 .\"
  11 .\"
  12 .\" Copyright 2015 Joyent, Inc.
  13 .\"
  14 .Dd May 11, 2016
  15 .Dt PMAPPING_ITER 3PROC
  16 .Os
  17 .Sh NAME
  18 .Nm Pmapping_iter ,
  19 .Nm Pmapping_iter_resolved ,
  20 .Nm Pobject_iter ,
  21 .Nm Pobject_iter_resolved
  22 .Nd iterate over process mappings and objects
  23 .Sh SYNOPSIS
  24 .Lb libproc
  25 .In libproc.h
  26 .Ft int
  27 .Fo Pmapping_iter
  28 .Fa "struct ps_prochandle *P"
  29 .Fa "proc_map_f *func"
  30 .Fa "void *data"
  31 .Fc
  32 .Ft int
  33 .Fo Pmapping_iter_resolved
  34 .Fa "struct ps_prochandle *P"
  35 .Fa "proc_map_f *func"
  36 .Fa "void *data"
  37 .Fc
  38 .Ft int
  39 .Fo Pobject_iter
  40 .Fa "struct ps_prochandle *P"
  41 .Fa "proc_map_f *func"
  42 .Fa "void *data"
  43 .Fc
  44 .Ft int
  45 .Fo Pobject_iter_resolved
  46 .Fa "struct ps_prochandle *P"
  47 .Fa "proc_map_f *func"
  48 .Fa "void *data"
  49 .Fc
  50 .Sh DESCRIPTION
  51 The
  52 .Fn Pmapping_iter
  53 and
  54 .Fn Pmapping_iter_resolved
  55 functions iterate over the memory mappings in the process represented by
  56 .Fa P.
  57 .Pp
  58 For each memory mapping, the callback function
  59 .Fa func
  60 will be invoked and it will be passed the
  61 .Fa data
  62 argument,
  63 the
  64 .Sy prmap_t
  65 structure defined from
  66 .Xr proc 4 ,
  67 and a name of the mapping.
  68 The way that the name is obtained varies based on whether one calls
  69 .Fn Pmapping_iter
  70 or
  71 .Fn Pmapping_iter_resolved .
  72 In both cases, the dynamic linker is consulted to determine the file
  73 name for the mapping, if it's known.
  74 If the name is unknown, for example an anonymous mapping, then the
  75 .Dv NULL
  76 pointer is passed in for the name.
  77 In the case of the
  78 .Fn Pmapping_iter_resolved
  79 function the system tries to resolve it to a complete file system path.
  80 If that fails, it falls back to the information from the dynamic linker,
  81 before returning
  82 .Dv NULL
  83 in the case of not being able to find any name.
  84 For more information on the
  85 signature of the
  86 .Ft proc_map_f ,
  87 see
  88 .Xr libproc 3LIB .
  89 .Pp
  90 The return value of
  91 .Fa func
  92 controls whether or not iteration continues.
  93 If
  94 .Fa func
  95 returns
  96 .Sy 0
  97 then iteration continues.
  98 If
  99 .Fa func
 100 returns non-zero then iteration will halt and the value will be
 101 returned to the caller.
 102 Because
 103 .Sy -1
 104 indicates internal failure, it is recommended that the callback function not
 105 return
 106 .Sy -1
 107 to indicate an error itself.
 108 This allows the caller to distinguish between failure of the callback function
 109 versus failure of the
 110 .Fn Pmapping_iter
 111 and
 112 .Fn Pmapping_iter_resolved
 113 functions.
 114 .Pp
 115 The
 116 .Fn Pobject_iter
 117 and
 118 .Fn Pobject_iter_resolved
 119 functions are similar to the
 120 .Fn Pmapping_iter
 121 and
 122 .Fn Pmapping_iter_resolved
 123 functions.
 124 Except, rather than iterating over every mapping, they iterate over the objects
 125 that the process has loaded by the dynamic linker.
 126 For example, an anonymous mapping will show up when iterating mappings, but will
 127 not show up when iterating objects.
 128 Further, while most dynamic shared objects have multiple mappings for the text
 129 and data sections, there will only be a single object that is iterated over.
 130 .Pp
 131 The distinction between the
 132 .Fn Pobject_iter
 133 and
 134 .Fn Pobject_iter_resolved
 135 functions is identical to the difference in name resolution between the
 136 .Fn Pmapping_iter
 137 and
 138 .Fn Pmapping_iter_resolved
 139 functions.
 140 .Sh RETURN VALUES
 141 Upon successful completion, the
 142 .Fn Pmapping_iter ,
 143 .Fn Pmapping_iter_resolved
 144 .Fn Pobject_iter ,
 145 and
 146 .Fn Pobject_iter_resolved
 147 functions return
 148 .Sy 0.
 149 Otherwise, if there was an internal error then
 150 .Sy -1
 151 is returned.
 152 Otherwise, if the callback function
 153 .Fa func
 154 returns non-zero, then its return value will be returned instead.
 155 .Sh INTERFACE STABILITY
 156 .Sy Uncommitted
 157 .Sh MT-LEVEL
 158 See
 159 .Sy LOCKING
 160 in
 161 .Xr libproc 3LIB .
 162 .Sh SEE ALSO
 163 .Xr libproc 3LIB ,
 164 .Xr proc 4