LIBPROC(3LIB) Interface Libraries LIBPROC(3LIB)

NAME


libproc - process control library

SYNOPSIS


Process Control Library (libproc, -lproc)
#include <libproc.h>

DESCRIPTION


The libproc library provides consumers a general series of interfaces to
inspect and control both live processes and core files. It is intended for
introspection tools such as debuggers by providing a high-level interface
to the /proc file system (proc(5)).

The libproc library provides interfaces that focus on:

+o Creating and attaching to live process, core files, and arbitrary
ELF objects.

+o Interrogating the state of a process or core file.

+o Manipulating the current state of a process or thread.

+o Interrogating the state of threads of a process or core file.

+o Running system calls in the context of another process.

+o Various utilities for iterating process and core file file
descriptors, mappings, symbols, and more.

+o Various utilities to support debugging tools.

Live Processes


The libproc library can be used to manipulate running processes and to
create new ones. To manipulate an existing process first grab it with the
Pgrab() function. A process is generally stopped as a side effect of
grabbing it. Callers must exercise caution, as if they do not use the
library correctly, or they terminate unexpectedly, a process may remain
stopped.

Unprivileged users may only grab their own processes. Users with the
privilege {PRIV_PROC_OWNER} may manipulate processes that they do not own;
however, additional restrictions as described in privileges(7) apply.

In addition, the Pcreate() and Pxcreate() functions may be used to create
processes which are always controlled by the library.

Core Files


The libproc library has the ability to open and interpret core files
produced by processes on the system. Process core dump generation is
controlled by the coreadm(8) command. In addition, the library has the
ability to understand and interpret core dumps generated by Linux kernel
and can provide a subset of its functionality on such core files, provided
the original binary is also present.

Not all functions in the libproc library are valid for core files. In
general, none of the commands which manipulate the current state of a
process or thread or that try to force system calls on a victim process
will work. Furthermore several of the information and iteration interfaces
are limited based on the data that is available in the core file. For
example, if the core file is of a process that omits the frame pointer, the
ability to iterate the stack will be limited.

Use the Pgrab_core() or Pfgrab_core() function to open a core file. Use
the Pgrab_file() function to open an ELF object file. This is useful for
obtaining information stored in ELF headers and sections.

Debug Information


Many of the operations in the library rely on debug information being
present in a process and its associated libraries. The library leverages
symbol table information, CTF data (ctf(5)) sections, and frame unwinding
information based on the use of an ABI defined frame pointer, e.g. %ebp
and %rbp on x86 systems.

Some software providers strip programs of this information or build their
executables such that the information will not be present in a core dump.
To deal with this fact, the library is able to consume information that is
not present in the core file or the running process. It can both consume
it from the underlying executable and it also supports finding it from
related ELF objects that are linked to it via the .gnu_debuglink and the
.note.gnu.build-id ELF sections.

Iteration Interfaces


The libproc library provides the ability to iterate over the following
aspects of a process or core file:

+o Active threads

+o Active and zombie threads

+o All non-system processes

+o All process mappings

+o All objects in a process

+o The environment

+o The symbol table

+o Stack frames

+o File Descriptors

System Call Injection


The libproc library allows the caller to force system calls to be executed
in the context of the running process. This can be used both as a tool for
introspection, allowing one to get information outside its current context
as well as performing modifications to a process.

These functions run in the context of the calling process. This is often
an easier way of getting non-exported information about a process from the
system. For example, the pfiles(1) command uses this interface to get more
detailed information about a process's open file descriptors, which it
would not have access to otherwise.

INTERFACES


The shared object libproc.so.1 provides the public interfaces defined
below. See Intro(3) for additional information on shared object
interfaces. Functions are organized into categories that describe their
purpose. Individual functions are documented in their own manual pages.

Creation, Grabbing, and Releasing
The following routines are related to creating library handles, grabbing
cores, processes, and threads, and releasing those resources.

Lfree Lgrab
Lgrab_error Pcreate
Pcreate_agent Pcreate_callback
Pcreate_error Pdestroy_agent
Pfgrab_core Pfree
Pgrab Pgrab_core
Pgrab_error Pgrab_file
Pgrab_ops Prelease
Preopen Pxcreate

Process interrogation and manipulation


The following routines obtain information about a process and allow
manipulation of the process itself.

Paddr_to_ctf Paddr_to_loadobj
Paddr_to_map Paddr_to_text_map
Pasfd Pclearfault
Pclearsig Pcontent
Pcred Pctlfd
Pdelbkpt Pdelwapt
Pdstop Pexecname
Pfault Pfgcore
Pgcore Pgetareg
Pgetauxval Pgetauxvec
Pgetenv Pisprocdir
Pissyscall_prev Plmid
Plmid_to_loadobj Plmid_to_map
Plookup_by_addr Plookup_by_name
Pname_to_ctf Pname_to_loadobj
Pname_to_map Pobjname
Pobjname_resolved Pplatform
Ppltdest Ppriv
Ppsinfo Pputareg
Prd_agent Pread
Pread_string Preset_maps
Psetbkpt Psecflags
Psetcred Psetfault
Psetflags Psetpriv
Psetrun Psetsignal
Psetsysentry Psetsysexit
Psetwapt Psetzoneid
Psignal Pstate
Pstatus Pstop
Pstopstatus Psync
Psysentry Psysexit
Puname Pupanic
Pupanic_free Punsetflags
Pupdate_maps Pupdate_syms
Pwait Pwrite
Pxecbkpt Pxecwapt
Pxlookup_by_addr Pxlookup_by_addr_resolved
Pxlookup_by_name Pzonename
Pzonepath Pzoneroot

Thread interrogation and manipulation


The following routines obtain information about a thread and allow
manipulation of the thread itself.

Lalt_stack Lclearfault
Lclearsig Lctlfd
Ldstop Lgetareg
Lgetfpregs Lgetregs
Lgetxregs Lmain_stack
Lprochandle Lpsinfo
Lputareg Lsetrun
Lsetfpregs Lsetregs
Lsetxregs Lstack
Lstate Lstatus
Lstop Lsync
Lwait Lxecbkpt
Lxecwapt

Plwp_alt_stack Plwp_freexregs
Plwp_getfpregs Plwp_getname
Plwp_getpsinfo Plwp_getregs
Plwp_getspymaster Plwp_main_stack
Plwp_getxregs Plwp_setfpregs
Plwp_setregs Plwp_setxregs
Plwp_stack

System Call Injection


The following routines are used to inject specific system calls and have
them run in the context of a process.

pr_access pr_close
pr_creat pr_door_info
pr_exit pr_fcntl
pr_fstat pr_fstat64
pr_fstatvfs pr_getitimer
pr_getpeername pr_getpeerucred
pr_getprojid pr_getrctl
pr_getrlimit pr_getrlimit64
pr_getsockname pr_getsockopt
pr_gettaskid pr_getzoneid
pr_ioctl pr_link
pr_llseek pr_lseek
pr_lstat pr_lstat64
pr_memcntl pr_meminfo
pr_mmap pr_munmap
pr_open pr_processor_bind
pr_rename pr_setitimer
pr_setrctl pr_setrlimit
pr_setrlimit64 pr_settaskid
pr_sigaction pr_stat
pr_stat64 pr_statvfs
pr_unlink pr_waitid

Iteration routines


These routines are used to iterate over the contents of a process.

Penv_iter Plwp_iter
Plwp_iter_all Pmapping_iter
Pmapping_iter_resolved Pobject_iter
Pobject_iter_resolved Pstack_iter
Psymbol_iter Psymbol_iter_by_addr
Psymbol_iter_by_lmid Psymbol_iter_by_name
Pxsymbol_iter Pfdinfo_iter

Utility routines


The following routines are utilities that are useful to consumers of the
library.

Perror_printf proc_arg_grab
proc_arg_psinfo proc_arg_xgrab
proc_arg_xpsinfo proc_content2str
proc_dmodelname proc_finistdio
proc_fltname proc_fltset2str
proc_flushstdio proc_get_auxv
proc_fdinfo_misc proc_get_cred
proc_get_fdinfo proc_get_lwpsinfo
proc_get_lwpstatus proc_get_priv
proc_get_psinfo proc_get_status
proc_get_initstdio proc_lwp_in_set
proc_lwp_range_valid proc_signame
proc_sigset2str proc_str2content
proc_str2flt proc_str2fltset
proc_str2sig proc_str2sigset
proc_str2sys proc_str2sysset
proc_sysname proc_sysset2str
proc_unctrl_psinfo

x86 Specific Routines
The following routines are specific to the x86, 32-bit and 64-bit, versions
of the libproc library.

Pldt proc_get_ldt

SPARC specific Routines


The following functions are specific to the SPARC, 32-bit and 64-bit,
versions of the libproc library.

Plwp_getgwindows

The following functions are specific to the 64-bit SPARC version of the
libproc library.

Plwp_getasrs Plwp_setasrs

PROCESS STATES


Every process handle that exists in libproc has a state. In some cases,
such as for core files, these states are static. In other cases, such as
handles that correspond to a running process or a created process, these
states are dynamic and change based on actions taken in the library. The
state can be obtained with the Pstate(3PROC) function.

The various states are:

PS_RUN An actively running process. This may be a process
that was obtained by creating it with functions such as
Pcreate(3PROC) or by grabbing an existing process such
as Pgrab(3PROC).

PS_STOP An active process that is no longer executing. A
process may stop for many reasons such as an explicit
stop request (through pstop(1) for example) or if a
tracing event is hit.

The reason a process is stopped may be obtained through
the thread's lwpstatus_t structure read directly from
/proc or obtained through the Lstatus(3PROC) function.

PS_LOST Control over the process has been lost. This may
happen when the process executes a new image requiring
a different set of privileges. To resume control call
Preopen(3PROC). For more information on losing control
of a process, see proc(5).

PS_UNDEAD A zombie process. It has terminated, but it has not
been cleaned up yet by its parent. For more on the
conditions of becoming a zombie, see exec(2).

PS_DEAD Processes in this state are always core files. See the
earlier section Core Files for more information on
working with core files.

PS_IDLE A process that has never been run. This is always the
case for handles that refer to files as the files
cannot be executed. Those process handles are obtained
through calling Pgrab_file(3PROC).

Many functions relating to tracing processes, for example Psignal(3PROC),
Psetsignal(3PROC), Psetfault(3PROC), Psysentry(3PROC), and others, mention
that they only act upon Active Processes. This specifically refers to
processes whose state are in PS_RUN and PS_STOP. Process handles in the
other states have no notion of settable tracing flags, though core files
(type PS_DEAD) may have a read-only snapshot of their tracing settings
available.

TYPES


The libproc library uses many types that come from the /proc file system
(proc(5)) and the ELF format (elf(3ELF)). However, it also defines the
following types:

struct ps_prochandle

The struct ps_prochandle is an opaque handle to the library and the core
element of control for a process. Consumers obtain pointers to a handle
through the use of the Pcreate(), Pgrab(), and related functions. When a
caller is done with a handle, then it should call one of the Pfree() and
Prelease() functions to relinquish the handle, release associated
resources, and potentially set the process to run again.

struct ps_lwphandle

The struct ps_lwphandle is analogous to the struct ps_prochandle, but it
represents the control of an individual thread, rather than a process.
Consumers obtain pointers to a handle through the Lgrab() function and
relinquish it with the Lfree() function.

core_content_t

The core_content_t is a value which describes the various content types of
core files. These are used in functions such as Pcontent(3PROC) and
Pgcore(3PROC) to describe and control the types of content that get
included. Various content types may be included together through a
bitwise-inclusive-OR. The default system core contents are controlled with
the coreadm(8) tool. The following table lists the current set of core
contents in the system, though the set may increase over time. The string
after the macro is the human readable string that corresponds with the
constant and is used by coreadm(8), proc_content2str(3PROC), and
proc_str2content(3PROC).

CC_CONTENT_STACK ("stack")
The contents include the process stack. Note, this only
covers the main thread's stack. The stack of other threads
is covered by CC_CONTENT_ANON.

CC_CONTENT_HEAP ("heap")
The contents include the process heap.

CC_CONTENT_SHFILE ("shfile")
The contents include shared mappings that are backed by files
(e.g. mapped through mmap(2) with the MAP_SHARED flag).

CC_CONTENT_SHANNON ("shannon")
The contents include shared mappings that are backed by
anonymous memory (e.g. mapped through mmap(2) with the
MAP_SHARED and MAP_ANON flags).

CC_CONTENT_RODATA ("rodata")
The contents include private read-only file mappings, such as
shared library text.

CC_CONTENT_ANON ("anon")
The contents include private anonymous mappings. This
includes the stacks of threads which are not the main thread.

CC_CONTENT_SHM ("shm")
The contents include system V shared memory.

CC_CONTENT_ISM ("ism")
The contents include ISM (intimate shared memory) mappings.

CC_CONTENT_DISM ("dism")
The contents include DISM (dynamic shared memory) mappings.

CC_CONTENT_CTF ("ctf")
The contents include ctf(5) (Compact C Type Format)
information. Note, not all objects in the process may have
CTF information available.

CC_CONTENT_SYMTAB ("symtab")
The contents include the symbol table. Note, not all objects
in the process may have a symbol table available.

CC_CONTENT_ALL ("all")
This value indicates that all of the above content values are
present. Note that additional values may be added in the
future, in which case the value of the symbol will be updated
to include them. Comparisons with CC_CONTENT_ALL should
validate all the expected bits are set by an expression such
as (c & CC_CONTENT_ALL) == CC_CONTENT_ALL.

CC_CONTENT_NONE ("none")
This value indicates that there is no content present.

CC_CONTENT_DEFAULT ("default")
The content includes the following set of default values:
CC_CONTENT_STACK, CC_CONTENT_HEAP, CC_CONTENT_ISM,
CC_CONTENT_DISM, CC_CONTENT_SHM, CC_CONTENT_SHANON,
CC_CONTENT_TEXT, CC_CONTENT_DATA, CC_CONTENT_RODATA,
CC_CONTENT_ANON, CC_CONTENT_CTF, and CC_CONTENT_SYMTAB. Note
that the default may change. Comparisons with
CC_CONTENT_DEFAULT should validate that all of the expected
bits are set with an expression such as
(c & CC_CONTENT_DEFAULT) == CC_CONTENT_DEFAULT.

CC_CONTENT_INVALID
This indicates that the contents are invalid.

prfdinfo_t

The prfdinfo_t structure is used with the Pfdinfo_iter(), proc_fdwalk(),
proc_fdinfowalk() and proc_get_fdinfo() functions and describes information
about a file descriptor. The structure is defined as follows:

typedef struct prfdinfo {
int pr_fd; /* file descriptor number */
mode_t pr_mode; /* (see st_mode in stat(2)) */
ino64_t pr_ino; /* inode number */
off64_t pr_size; /* file size */
off64_t pr_offset; /* current offset */
uid_t pr_uid; /* owner's user id */
gid_t pr_gid; /* owner's group id */
major_t pr_major; /* major number of device */
minor_t pr_minor; /* minor number of device */
major_t pr_rmajor; /* major number (if special file) */
minor_t pr_rminor; /* minor number (if special file) */
int pr_fileflags; /* (see F_GETXFL in fcntl(2)) */
int pr_fdflags; /* (see F_GETFD in fcntl(2)) */
short pr_locktype; /* (see F_GETLK in fcntl(2)) */
pid_t pr_lockpid; /* process holding file lock */
int pr_locksysid; /* sysid of locking process */
pid_t pr_peerpid; /* peer process (socket, door) */
int pr_filler[25]; /* reserved for future use */
char pr_peername[PRFNSZ]; /* peer process name */
#if __STDC_VERSION__ >= 199901L
uint8_t pr_misc[]; /* self describing structures */
else
uint8_t pr_misc[1]; /* self describing structures */
#endif
} prfdinfo_t;

The structure has similar information to that found in the stat structure
that's used as part of the stat family of system calls, defined in stat(2).
The member pr_fd contains the number of the file descriptor of the file.
The members pr_mode, pr_uid, pr_gid, pr_ino, and pr_size are the same as
the members st_mode, st_uid, st_gid, st_ino, and st_size in the stat
structure.

The pr_major and pr_minor members contain the major and minor numbers of
the device containing the directory for this file. This is similar to the
st_dev member of the stat structure, except that it is broken out into its
major and minor components. The pr_rmajor and pr_rminor members are
similar in spirit to pr_major and pr_minor; however, they are equivalent to
the st_rdev member of the stat structure and thus have meaning for special
character and block files.

The pr_offset member contains the current seek offset of the file
descriptor. The pr_fileflags and pr_fdflags members contain the flags that
would have been returned by a call to fcntl(2) with the arguments F_GETXFL
and F_GETFD respectively.

The pr_locktype, pr_lockpid, and pr_locksysid contain the information that
would have been returned by a call to fcntl(2) with an argument of F_GETLK.

The pr_peerpid and pr_peername members contain the process ID and name of
any peer endpoint of a connection-oriented socket or stream fd. This
information is the same as that which would be returned by a call to
getpeerucred(3C)

The pr_misc member contains miscellaneous additional data relating to the
file descriptor. The format of these data is described in proc(5).

prsyminfo_t

The prsyminfo_t structure is used with the various symbol look up functions
Pxlookup_by_name(), Pxlookup_by_addr(), and Pxlookup_by_addr_resolved()
which describes additional information about a symbol. The structure is
defined as follows:

typedef struct prsyminfo {
const char *prs_object; /* object name */
const char *prs_name; /* symbol name */
Lmid_t prs_lmid; /* link map id */
uint_t prs_id; /* symbol id */
uint_t prs_table; /* symbol table id */
} prsyminfo_t;

The member prs_object points to a string that contains the name of the
object file, if known, that the symbol comes from. The member prs_name
points to the name of the symbol, if known. This may be unknown due to a
stripped binary that contains no symbol table. The member prs_lmid
indicates the link map identifier that the symbol was found on. For more
information on link map identifiers refer to the Linker and Libraries Guide
and dlopen(3C).

The members prs_id and prs_table can be used to determine both the symbol
table that the entry came from and which entry in the table it corresponds
to. If the value of prs_table is PR_SYMTAB then it came from the ELF
standard symbol table. However, if it is instead PR_DYNSYM, then that
indicates that it comes from the process's dynamic section.

proc_lwp_f

The proc_lwp_f is a function pointer type that is used with the Plwp_iter()
function. It is defined as typedef int proc_lwp_f(void *,
const lwpstatus_t *). The first argument is a pointer to an argument that
the user specifies, while the second has the thread's status information
and is defined in proc(5). For additional information on using this type,
see Plwp_iter(3PROC).

proc_lwp_all_f

The proc_lwp_all_f is a function pointer type that is used with the
Plwp_iter_all() function. It is defined as typedef int
proc_lwp_all_f(void *, const lwpstatus_t *, const lwpsinfo_t *). The first
argument is a pointer to an argument that the user specifies. The second
and third arguments contain the thread's status and thread-specific ps(1)
information respectively. Both structures are defined in proc(5). For
additional information on using this type, see Plwp_iter_all(3PROC).

proc_fdinfowalk_f

The proc_fdinfowalk_f is a function pointer type that is used with the
proc_fdinfowalk() function to walk the miscellaneous data items contained
within a prfdinfo_t structure. It is defined as typedef int
proc_fdinfowalk_f(uint_t, const void *, size_t, void *). The first
argument contains the type of the miscellaneous information being
presented, the second and third provide a pointer to the associated data
and the length of that data. The final argument is a pointer to an
argument that the user specifies. For more information on using this, see
proc_fdinfowalk(3PROC).

proc_fdwalk_f

The proc_fdwalk_f is a function pointer type that is used with the
proc_fdwalk() function. It is defined as typedef int
proc_fdwalk_f(const prfdinfo_t *, void *). The first argument contains the
file descriptor information. The prfdinfo_t structure is defined in
proc(5). The final argument is a pointer to an argument that the user
specifies. For more information on using this, see proc_fdwalk(3PROC).

proc_walk_f

The proc_walk_f is a function pointer type that is used with the
proc_walk() function. It is defined as typedef int proc_walk_f(psinfo_t *,
lwpsinfo_t *, void *). The first argument contains the process ps(1)
information and the second argument contains the representative thread's
ps(1) information. Both structures are defined in proc(5). The final
argument is a pointer to an argument that the user specifies. For more
information on using this, see proc_walk(3PROC).

proc_map_f

The proc_map_f is a function pointer type that is used with the
Pmapping_iter(), Pmapping_iter_resolved(), Pobject_iter(), and
Pobject_iter_resolved() functions. It is defined as typedef int
proc_map_f(void *, const prmap_t *, const char *). The first argument is a
pointer to an argument that the user specifies. The second argument is
describes the mapping information and is defined in proc(5). The final
argument contains the name of the mapping or object file in question. For
additional information on using this type, see Pmapping_iter(3PROC).

proc_env_f

The proc_env_f is a function pointer type that is used with the Penv_iter()
function. It is defined as typedef int proc_env_f(void *,
struct ps_prochandle *, uintptr_t, const char *). The first argument is a
pointer to an argument that the user specifies. The second argument is a
pointer to the struct ps_prochandle that the callback was passed to. The
third argument is the address of the environment variable in the process.
The fourth argument is the environment variable. Values in the environment
follow the convention of the form variable=value. For more information on
environment variables see exec(2) and environ(7). For additional
information on using this type, see Penv_iter(3PROC).

proc_sym_f

The proc_sym_f is a function pointer type that is used with the
Psmbol_iter(), Psymbol_iter_by_addr(), Psymbol_iter_by_name(), and
Psymbol_iter_by_lmid() functions. It is defined as typedef int
proc_sym_f(void *, const GElf_Sym *, const char *). The first argument is
a pointer to an argument that the user supplies. The second argument is a
pointer to the ELF symbol information in a 32-bit and 64-bit neutral form.
See elf(3ELF) and gelf(3ELF) for more information on it. The final
argument points to a character string that has the name of the symbol. For
additional information on using this type, see Psymbol_iter(3PROC),
Psymbol_iter_by_addr(3PROC), Psymbol_iter_by_name(3PROC), and
Psymbol_iter_by_lmid(3PROC).

proc_xsym_f

The proc_xsym_f is a function pointer type that is used with the
Pxsymbol_iter() function. It is defined as typedef int proc_xsym_f(void *,
const GElf_Sym *, const char *, const prsyminfo_t *). The first three
arguments are identical to those of proc_sym_f. The final argument
contains additional information about the symbol itself. The members of
the prsyminfo_t are defined earlier in this section. For additional
information on using this type, see Pxsymbol_iter(3PROC).

proc_stack_f

The proc_stack_f is a function pointer type that is used with the
Pstack_iter() function. It is defined as typedef int proc_stack_f(void *,
prgregset_t, uint_t, const long *). The first argument is a pointer to an
argument that the user specifies. The second argument's contents are
platform specific. The registers that contain stack information, usually
the stack pointer and frame pointer, will be filled in to point to an
entry. The prgregset_t is defined in proc(5).

The third argument contains the number of arguments to the current stack
frame and the fourth argument contains an array of addresses that
correspond to the arguments to that stack function. The value of the third
argument dictates the number of entries in the fourth argument. For
additional information on using this type, see Pstack_iter(3PROC).

proc_fdinfo_f

The proc_fdinfo_f is a function pointer type that is used with the
Pfdinfo_iter() function. It is defined as typedef int
proc_fdinfo_f(void *, prfdinfo_t *). The first argument is a pointer to an
argument that the user specifies. The second argument contains information
about an open file descriptor. The members of the prfdinfo_t are defined
earlier in this section. For additional information on using this type,
see Pfdinfo_iter(3PROC).

PROGRAMMING NOTES


When working with live processes, whether from the Pgrab(3PROC) or
Pcreate(3PROC) family of functions, there are some additional
considerations. Importantly, if a process calls any of the exec(2) suite
of functions, much of the state information that is obtained, particularly
that about mappings in the process will be invalid. Callers must ensure
that they call Preset_maps(3PROC) when they hold a process handle across an
exec. In addition, users of the library should familiarize themselves with
the PROGRAMMING NOTES section of the proc(5) manual page, which discusses
issues of privileges and security.

DEBUGGING


The library provides a means for obtaining additional debugging
information. The output itself is not part of the libproc library's stable
interface. Setting the environment variable LIBPROC_DEBUG to some value
will print information to standard error. For example,
LIBPROC_DEBUG=please.

LOCKING


Most functions operate on a handle to a process in the form of a struct
ps_prochandle *. Unless otherwise indicated, the library does not provide
any synchronization for different routines that are operating on the same
libproc library handle. It is up to the caller to ensure that only a
single thread is using a handle at any given time. Multiple threads may
call libproc library routines at the same time as long as each thread is
using a different handle.

Each individual function notes its MT-Level section. The MT-Level of a
routine that matches the above description will refer to this manual page.
If it does not, then it refers to the standard attributes in attributes(7).

INTERFACE STABILITY


Uncommitted

While the library is considered an uncommitted interface, and is still
evolving, changes that break compatibility have been uncommon and this
trend is expected to continue. It is documented to allow consumers,
whether part of illumos or outside of it, to understand the library and
make use of it with the understanding that changes may occur which break
both source and binary compatibility.

SEE ALSO


gcore(1), mdb(1), proc(1), ps(1), exec(2), fcntl(2), stat(2), Intro(3),
dlopen(3C), elf(3ELF), ctf(5), proc(5), attributes(7), environ(7),
privileges(7), coreadm(8)


Linkers and Libraries Guide.

Lfree(3PROC), Lgrab(3PROC), Lgrab_error(3PROC), Pcreate(3PROC),
Pcreate_agent(3PROC), Pcreate_callback(3PROC), Pcreate_error(3PROC),
Pdestroy_agent(3PROC), Pfgrab_core(3PROC), Pfree(3PROC), Pgrab(3PROC),
Pgrab_core(3PROC), Pgrab_error(3PROC), Pgrab_file(3PROC), Pgrab_ops(3PROC),
Prelease(3PROC), Preopen(3PROC), Pxcreate(3PROC)

Paddr_to_ctf(3PROC), Paddr_to_loadobj(3PROC), Paddr_to_map(3PROC),
Paddr_to_text_map(3PROC), Pasfd(3PROC), Pclearfault(3PROC),
Pclearsig(3PROC), Pcontent(3PROC), Pcred(3PROC), Pctlfd(3PROC),
Pdelbkpt(3PROC), Pdelwapt(3PROC), Pdstop(3PROC), Pexecname(3PROC),
Pfault(3PROC), Pfgcore(3PROC), Pgcore(3PROC), Pgetareg(3PROC),
Pgetauxval(3PROC), Pgetauxvec(3PROC), Pgetenv(3PROC), Pisprocdir(3PROC),
Pissyscall_prev(3PROC), Plmid(3PROC), Plmid_to_loadobj(3PROC),
Plmid_to_map(3PROC), Plookup_by_addr(3PROC), Plookup_by_name(3PROC),
Plwp_alt_stack(3PROC), Plwp_getfpregs(3PROC), Plwp_getpsinfo(3PROC),
Plwp_getregs(3PROC), Plwp_getspymaster(3PROC), Plwp_main_stack(3PROC),
Plwp_setfpregs(3PROC), Plwp_setregs(3PROC), Plwp_stack(3PROC),
Pname_to_ctf(3PROC), Pname_to_loadobj(3PROC), Pname_to_map(3PROC),
Pobjname(3PROC), Pobjname_resolved(3PROC), Pplatform(3PROC),
Ppltdest(3PROC), Ppriv(3PROC), Ppsinfo(3PROC), Pputareg(3PROC),
Prd_agent(3PROC), Pread(3PROC), Pread_string(3PROC), Preset_maps(3PROC),
Psecflags(3PROC), Psetbkpt(3PROC), Psetcred(3PROC), Psetfault(3PROC),
Psetflags(3PROC), Psetpriv(3PROC), Psetrun(3PROC), Psetsignal(3PROC),
Psetsysentry(3PROC), Psetsysexit(3PROC), Psetwapt(3PROC),
Psetzoneid(3PROC), Psignal(3PROC), Pstate(3PROC), Pstatus(3PROC),
Pstop(3PROC), Pstopstatus(3PROC), Psync(3PROC), Psysentry(3PROC),
Psysexit(3PROC), Puname(3PROC), Pupanic(3PROC), Pupanic_free(3PROC),
Punsetflags(3PROC), Pupdate_maps(3PROC), Pupdate_syms(3PROC), Pwait(3PROC),
Pwrite(3PROC), Pxecbkpt(3PROC), Pxecwapt(3PROC), Pxlookup_by_addr(3PROC),
Pxlookup_by_addr_resolved(3PROC), Pxlookup_by_name(3PROC),
Pzonename(3PROC), Pzonepath(3PROC), Pzoneroot(3PROC)

Lalt_stack(3PROC), Lclearfault(3PROC), Lclearsig(3PROC), Lctlfd(3PROC),
Ldstop(3PROC), Lgetareg(3PROC), Lmain_stack(3PROC), Lprochandle(3PROC),
Lpsinfo(3PROC), Lputareg(3PROC), Lsetrun(3PROC), Lstack(3PROC),
Lstate(3PROC), Lstatus(3PROC), Lstop(3PROC), Lsync(3PROC), Lwait(3PROC),
Lxecbkpt(3PROC), Lxecwapt(3PROC)

pr_access(3PROC), pr_close(3PROC), pr_creat(3PROC), pr_door_info(3PROC),
pr_exit(3PROC), pr_fcntl(3PROC), pr_fstat(3PROC), pr_fstat64(3PROC),
pr_fstatvfs(3PROC), pr_getitimer(3PROC), pr_getpeername(3PROC),
pr_getpeerucred(3PROC), pr_getprojid(3PROC), pr_getrctl(3PROC),
pr_getrlimit(3PROC), pr_getrlimit64(3PROC), pr_getsockname(3PROC),
pr_getsockopt(3PROC), pr_gettaskid(3PROC), pr_getzoneid(3PROC),
pr_ioctl(3PROC), pr_link(3PROC), pr_llseek(3PROC), pr_lseek(3PROC),
pr_lstat(3PROC), pr_lstat64(3PROC), pr_memcntl(3PROC), pr_meminfo(3PROC),
pr_mmap(3PROC), pr_munmap(3PROC), pr_open(3PROC), pr_processor_bind(3PROC),
pr_rename(3PROC), pr_setitimer(3PROC), pr_setrctl(3PROC),
pr_setrlimit(3PROC), pr_setrlimit64(3PROC), pr_settaskid(3PROC),
pr_sigaction(3PROC), pr_stat(3PROC), pr_stat64(3PROC), pr_statvfs(3PROC),
pr_unlink(3PROC), pr_waitid(3PROC),

Penv_iter(3PROC), Plwp_iter(3PROC), Plwp_iter_all(3PROC),
Pmapping_iter(3PROC), Pmapping_iter_resolved(3PROC), Pobject_iter(3PROC),
Pobject_iter_resolved(3PROC), Pstack_iter(3PROC), Psymbol_iter(3PROC),
Psymbol_iter_by_addr(3PROC), Psymbol_iter_by_lmid(3PROC),
Psymbol_iter_by_name(3PROC), Pxsymbol_iter(3PROC), Pfdinfo_iter(3PROC)

Perror_printf(3PROC), proc_arg_grab(3PROC), proc_arg_psinfo(3PROC),
proc_arg_xgrab(3PROC), proc_arg_xpsinfo(3PROC), proc_content2str(3PROC),
proc_dmodelname(3PROC), proc_finistdio(3PROC), proc_fltname(3PROC),
proc_fltset2str(3PROC), proc_flushstdio(3PROC), proc_get_auxv(3PROC),
proc_get_cred(3PROC), proc_get_fdinfo(3PROC), proc_get_lwpsinfo(3PROC),
proc_get_lwpstatus(3PROC), proc_get_priv(3PROC), proc_get_psinfo(3PROC),
proc_get_status(3PROC), proc_initstdio(3PROC), proc_lwp_in_set(3PROC),
proc_lwp_range_valid(3PROC), proc_signame(3PROC), proc_sigset2str(3PROC),
proc_str2content(3PROC), proc_str2flt(3PROC), proc_str2fltset(3PROC),
proc_str2sig(3PROC), proc_str2sigset(3PROC), proc_str2sys(3PROC),
proc_str2sysset(3PROC), proc_sysname(3PROC), proc_sysset2str(3PROC),
proc_unctrl_psinfo(3PROC), proc_fdinfowalk(3PROC), proc_fdwalk(3PROC),
proc_walk(3PROC)

Pldt(3PROC), proc_get_ldt(3PROC),

Plwp_getgwindows(3PROC), Plwp_getxregs(3PROC), Plwp_setxregs(3PROC),

Plwp_getasrs(3PROC), Plwp_setasrs(3PROC)

illumos December 2, 2023 illumos