1 LIBPROC(3LIB)                 Interface Libraries                LIBPROC(3LIB)
   2 
   3 NAME
   4      libproc - process control library
   5 
   6 SYNOPSIS
   7      Process Control Library (libproc, -lproc)
   8      #include <libproc.h>
   9 
  10 DESCRIPTION
  11      The libproc library provides consumers a general series of interfaces to
  12      inspect and control both live processes and core files.  It is intended
  13      for introspection tools such as debuggers by providing a high-level
  14      interface to the /proc file system (proc(4)).
  15 
  16      The libproc library provides interfaces that focus on:
  17 
  18            o   Creating and attaching to live process, core files, and
  19                arbitrary ELF objects.
  20 
  21            o   Interrogating the state of a process or core file.
  22 
  23            o   Manipulating the current state of a process or thread.
  24 
  25            o   Interrogating the state of threads of a process or core file.
  26 
  27            o   Running system calls in the context of another process.
  28 
  29            o   Various utilities for iterating process and core file file
  30                descriptors, mappings, symbols, and more.
  31 
  32            o   Various utilities to support debugging tools.
  33 
  34    Live Processes
  35      The libproc library can be used to manipulate running processes and to
  36      create new ones.  To manipulate an existing process first grab it with
  37      the Pgrab() function.  A process is generally stopped as a side effect of
  38      grabbing it.  Callers must exercise caution, as if they do not use the
  39      library correctly, or they terminate unexpectedly, a process may remain
  40      stopped.
  41 
  42      Unprivileged users may only grab their own processes.  Users with the
  43      privilege {PRIV_PROC_OWNER} may manipulate processes that they do not
  44      own; however, additional restrictions as described in privileges(5)
  45      apply.
  46 
  47      In addition, the Pcreate() and Pxcreate() functions may be used to create
  48      processes which are always controlled by the library.
  49 
  50    Core Files
  51      The libproc library has the ability to open and interpret core files
  52      produced by processes on the system.  Process core dump generation is
  53      controlled by the coreadm(1M) command.  In addition, the library has the
  54      ability to understand and interpret core dumps generated by Linux kernel
  55      and can provide a subset of its functionality on such core files,
  56      provided the original binary is also present.
  57 
  58      Not all functions in the libproc library are valid for core files.  In
  59      general, none of the commands which manipulate the current state of a
  60      process or thread or that try to force system calls on a victim process
  61      will work.  Furthermore several of the information and iteration
  62      interfaces are limited based on the data that is available in the core
  63      file.  For example, if the core file is of a process that omits the frame
  64      pointer, the ability to iterate the stack will be limited.
  65 
  66      Use the Pgrab_core() or Pfgrab_core() function to open a core file.  Use
  67      the Pgrab_file() function to open an ELF object file.  This is useful for
  68      obtaining information stored in ELF headers and sections.
  69 
  70    Debug Information
  71      Many of the operations in the library rely on debug information being
  72      present in a process and its associated libraries.  The library leverages
  73      symbol table information, CTF data (ctf(4)) sections, and frame unwinding
  74      information based on the use of an ABI defined frame pointer, e.g.  %ebp
  75      and %rbp on x86 systems.
  76 
  77      Some software providers strip programs of this information or build their
  78      executables such that the information will not be present in a core dump.
  79      To deal with this fact, the library is able to consume information that
  80      is not present in the core file or the running process.  It can both
  81      consume it from the underlying executable and it also supports finding it
  82      from related ELF objects that are linked to it via the .gnu_debuglink and
  83      the .note.gnu.build-id ELF sections.
  84 
  85    Iteration Interfaces
  86      The libproc library provides the ability to iterate over the following
  87      aspects of a process or core file:
  88 
  89            o   Active threads
  90 
  91            o   Active and zombie threads
  92 
  93            o   All non-system processes
  94 
  95            o   All process mappings
  96 
  97            o   All objects in a process
  98 
  99            o   The environment
 100 
 101            o   The symbol table
 102 
 103            o   Stack frames
 104 
 105            o   File Descriptors
 106 
 107    System Call Injection
 108      The libproc library allows the caller to force system calls to be
 109      executed in the context of the running process.  This can be used both as
 110      a tool for introspection, allowing one to get information outside its
 111      current context as well as performing modifications to a process.
 112 
 113      These functions run in the context of the calling process.  This is often
 114      an easier way of getting non-exported information about a process from
 115      the system.  For example, the pfiles(1) command uses this interface to
 116      get more detailed information about a process's open file descriptors,
 117      which it would not have access to otherwise.
 118 
 119 INTERFACES
 120      The shared object libproc.so.1 provides the public interfaces defined
 121      below.  See Intro(3) for additional information on shared object
 122      interfaces.  Functions are organized into categories that describe their
 123      purpose.  Individual functions are documented in their own manual pages.
 124 
 125    Creation, Grabbing, and Releasing
 126      The following routines are related to creating library handles, grabbing
 127      cores, processes, and threads, and releasing those resources.
 128 
 129            Lfree                         Lgrab
 130            Lgrab_error                   Pcreate
 131            Pcreate_agent                 Pcreate_callback
 132            Pcreate_error                 Pdestroy_agent
 133            Pfgrab_core                   Pfree
 134            Pgrab                         Pgrab_core
 135            Pgrab_error                   Pgrab_file
 136            Pgrab_ops                     Prelease
 137            Preopen                       Pxcreate
 138 
 139    Process interrogation and manipulation
 140      The following routines obtain information about a process and allow
 141      manipulation of the process itself.
 142 
 143            Paddr_to_ctf                  Paddr_to_loadobj
 144            Paddr_to_map                  Paddr_to_text_map
 145            Pasfd                         Pclearfault
 146            Pclearsig                     Pcontent
 147            Pcred                         Pctlfd
 148            Pdelbkpt                      Pdelwapt
 149            Pdstop                        Pexecname
 150            Pfault                        Pfgcore
 151            Pgcore                        Pgetareg
 152            Pgetauxval                    Pgetauxvec
 153            Pgetenv                       Pisprocdir
 154            Pissyscall_prev               Plmid
 155            Plmid_to_loadobj              Plmid_to_map
 156            Plookup_by_addr               Plookup_by_name
 157            Plwp_alt_stack                Plwp_getfpregs
 158            Plwp_getname                  Plwp_getpsinfo
 159            Plwp_getregs                  Plwp_getspymaster
 160            Plwp_main_stack               Plwp_setfpregs
 161            Plwp_setregs                  Plwp_stack
 162            Pname_to_ctf                  Pname_to_loadobj
 163            Pname_to_map                  Pobjname
 164            Pobjname_resolved             Pplatform
 165            Ppltdest                      Ppriv
 166            Ppsinfo                       Pputareg
 167            Prd_agent                     Pread
 168            Pread_string                  Preset_maps
 169            Psetbkpt                      Psecflags
 170            Psetcred                      Psetfault
 171            Psetflags                     Psetpriv
 172            Psetrun                       Psetsignal
 173            Psetsysentry                  Psetsysexit
 174            Psetwapt                      Psetzoneid
 175            Psignal                       Pstate
 176            Pstatus                       Pstop
 177            Pstopstatus                   Psync
 178            Psysentry                     Psysexit
 179            Puname                        Punsetflags
 180            Pupdate_maps                  Pupdate_syms
 181            Pwait                         Pwrite
 182            Pxecbkpt                      Pxecwapt
 183            Pxlookup_by_addr              Pxlookup_by_addr_resolved
 184            Pxlookup_by_name              Pzonename
 185            Pzonepath                     Pzoneroot
 186 
 187    Thread interrogation and manipulation
 188      The following routines obtain information about a thread and allow
 189      manipulation of the thread itself.
 190 
 191            Lalt_stack                    Lclearfault
 192            Lclearsig                     Lctlfd
 193            Ldstop                        Lgetareg
 194            Lmain_stack                   Lprochandle
 195            Lpsinfo                       Lputareg
 196            Lsetrun                       Lstack
 197            Lstate                        Lstatus
 198            Lstop                         Lsync
 199            Lwait                         Lxecbkpt
 200            Lxecwapt
 201 
 202    System Call Injection
 203      The following routines are used to inject specific system calls and have
 204      them run in the context of a process.
 205 
 206            pr_access                     pr_close
 207            pr_creat                      pr_door_info
 208            pr_exit                       pr_fcntl
 209            pr_fstat                      pr_fstat64
 210            pr_fstatvfs                   pr_getitimer
 211            pr_getpeername                pr_getpeerucred
 212            pr_getprojid                  pr_getrctl
 213            pr_getrlimit                  pr_getrlimit64
 214            pr_getsockname                pr_getsockopt
 215            pr_gettaskid                  pr_getzoneid
 216            pr_ioctl                      pr_link
 217            pr_llseek                     pr_lseek
 218            pr_lstat                      pr_lstat64
 219            pr_memcntl                    pr_meminfo
 220            pr_mmap                       pr_munmap
 221            pr_open                       pr_processor_bind
 222            pr_rename                     pr_setitimer
 223            pr_setrctl                    pr_setrlimit
 224            pr_setrlimit64                pr_settaskid
 225            pr_sigaction                  pr_stat
 226            pr_stat64                     pr_statvfs
 227            pr_unlink                     pr_waitid
 228 
 229    Iteration routines
 230      These routines are used to iterate over the contents of a process.
 231 
 232            Penv_iter                     Plwp_iter
 233            Plwp_iter_all                 Pmapping_iter
 234            Pmapping_iter_resolved        Pobject_iter
 235            Pobject_iter_resolved         Pstack_iter
 236            Psymbol_iter                  Psymbol_iter_by_addr
 237            Psymbol_iter_by_lmid          Psymbol_iter_by_name
 238            Pxsymbol_iter                 Pfdinfo_iter
 239 
 240    Utility routines
 241      The following routines are utilities that are useful to consumers of the
 242      library.
 243 
 244            Perror_printf                 proc_arg_grab
 245            proc_arg_psinfo               proc_arg_xgrab
 246            proc_arg_xpsinfo              proc_content2str
 247            proc_finistdio                proc_fltname
 248            proc_fltset2str               proc_flushstdio
 249            proc_get_auxv                 proc_get_cred
 250            proc_get_priv                 proc_get_psinfo
 251            proc_get_status               proc_initstdio
 252            proc_lwp_in_set               proc_lwp_range_valid
 253            proc_signame                  proc_sigset2str
 254            proc_str2content              proc_str2flt
 255            proc_str2fltset               proc_str2sig
 256            proc_str2sigset               proc_str2sys
 257            proc_str2sysset               proc_sysname
 258            proc_sysset2str               proc_unctrl_psinfo
 259            proc_walk
 260 
 261    x86 Specific Routines
 262      The following routines are specific to the x86, 32-bit and 64-bit,
 263      versions of the libproc library.
 264 
 265            Pldt                          proc_get_ldt
 266 
 267    SPARC specific Routines
 268      The following functions are specific to the SPARC, 32-bit and 64-bit,
 269      versions of the libproc library.
 270 
 271            Plwp_getgwindows              Plwp_getxregs
 272            Plwp_setxregs
 273 
 274      The following functions are specific to the 64-bit SPARC version of the
 275      libproc library.
 276 
 277            Plwp_getasrs                  Plwp_setasrs
 278 
 279 PROCESS STATES
 280      Every process handle that exists in libproc has a state.  In some cases,
 281      such as for core files, these states are static.  In other cases, such as
 282      handles that correspond to a running process or a created process, these
 283      states are dynamic and change based on actions taken in the library.  The
 284      state can be obtained with the Pstate(3PROC) function.
 285 
 286      The various states are:
 287 
 288            PS_RUN        An actively running process.  This may be a process
 289                          that was obtained by creating it with functions such
 290                          as Pcreate(3PROC) or by grabbing an existing process
 291                          such as Pgrab(3PROC).
 292 
 293            PS_STOP       An active process that is no longer executing.  A
 294                          process may stop for many reasons such as an explicit
 295                          stop request (through pstop(1) for example) or if a
 296                          tracing event is hit.
 297 
 298                          The reason a process is stopped may be obtained
 299                          through the thread's lwpstatus_t structure read
 300                          directly from /proc or obtained through the
 301                          Lstatus(3PROC) function.
 302 
 303            PS_LOST       Control over the process has been lost.  This may
 304                          happen when the process executes a new image
 305                          requiring a different set of privileges.  To resume
 306                          control call Preopen(3PROC).  For more information on
 307                          losing control of a process, see proc(4).
 308 
 309            PS_UNDEAD     A zombie process.  It has terminated, but it has not
 310                          been cleaned up yet by its parent.  For more on the
 311                          conditions of becoming a zombie, see exec(2).
 312 
 313            PS_DEAD       Processes in this state are always core files.  See
 314                          the earlier section Core Files for more information
 315                          on working with core files.
 316 
 317            PS_IDLE       A process that has never been run.  This is always
 318                          the case for handles that refer to files as the files
 319                          cannot be executed.  Those process handles are
 320                          obtained through calling Pgrab_file(3PROC).
 321 
 322      Many functions relating to tracing processes, for example Psignal(3PROC),
 323      Psetsignal(3PROC), Psetfault(3PROC), Psysentry(3PROC), and others,
 324      mention that they only act upon Active Processes.  This specifically
 325      refers to processes whose state are in PS_RUN and PS_STOP.  Process
 326      handles in the other states have no notion of settable tracing flags,
 327      though core files (type PS_DEAD) may have a read-only snapshot of their
 328      tracing settings available.
 329 
 330 TYPES
 331      The libproc library uses many types that come from the /proc file system
 332      (proc(4)) and the ELF format (elf(3ELF)).  However, it also defines the
 333      following types:
 334 
 335      struct ps_prochandle
 336 
 337      The struct ps_prochandle is an opaque handle to the library and the core
 338      element of control for a process.  Consumers obtain pointers to a handle
 339      through the use of the Pcreate(), Pgrab(), and related functions.  When a
 340      caller is done with a handle, then it should call one of the Pfree() and
 341      Prelease() functions to relinquish the handle, release associated
 342      resources, and potentially set the process to run again.
 343 
 344      struct ps_lwphandle
 345 
 346      The struct ps_lwphandle is analogous to the struct ps_prochandle, but it
 347      represents the control of an individual thread, rather than a process.
 348      Consumers obtain pointers to a handle through the Lgrab() function and
 349      relinquish it with the Lfree() function.
 350 
 351      core_content_t
 352 
 353      The core_content_t is a value which describes the various content types
 354      of core files.  These are used in functions such as Pcontent(3PROC) and
 355      Pgcore(3PROC) to describe and control the types of content that get
 356      included.  Various content types may be included together through a
 357      bitwise-inclusive-OR.  The default system core contents are controlled
 358      with the coreadm(1M) tool.  The following table lists the current set of
 359      core contents in the system, though the set may increase over time.  The
 360      string after the macro is the human readable string that corresponds with
 361      the constant and is used by coreadm(1M), proc_content2str(3PROC), and
 362      proc_str2content(3PROC).
 363 
 364            CC_CONTENT_STACK ("stack")
 365                    The contents include the process stack.  Note, this only
 366                    covers the main thread's stack.  The stack of other threads
 367                    is covered by CC_CONTENT_ANON.
 368 
 369            CC_CONTENT_HEAP ("heap")
 370                    The contents include the process heap.
 371 
 372            CC_CONTENT_SHFILE ("shfile")
 373                    The contents include shared mappings that are backed by
 374                    files (e.g.  mapped through mmap(2) with the MAP_SHARED
 375                    flag).
 376 
 377            CC_CONTENT_SHANNON ("shannon")
 378                    The contents include shared mappings that are backed by
 379                    anonymous memory (e.g. mapped through mmap(2) with the
 380                    MAP_SHARED and MAP_ANON flags).
 381 
 382            CC_CONTENT_RODATA ("rodata")
 383                    The contents include private read-only file mappings, such
 384                    as shared library text.
 385 
 386            CC_CONTENT_ANON ("anon")
 387                    The contents include private anonymous mappings.  This
 388                    includes the stacks of threads which are not the main
 389                    thread.
 390 
 391            CC_CONTENT_SHM ("shm")
 392                    The contents include system V shared memory.
 393 
 394            CC_CONTENT_ISM ("ism")
 395                    The contents include ISM (intimate shared memory) mappings.
 396 
 397            CC_CONTENT_DISM ("dism")
 398                    The contents include DISM (dynamic shared memory) mappings.
 399 
 400            CC_CONTENT_CTF ("ctf")
 401                    The contents include ctf(4) (Compact C Type Format)
 402                    information.  Note, not all objects in the process may have
 403                    CTF information available.
 404 
 405            CC_CONTENT_SYMTAB ("symtab")
 406                    The contents include the symbol table.  Note, not all
 407                    objects in the process may have a symbol table available.
 408 
 409            CC_CONTENT_ALL ("all")
 410                    This value indicates that all of the above content values
 411                    are present.  Note that additional values may be added in
 412                    the future, in which case the value of the symbol will be
 413                    updated to include them.  Comparisons with CC_CONTENT_ALL
 414                    should validate all the expected bits are set by an
 415                    expression such as (c & CC_CONTENT_ALL) == CC_CONTENT_ALL.
 416 
 417            CC_CONTENT_NONE ("none")
 418                    This value indicates that there is no content present.
 419 
 420            CC_CONTENT_DEFAULT ("default")
 421                    The content includes the following set of default values:
 422                    CC_CONTENT_STACK, CC_CONTENT_HEAP, CC_CONTENT_ISM,
 423                    CC_CONTENT_DISM, CC_CONTENT_SHM, CC_CONTENT_SHANON,
 424                    CC_CONTENT_TEXT, CC_CONTENT_DATA, CC_CONTENT_RODATA,
 425                    CC_CONTENT_ANON, CC_CONTENT_CTF, and CC_CONTENT_SYMTAB.
 426                    Note that the default may change.  Comparisons with
 427                    CC_CONTENT_DEFAULT should validate that all of the expected
 428                    bits are set with an expression such as
 429                    (c &     CC_CONTENT_DEFAULT) == CC_CONTENT_DEFAULT.
 430 
 431            CC_CONTENT_INVALID
 432                    This indicates that the contents are invalid.
 433 
 434      prfdinfo_t
 435 
 436      The prfdinfo_t structure is used with the Pfdinfo_iter() function which
 437      describes information about a file descriptor.  The structure is defined
 438      as follows:
 439 
 440      typedef struct prfdinfo {
 441              int             pr_fd;
 442              mode_t          pr_mode;
 443              uid_t           pr_uid;
 444              gid_t           pr_gid;
 445              major_t         pr_major;       /* think stat.st_dev */
 446              minor_t         pr_minor;
 447              major_t         pr_rmajor;      /* think stat.st_rdev */
 448              minor_t         pr_rminor;
 449              ino64_t         pr_ino;
 450              off64_t         pr_offset;
 451              off64_t         pr_size;
 452              int             pr_fileflags;   /* fcntl(F_GETXFL), etc */
 453              int             pr_fdflags;     /* fcntl(F_GETFD), etc. */
 454              char            pr_path[MAXPATHLEN];
 455      } prfdinfo_t;
 456 
 457      The structure has similar information to that found in the stat structure
 458      that's used as part of the stat family of system calls, defined in
 459      stat(2).  The member pr_fd contains the number of the file descriptor of
 460      the file.  The members pr_mode, pr_uid, pr_gid, pr_ino, and pr_size are
 461      the same as the members st_mode, st_uid, st_gid, st_ino, and st_size in
 462      the stat structure.
 463 
 464      The pr_major and pr_minor members contain the major and minor numbers of
 465      the device containing the directory for this file.  This is similar to
 466      the st_dev member of the stat structure, except that it is broken out
 467      into its major and minor components.  The pr_rmajor and pr_rminor members
 468      are similar in spirit to pr_major and pr_minor; however, they are
 469      equivalent to the st_rdev member of the stat structure and thus have
 470      meaning for special character and block files.
 471 
 472      The pr_offset member contains the current seek offset of the file
 473      descriptor.  The pr_fileflags and pr_fdflags members contain the flags
 474      that would have been returned by a call to fcntl(2) with the arguments
 475      F_GETXFL and F_GETFD respectively.
 476 
 477      prsyminfo_t
 478 
 479      The prsyminfo_t structure is used with the various symbol look up
 480      functions Pxlookup_by_name(), Pxlookup_by_addr(), and
 481      Pxlookup_by_addr_resolved() which describes additional information about
 482      a symbol.  The structure is defined as follows:
 483 
 484      typedef struct prsyminfo {
 485              const char      *prs_object;            /* object name */
 486              const char      *prs_name;              /* symbol name */
 487              Lmid_t          prs_lmid;               /* link map id */
 488              uint_t          prs_id;                 /* symbol id */
 489              uint_t          prs_table;              /* symbol table id */
 490      } prsyminfo_t;
 491 
 492      The member prs_object points to a string that contains the name of the
 493      object file, if known, that the symbol comes from.  The member prs_name
 494      points to the name of the symbol, if known.  This may be unknown due to a
 495      stripped binary that contains no symbol table.  The member prs_lmid
 496      indicates the link map identifier that the symbol was found on.  For more
 497      information on link map identifiers refer to the Linker and Libraries
 498      Guide and dlopen(3C).
 499 
 500      The members prs_id and prs_table can be used to determine both the symbol
 501      table that the entry came from and which entry in the table it
 502      corresponds to.  If the value of prs_table is PR_SYMTAB then it came from
 503      the ELF standard symbol table.  However, if it is instead PR_DYNSYM, then
 504      that indicates that it comes from the process's dynamic section.
 505 
 506      proc_lwp_f
 507 
 508      The proc_lwp_f is a function pointer type that is used with the
 509      Plwp_iter() function.  It is defined as typedef int proc_lwp_f(void *,
 510      const lwpstatus_t *).  The first argument is a pointer to an argument
 511      that the user specifies, while the second has the thread's status
 512      information and is defined in proc(4).  For additional information on
 513      using this type, see Plwp_iter(3PROC).
 514 
 515      proc_lwp_all_f
 516 
 517      The proc_lwp_all_f is a function pointer type that is used with the
 518      Plwp_iter_all() function.  It is defined as typedef int
 519      proc_lwp_all_f(void *, const lwpstatus_t *, const lwpsinfo_t *).  The
 520      first argument is a pointer to an argument that the user specifies.  The
 521      second and third arguments contain the thread's status and thread-
 522      specific ps(1) information respectively.  Both structures are defined in
 523      proc(4).  For additional information on using this type, see
 524      Plwp_iter_all(3PROC).
 525 
 526      proc_walk_f
 527 
 528      The proc_walk_f is a function pointer type that is used with the
 529      proc_walk() function.  It is defined as typedef int
 530      proc_walk_f(psinfo_t *, lwpsinfo_t *, void *).  The first argument
 531      contains the process ps(1) information and the second argument contains
 532      the representative thread's ps(1) information.  Both structures are
 533      defined in proc(4).  The final argument is a pointer to an argument that
 534      the user specifies.  For more information on using this, see
 535      proc_walk(3PROC).
 536 
 537      proc_map_f
 538 
 539      The proc_map_f is a function pointer type that is used with the
 540      Pmapping_iter(), Pmapping_iter_resolved(), Pobject_iter(), and
 541      Pobject_iter_resolved() functions.  It is defined as typedef int
 542      proc_map_f(void *, const prmap_t *, const char *).  The first argument is
 543      a pointer to an argument that the user specifies.  The second argument is
 544      describes the mapping information and is defined in proc(4).  The final
 545      argument contains the name of the mapping or object file in question.
 546      For additional information on using this type, see Pmapping_iter(3PROC).
 547 
 548      proc_env_f
 549 
 550      The proc_env_f is a function pointer type that is used with the
 551      Penv_iter() function.  It is defined as typedef int proc_env_f(void *,
 552      struct ps_prochandle *, uintptr_t, const char *).  The first argument is
 553      a pointer to an argument that the user specifies.  The second argument is
 554      a pointer to the struct ps_prochandle that the callback was passed to.
 555      The third argument is the address of the environment variable in the
 556      process.  The fourth argument is the environment variable.  Values in the
 557      environment follow the convention of the form variable=value.  For more
 558      information on environment variables see exec(2) and environ(5).  For
 559      additional information on using this type, see Penv_iter(3PROC).
 560 
 561      proc_sym_f
 562 
 563      The proc_sym_f is a function pointer type that is used with the
 564      Psmbol_iter(), Psymbol_iter_by_addr(), Psymbol_iter_by_name(), and
 565      Psymbol_iter_by_lmid() functions.  It is defined as typedef int
 566      proc_sym_f(void *, const GElf_Sym *, const char *).  The first argument
 567      is a pointer to an argument that the user supplies.  The second argument
 568      is a pointer to the ELF symbol information in a 32-bit and 64-bit neutral
 569      form.  See elf(3ELF) and gelf(3ELF) for more information on it.  The
 570      final argument points to a character string that has the name of the
 571      symbol.  For additional information on using this type, see
 572      Psymbol_iter(3PROC), Psymbol_iter_by_addr(3PROC),
 573      Psymbol_iter_by_name(3PROC), and Psymbol_iter_by_lmid(3PROC).
 574 
 575      proc_xsym_f
 576 
 577      The proc_xsym_f is a function pointer type that is used with the
 578      Pxsymbol_iter() function.  It is defined as typedef int
 579      proc_xsym_f(void *, const GElf_Sym *, const char *, const prsyminfo_t *).
 580      The first three arguments are identical to those of proc_sym_f.  The
 581      final argument contains additional information about the symbol itself.
 582      The members of the prsyminfo_t are defined earlier in this section.  For
 583      additional information on using this type, see Pxsymbol_iter(3PROC).
 584 
 585      proc_stack_f
 586 
 587      The proc_stack_f is a function pointer type that is used with the
 588      Pstack_iter() function.  It is defined as typedef int
 589      proc_stack_f(void *, prgregset_t, uint_t, const long *).  The first
 590      argument is a pointer to an argument that the user specifies.  The second
 591      argument's contents are platform specific.  The registers that contain
 592      stack information, usually the stack pointer and frame pointer, will be
 593      filled in to point to an entry.  The prgregset_t is defined in proc(4).
 594 
 595      The third argument contains the number of arguments to the current stack
 596      frame and the fourth argument contains an array of addresses that
 597      correspond to the arguments to that stack function.  The value of the
 598      third argument dictates the number of entries in the fourth argument.
 599      For additional information on using this type, see Pstack_iter(3PROC).
 600 
 601      proc_fdinfo_f
 602 
 603      The proc_fdinfo_f is a function pointer type that is used with the
 604      Pfdinfo_iter() function.  It is defined as typedef int
 605      proc_fdinfo_f(void *, prfdinfo_t *).  The first argument is a pointer to
 606      an argument that the user specifies.  The second argument contains
 607      information about an open file descriptor.  The members of the prfdinfo_t
 608      are defined earlier in this section.  For additional information on using
 609      this type, see Pfdinfo_iter(3PROC).
 610 
 611 PROGRAMMING NOTES
 612      When working with live processes, whether from the Pgrab(3PROC) or
 613      Pcreate(3PROC) family of functions, there are some additional
 614      considerations.  Importantly, if a process calls any of the exec(2) suite
 615      of functions, much of the state information that is obtained,
 616      particularly that about mappings in the process will be invalid.  Callers
 617      must ensure that they call Preset_maps(3PROC) when they hold a process
 618      handle across an exec.  In addition, users of the library should
 619      familiarize themselves with the PROGRAMMING NOTES section of the proc(4)
 620      manual page, which discusses issues of privileges and security.
 621 
 622 DEBUGGING
 623      The library provides a means for obtaining additional debugging
 624      information.  The output itself is not part of the libproc library's
 625      stable interface.  Setting the environment variable LIBPROC_DEBUG to some
 626      value will print information to standard error.  For example,
 627      LIBPROC_DEBUG=please.
 628 
 629 LOCKING
 630      Most functions operate on a handle to a process in the form of a struct
 631      ps_prochandle *.  Unless otherwise indicated, the library does not
 632      provide any synchronization for different routines that are operating on
 633      the same libproc library handle.  It is up to the caller to ensure that
 634      only a single thread is using a handle at any given time.  Multiple
 635      threads may call libproc library routines at the same time as long as
 636      each thread is using a different handle.
 637 
 638      Each individual function notes its MT-Level section.  The MT-Level of a
 639      routine that matches the above description will refer to this manual
 640      page.  If it does not, then it refers to the standard attributes in
 641      attributes(5).
 642 
 643 INTERFACE STABILITY
 644      Uncommitted
 645 
 646      While the library is considered an uncommitted interface, and is still
 647      evolving, changes that break compatibility have been uncommon and this
 648      trend is expected to continue.  It is documented to allow consumers,
 649      whether part of illumos or outside of it, to understand the libarary and
 650      make use of it with the understanding that changes may occur which break
 651      both source and binary compatibility.
 652 
 653 SEE ALSO
 654      gcore(1), mdb(1), proc(1), ps(1), coreadm(1M), exec(2), fcntl(2),
 655      stat(2), Intro(3), dlopen(3C), elf(3ELF), ctf(4), proc(4), attributes(5),
 656      environ(5), privileges(5)
 657 
 658 
 659      Linkers and Libraries Guide.
 660 
 661      Lfree(3PROC), Lgrab(3PROC), Lgrab_error(3PROC), Pcreate(3PROC),
 662      Pcreate_agent(3PROC), Pcreate_callback(3PROC), Pcreate_error(3PROC),
 663      Pdestroy_agent(3PROC), Pfgrab_core(3PROC), Pfree(3PROC), Pgrab(3PROC),
 664      Pgrab_core(3PROC), Pgrab_error(3PROC), Pgrab_file(3PROC),
 665      Pgrab_ops(3PROC), Prelease(3PROC), Preopen(3PROC), Pxcreate(3PROC)
 666 
 667      Paddr_to_ctf(3PROC), Paddr_to_loadobj(3PROC), Paddr_to_map(3PROC),
 668      Paddr_to_text_map(3PROC), Pasfd(3PROC), Pclearfault(3PROC),
 669      Pclearsig(3PROC), Pcontent(3PROC), Pcred(3PROC), Pctlfd(3PROC),
 670      Pdelbkpt(3PROC), Pdelwapt(3PROC), Pdstop(3PROC), Pexecname(3PROC),
 671      Pfault(3PROC), Pfgcore(3PROC), Pgcore(3PROC), Pgetareg(3PROC),
 672      Pgetauxval(3PROC), Pgetauxvec(3PROC), Pgetenv(3PROC), Pisprocdir(3PROC),
 673      Pissyscall_prev(3PROC), Plmid(3PROC), Plmid_to_loadobj(3PROC),
 674      Plmid_to_map(3PROC), Plookup_by_addr(3PROC), Plookup_by_name(3PROC),
 675      Plwp_alt_stack(3PROC), Plwp_getfpregs(3PROC), Plwp_getpsinfo(3PROC),
 676      Plwp_getregs(3PROC), Plwp_getspymaster(3PROC), Plwp_main_stack(3PROC),
 677      Plwp_setfpregs(3PROC), Plwp_setregs(3PROC), Plwp_stack(3PROC),
 678      Pname_to_ctf(3PROC), Pname_to_loadobj(3PROC), Pname_to_map(3PROC),
 679      Pobjname(3PROC), Pobjname_resolved(3PROC), Pplatform(3PROC),
 680      Ppltdest(3PROC), Ppriv(3PROC), Ppsinfo(3PROC), Pputareg(3PROC),
 681      Prd_agent(3PROC), Pread(3PROC), Pread_string(3PROC), Preset_maps(3PROC),
 682      Psecflags(3PROC), Psetbkpt(3PROC), Psetcred(3PROC), Psetfault(3PROC),
 683      Psetflags(3PROC), Psetpriv(3PROC), Psetrun(3PROC), Psetsignal(3PROC),
 684      Psetsysentry(3PROC), Psetsysexit(3PROC), Psetwapt(3PROC),
 685      Psetzoneid(3PROC), Psignal(3PROC), Pstate(3PROC), Pstatus(3PROC),
 686      Pstop(3PROC), Pstopstatus(3PROC), Psync(3PROC), Psysentry(3PROC),
 687      Psysexit(3PROC), Puname(3PROC), Punsetflags(3PROC), Pupdate_maps(3PROC),
 688      Pupdate_syms(3PROC), Pwait(3PROC), Pwrite(3PROC), Pxecbkpt(3PROC),
 689      Pxecwapt(3PROC), Pxlookup_by_addr(3PROC),
 690      Pxlookup_by_addr_resolved(3PROC), Pxlookup_by_name(3PROC),
 691      Pzonename(3PROC), Pzonepath(3PROC), Pzoneroot(3PROC)
 692 
 693      Lalt_stack(3PROC), Lclearfault(3PROC), Lclearsig(3PROC), Lctlfd(3PROC),
 694      Ldstop(3PROC), Lgetareg(3PROC), Lmain_stack(3PROC), Lprochandle(3PROC),
 695      Lpsinfo(3PROC), Lputareg(3PROC), Lsetrun(3PROC), Lstack(3PROC),
 696      Lstate(3PROC), Lstatus(3PROC), Lstop(3PROC), Lsync(3PROC), Lwait(3PROC),
 697      Lxecbkpt(3PROC), Lxecwapt(3PROC)
 698 
 699      pr_access(3PROC), pr_close(3PROC), pr_creat(3PROC), pr_door_info(3PROC),
 700      pr_exit(3PROC), pr_fcntl(3PROC), pr_fstat(3PROC), pr_fstat64(3PROC),
 701      pr_fstatvfs(3PROC), pr_getitimer(3PROC), pr_getpeername(3PROC),
 702      pr_getpeerucred(3PROC), pr_getprojid(3PROC), pr_getrctl(3PROC),
 703      pr_getrlimit(3PROC), pr_getrlimit64(3PROC), pr_getsockname(3PROC),
 704      pr_getsockopt(3PROC), pr_gettaskid(3PROC), pr_getzoneid(3PROC),
 705      pr_ioctl(3PROC), pr_link(3PROC), pr_llseek(3PROC), pr_lseek(3PROC),
 706      pr_lstat(3PROC), pr_lstat64(3PROC), pr_memcntl(3PROC), pr_meminfo(3PROC),
 707      pr_mmap(3PROC), pr_munmap(3PROC), pr_open(3PROC),
 708      pr_processor_bind(3PROC), pr_rename(3PROC), pr_setitimer(3PROC),
 709      pr_setrctl(3PROC), pr_setrlimit(3PROC), pr_setrlimit64(3PROC),
 710      pr_settaskid(3PROC), pr_sigaction(3PROC), pr_stat(3PROC),
 711      pr_stat64(3PROC), pr_statvfs(3PROC), pr_unlink(3PROC), pr_waitid(3PROC),
 712 
 713      Penv_iter(3PROC), Plwp_iter(3PROC), Plwp_iter_all(3PROC),
 714      Pmapping_iter(3PROC), Pmapping_iter_resolved(3PROC), Pobject_iter(3PROC),
 715      Pobject_iter_resolved(3PROC), Pstack_iter(3PROC), Psymbol_iter(3PROC),
 716      Psymbol_iter_by_addr(3PROC), Psymbol_iter_by_lmid(3PROC),
 717      Psymbol_iter_by_name(3PROC), Pxsymbol_iter(3PROC), Pfdinfo_iter(3PROC)
 718 
 719      Perror_printf(3PROC), proc_arg_grab(3PROC), proc_arg_psinfo(3PROC),
 720      proc_arg_xgrab(3PROC), proc_arg_xpsinfo(3PROC), proc_content2str(3PROC),
 721      proc_finistdio(3PROC), proc_fltname(3PROC), proc_fltset2str(3PROC),
 722      proc_flushstdio(3PROC), proc_get_auxv(3PROC), proc_get_cred(3PROC),
 723      proc_get_priv(3PROC), proc_get_psinfo(3PROC), proc_get_status(3PROC),
 724      proc_initstdio(3PROC), proc_lwp_in_set(3PROC),
 725      proc_lwp_range_valid(3PROC), proc_signame(3PROC), proc_sigset2str(3PROC),
 726      proc_str2content(3PROC), proc_str2flt(3PROC), proc_str2fltset(3PROC),
 727      proc_str2sig(3PROC), proc_str2sigset(3PROC), proc_str2sys(3PROC),
 728      proc_str2sysset(3PROC), proc_sysname(3PROC), proc_sysset2str(3PROC),
 729      proc_unctrl_psinfo(3PROC), proc_walk(3PROC)
 730 
 731      Pldt(3PROC), proc_get_ldt(3PROC),
 732 
 733      Plwp_getgwindows(3PROC), Plwp_getxregs(3PROC), Plwp_setxregs(3PROC),
 734 
 735      Plwp_getasrs(3PROC), Plwp_setasrs(3PROC)
 736 
 737 illumos                       September 15, 2018                       illumos