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