12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22 /*
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 *
26 * Portions Copyright 2007 Chad Mynhier
27 * Copyright 2012 DEY Storage Systems, Inc. All rights reserved.
28 * Copyright 2019 Joyent, Inc.
29 * Copyright (c) 2013 by Delphix. All rights reserved.
30 * Copyright 2019, Carlos Neira <cneirabustos@gmail.com>
31 * Copyright 2020 OmniOS Community Edition (OmniOSce) Association.
32 */
33
34 /*
35 * Interfaces available from the process control library, libproc.
36 */
37
38 #ifndef _LIBPROC_H
39 #define _LIBPROC_H
40
41 #include <stdlib.h>
42 #include <unistd.h>
43 #include <fcntl.h>
44 #include <nlist.h>
45 #include <door.h>
46 #include <gelf.h>
47 #include <proc_service.h>
48 #include <rtld_db.h>
49 #include <procfs.h>
50 #include <ucred.h>
51 #include <rctl.h>
316 extern int Lctlfd(struct ps_lwphandle *);
317 extern int Lwait(struct ps_lwphandle *, uint_t);
318 extern int Lstop(struct ps_lwphandle *, uint_t);
319 extern int Ldstop(struct ps_lwphandle *);
320 extern int Lstate(struct ps_lwphandle *);
321 extern const lwpsinfo_t *Lpsinfo(struct ps_lwphandle *);
322 extern const lwpstatus_t *Lstatus(struct ps_lwphandle *);
323 extern int Lgetareg(struct ps_lwphandle *, int, prgreg_t *);
324 extern int Lputareg(struct ps_lwphandle *, int, prgreg_t);
325 extern int Lsetrun(struct ps_lwphandle *, int, int);
326 extern int Lclearsig(struct ps_lwphandle *);
327 extern int Lclearfault(struct ps_lwphandle *);
328 extern int Lxecbkpt(struct ps_lwphandle *, ulong_t);
329 extern int Lxecwapt(struct ps_lwphandle *, const prwatch_t *);
330 extern void Lsync(struct ps_lwphandle *);
331
332 extern int Lstack(struct ps_lwphandle *, stack_t *);
333 extern int Lmain_stack(struct ps_lwphandle *, stack_t *);
334 extern int Lalt_stack(struct ps_lwphandle *, stack_t *);
335
336 /*
337 * Function prototypes for system calls forced on the victim process.
338 */
339 extern int pr_open(struct ps_prochandle *, const char *, int, mode_t);
340 extern int pr_creat(struct ps_prochandle *, const char *, mode_t);
341 extern int pr_close(struct ps_prochandle *, int);
342 extern int pr_access(struct ps_prochandle *, const char *, int);
343 extern int pr_door_info(struct ps_prochandle *, int, struct door_info *);
344 extern void *pr_mmap(struct ps_prochandle *,
345 void *, size_t, int, int, int, off_t);
346 extern void *pr_zmap(struct ps_prochandle *,
347 void *, size_t, int, int);
348 extern int pr_munmap(struct ps_prochandle *, void *, size_t);
349 extern int pr_memcntl(struct ps_prochandle *,
350 caddr_t, size_t, int, caddr_t, int, int);
351 extern int pr_meminfo(struct ps_prochandle *, const uint64_t *addrs,
352 int addr_count, const uint_t *info, int info_count,
353 uint64_t *outdata, uint_t *validity);
354 extern int pr_sigaction(struct ps_prochandle *,
355 int, const struct sigaction *, struct sigaction *);
402 extern int pr_getpeerucred(struct ps_prochandle *, int, ucred_t **);
403 extern int pr_getpeername(struct ps_prochandle *,
404 int, struct sockaddr *, socklen_t *);
405 extern int pr_getsockname(struct ps_prochandle *,
406 int, struct sockaddr *, socklen_t *);
407 extern int pr_getsockopt(struct ps_prochandle *,
408 int, int, int, void *, int *);
409 extern int pr_processor_bind(struct ps_prochandle *,
410 idtype_t, id_t, int, int *);
411
412 /*
413 * Function prototypes for accessing per-LWP register information.
414 */
415 extern int Plwp_getregs(struct ps_prochandle *, lwpid_t, prgregset_t);
416 extern int Plwp_setregs(struct ps_prochandle *, lwpid_t, const prgregset_t);
417
418 extern int Plwp_getfpregs(struct ps_prochandle *, lwpid_t, prfpregset_t *);
419 extern int Plwp_setfpregs(struct ps_prochandle *, lwpid_t,
420 const prfpregset_t *);
421
422 #if defined(__sparc)
423
424 extern int Plwp_getxregs(struct ps_prochandle *, lwpid_t, prxregset_t *);
425 extern int Plwp_setxregs(struct ps_prochandle *, lwpid_t, const prxregset_t *);
426
427 extern int Plwp_getgwindows(struct ps_prochandle *, lwpid_t, gwindows_t *);
428
429 #if defined(__sparcv9)
430 extern int Plwp_getasrs(struct ps_prochandle *, lwpid_t, asrset_t);
431 extern int Plwp_setasrs(struct ps_prochandle *, lwpid_t, const asrset_t);
432 #endif /* __sparcv9 */
433
434 #endif /* __sparc */
435
436 #if defined(__i386) || defined(__amd64)
437 extern int Pldt(struct ps_prochandle *, struct ssd *, int);
438 extern int proc_get_ldt(pid_t, struct ssd *, int);
439 #endif /* __i386 || __amd64 */
440
441 extern int Plwp_getname(struct ps_prochandle *, lwpid_t, char *, size_t);
442 extern int Plwp_getpsinfo(struct ps_prochandle *, lwpid_t, lwpsinfo_t *);
443 extern int Plwp_getspymaster(struct ps_prochandle *, lwpid_t, psinfo_t *);
444
445 extern int Plwp_stack(struct ps_prochandle *, lwpid_t, stack_t *);
446 extern int Plwp_main_stack(struct ps_prochandle *, lwpid_t, stack_t *);
|
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22 /*
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 *
26 * Portions Copyright 2007 Chad Mynhier
27 * Copyright 2012 DEY Storage Systems, Inc. All rights reserved.
28 * Copyright 2019 Joyent, Inc.
29 * Copyright (c) 2013 by Delphix. All rights reserved.
30 * Copyright 2019, Carlos Neira <cneirabustos@gmail.com>
31 * Copyright 2020 OmniOS Community Edition (OmniOSce) Association.
32 * Copyright 2023 Oxide Computer Company
33 */
34
35 /*
36 * Interfaces available from the process control library, libproc.
37 */
38
39 #ifndef _LIBPROC_H
40 #define _LIBPROC_H
41
42 #include <stdlib.h>
43 #include <unistd.h>
44 #include <fcntl.h>
45 #include <nlist.h>
46 #include <door.h>
47 #include <gelf.h>
48 #include <proc_service.h>
49 #include <rtld_db.h>
50 #include <procfs.h>
51 #include <ucred.h>
52 #include <rctl.h>
317 extern int Lctlfd(struct ps_lwphandle *);
318 extern int Lwait(struct ps_lwphandle *, uint_t);
319 extern int Lstop(struct ps_lwphandle *, uint_t);
320 extern int Ldstop(struct ps_lwphandle *);
321 extern int Lstate(struct ps_lwphandle *);
322 extern const lwpsinfo_t *Lpsinfo(struct ps_lwphandle *);
323 extern const lwpstatus_t *Lstatus(struct ps_lwphandle *);
324 extern int Lgetareg(struct ps_lwphandle *, int, prgreg_t *);
325 extern int Lputareg(struct ps_lwphandle *, int, prgreg_t);
326 extern int Lsetrun(struct ps_lwphandle *, int, int);
327 extern int Lclearsig(struct ps_lwphandle *);
328 extern int Lclearfault(struct ps_lwphandle *);
329 extern int Lxecbkpt(struct ps_lwphandle *, ulong_t);
330 extern int Lxecwapt(struct ps_lwphandle *, const prwatch_t *);
331 extern void Lsync(struct ps_lwphandle *);
332
333 extern int Lstack(struct ps_lwphandle *, stack_t *);
334 extern int Lmain_stack(struct ps_lwphandle *, stack_t *);
335 extern int Lalt_stack(struct ps_lwphandle *, stack_t *);
336
337 extern int Lgetregs(struct ps_lwphandle *, prgregset_t *);
338 extern int Lsetregs(struct ps_lwphandle *, const prgregset_t *);
339 extern int Lgetfpregs(struct ps_lwphandle *, prfpregset_t *);
340 extern int Lsetfpregs(struct ps_lwphandle *, const prfpregset_t *);
341 extern int Lgetxregs(struct ps_lwphandle *, prxregset_t **, size_t *);
342 extern int Lsetxregs(struct ps_lwphandle *, const prxregset_t *, size_t);
343
344 /*
345 * Function prototypes for system calls forced on the victim process.
346 */
347 extern int pr_open(struct ps_prochandle *, const char *, int, mode_t);
348 extern int pr_creat(struct ps_prochandle *, const char *, mode_t);
349 extern int pr_close(struct ps_prochandle *, int);
350 extern int pr_access(struct ps_prochandle *, const char *, int);
351 extern int pr_door_info(struct ps_prochandle *, int, struct door_info *);
352 extern void *pr_mmap(struct ps_prochandle *,
353 void *, size_t, int, int, int, off_t);
354 extern void *pr_zmap(struct ps_prochandle *,
355 void *, size_t, int, int);
356 extern int pr_munmap(struct ps_prochandle *, void *, size_t);
357 extern int pr_memcntl(struct ps_prochandle *,
358 caddr_t, size_t, int, caddr_t, int, int);
359 extern int pr_meminfo(struct ps_prochandle *, const uint64_t *addrs,
360 int addr_count, const uint_t *info, int info_count,
361 uint64_t *outdata, uint_t *validity);
362 extern int pr_sigaction(struct ps_prochandle *,
363 int, const struct sigaction *, struct sigaction *);
410 extern int pr_getpeerucred(struct ps_prochandle *, int, ucred_t **);
411 extern int pr_getpeername(struct ps_prochandle *,
412 int, struct sockaddr *, socklen_t *);
413 extern int pr_getsockname(struct ps_prochandle *,
414 int, struct sockaddr *, socklen_t *);
415 extern int pr_getsockopt(struct ps_prochandle *,
416 int, int, int, void *, int *);
417 extern int pr_processor_bind(struct ps_prochandle *,
418 idtype_t, id_t, int, int *);
419
420 /*
421 * Function prototypes for accessing per-LWP register information.
422 */
423 extern int Plwp_getregs(struct ps_prochandle *, lwpid_t, prgregset_t);
424 extern int Plwp_setregs(struct ps_prochandle *, lwpid_t, const prgregset_t);
425
426 extern int Plwp_getfpregs(struct ps_prochandle *, lwpid_t, prfpregset_t *);
427 extern int Plwp_setfpregs(struct ps_prochandle *, lwpid_t,
428 const prfpregset_t *);
429
430 extern int Plwp_getxregs(struct ps_prochandle *, lwpid_t, prxregset_t **,
431 size_t *);
432 extern void Plwp_freexregs(struct ps_prochandle *, prxregset_t *, size_t);
433 extern int Plwp_setxregs(struct ps_prochandle *, lwpid_t, const prxregset_t *,
434 size_t);
435
436 #if defined(__sparc)
437 extern int Plwp_getgwindows(struct ps_prochandle *, lwpid_t, gwindows_t *);
438
439 #if defined(__sparcv9)
440 extern int Plwp_getasrs(struct ps_prochandle *, lwpid_t, asrset_t);
441 extern int Plwp_setasrs(struct ps_prochandle *, lwpid_t, const asrset_t);
442 #endif /* __sparcv9 */
443
444 #endif /* __sparc */
445
446 #if defined(__i386) || defined(__amd64)
447 extern int Pldt(struct ps_prochandle *, struct ssd *, int);
448 extern int proc_get_ldt(pid_t, struct ssd *, int);
449 #endif /* __i386 || __amd64 */
450
451 extern int Plwp_getname(struct ps_prochandle *, lwpid_t, char *, size_t);
452 extern int Plwp_getpsinfo(struct ps_prochandle *, lwpid_t, lwpsinfo_t *);
453 extern int Plwp_getspymaster(struct ps_prochandle *, lwpid_t, psinfo_t *);
454
455 extern int Plwp_stack(struct ps_prochandle *, lwpid_t, stack_t *);
456 extern int Plwp_main_stack(struct ps_prochandle *, lwpid_t, stack_t *);
|