Print this page
15254 %ymm registers not restored after signal handler
15367 x86 getfpregs() summons corrupting %xmm ghosts
15333 want x86 /proc xregs support (libc_db, libproc, mdb, etc.)
15336 want libc functions for extended ucontext_t
15334 want ps_lwphandle-specific reg routines
15328 FPU_CW_INIT mistreats reserved bit
15335 i86pc fpu_subr.c isn't really platform-specific
15332 setcontext(2) isn't actually noreturn
15331 need <sys/stdalign.h>
Change-Id: I7060aa86042dfb989f77fc3323c065ea2eafa9ad
Conflicts:
    usr/src/uts/common/fs/proc/prcontrol.c
    usr/src/uts/intel/os/archdep.c
    usr/src/uts/intel/sys/ucontext.h
    usr/src/uts/intel/syscall/getcontext.c
        
@@ -8,19 +8,24 @@
 .\" source.  A copy of the CDDL is also available via the Internet at
 .\" http://www.illumos.org/license/CDDL.
 .\"
 .\"
 .\" Copyright 2015 Joyent, Inc.
+.\" Copyright 2023 Oxide Computer Company
 .\"
-.Dd May 02, 2020
+.Dd January 19, 2023
 .Dt PLWP_GETREGS 3PROC
 .Os
 .Sh NAME
 .Nm Plwp_getfpregs ,
 .Nm Plwp_setfpregs ,
 .Nm Plwp_getregs ,
-.Nm Plwp_setregs
+.Nm Plwp_setregs ,
+.Nm Lgetfpregs ,
+.Nm Lsetfpregs ,
+.Nm Lgetregs ,
+.Nm Lsetregs
 .Nd get and set thread registers
 .Sh LIBRARY
 .Lb libproc
 .Sh SYNOPSIS
 .In libproc.h
@@ -46,10 +51,30 @@
 .Fo Plwp_setregs
 .Fa "struct ps_prochandle *P"
 .Fa "lwpid_t lwpid"
 .Fa "const prgregset_t gregs"
 .Fc
+.Ft int
+.Fo Lgetfpregs
+.Fa "struct ps_lwphandle *L"
+.Fa "prfpregset_t *fpregs"
+.Fc
+.Ft int
+.Fo Lsetfpregs
+.Fa "struct ps_lwphandle *L"
+.Fa "const prfpregset_t *fpregs"
+.Fc
+.Ft int
+.Fo Lgetregs
+.Fa "struct ps_lwphandle *L"
+.Fa "prgregset_t gregs"
+.Fc
+.Ft int
+.Fo Lsetregs
+.Fa "struct ps_lwphandle *L"
+.Fa "const prgregset_t gregs"
+.Fc
 .Sh DESCRIPTION
 The
 .Fn Plwp_getregs ,
 .Fn Plwp_setregs ,
 .Fn Plwp_getfpregs ,
@@ -103,27 +128,63 @@
 The definitions of these structures varies based on the architecture of
 the system and the running process.
 .Pp
 One may not set the register values of a process that is not an active
 process, e.g. a process handle that refers to a file or a core file.
+.Pp
+The
+.Fn Lgetfpregs ,
+.Fn Lsetfpregs ,
+.Fn Lgetregs ,
+and
+.Fn Lsetregs
+functions behave in a same way as the corresponding process-handle
+specific functions, with the following differences:
+.Bl -dash
+.It
+Rather than take a specified thread id via
+.Fa lwpid ,
+they operate on the thread that the thread-handle,
+.Fa L ,
+refers to.
+.It
+The process-handle functions will require that the entire process is
+stopped before performing a set operation.
+In these cases, only the specific thread identified by the handle
+.Fa L
+must be stopped through a call to
+.Xr Lstop 3PROC
+or similar.
+Note, a suspended thread
+.Po
+.Xr thr_suspend 3C
+.Pc
+is not considered stopped for these purposes.
+.El
 .Sh RETURN VALUES
 Upon successful completion, the
 .Fn Plwp_getregs ,
 .Fn Plwp_setregs ,
 .Fn Plwp_getfpregs ,
+.Fn Plwp_setfpregs ,
+.Fn Lgetfpregs ,
+.Fn Lsetfpregs ,
+.Fn Lgetregs ,
 and
-.Fn Plwp_setfpregs
+.Fn Lsetregs
 functions return
 .Sy 0
 and obtain or set the register state.
 Otherwise,
 .Sy -1
 is returned,
-.Sy errno
+.Va errno
 is set to indicate the error, and the register state is not updated nor
 are the data pointers changed.
 .Sh ERRORS
+The implementations of these functions may use standard system and
+library calls that can fail.
 For a full list of possible errors also see the
 .Sy DIAGNOSTICS
 section in
 .Xr proc 5 .
 .Pp
@@ -143,10 +204,23 @@
 There is no thread in
 .Fa P
 with id
 .Fa lwpid .
 .El
+The
+.Fn Lgetfpregs ,
+.Fn Lsetfpregs ,
+.Fn Lgetregs ,
+and
+.Fn Lsetregs
+will fail if:
+.Bl -tag -width Er
+.It Er EBUSY
+The thread handle
+.Fa L
+is not currently stopped.
+.El
 .Sh INTERFACE STABILITY
 .Sy Uncommitted
 .Sh MT-LEVEL
 See
 .Sy LOCKING