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
        
@@ -1,10 +1,10 @@
 PLWP_GETREGS(3PROC)    Process Control Library Functions   PLWP_GETREGS(3PROC)
 
 NAME
-     Plwp_getfpregs, Plwp_setfpregs, Plwp_getregs, Plwp_setregs - get and set
-     thread registers
+     Plwp_getfpregs, Plwp_setfpregs, Plwp_getregs, Plwp_setregs, Lgetfpregs,
+     Lsetfpregs, Lgetregs, Lsetregs - get and set thread registers
 
 LIBRARY
      Process Control Library (libproc, -lproc)
 
 SYNOPSIS
@@ -23,10 +23,22 @@
 
      int
      Plwp_setregs(struct ps_prochandle *P, lwpid_t lwpid,
          const prgregset_t gregs);
 
+     int
+     Lgetfpregs(struct ps_lwphandle *L, prfpregset_t *fpregs);
+
+     int
+     Lsetfpregs(struct ps_lwphandle *L, const prfpregset_t *fpregs);
+
+     int
+     Lgetregs(struct ps_lwphandle *L, prgregset_t gregs);
+
+     int
+     Lsetregs(struct ps_lwphandle *L, const prgregset_t gregs);
+
 DESCRIPTION
      The Plwp_getregs(), Plwp_setregs(), Plwp_getfpregs(), and
      Plwp_setfpregs() functions allow one to get and set the general purpose
      and floating point registers from the thread lwpid in the process handle
      P.
@@ -53,33 +65,51 @@
      process.
 
      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.
 
+     The Lgetfpregs(), Lsetfpregs(), Lgetregs(), and Lsetregs() functions
+     behave in a same way as the corresponding process-handle specific
+     functions, with the following differences:
+
+     -   Rather than take a specified thread id via lwpid, they operate on the
+         thread that the thread-handle, L, refers to.
+
+     -   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 L must be stopped through a
+         call to Lstop(3PROC) or similar.  Note, a suspended thread
+         (thr_suspend(3C)) is not considered stopped for these purposes.
+
 RETURN VALUES
      Upon successful completion, the Plwp_getregs(), Plwp_setregs(),
-     Plwp_getfpregs(), and Plwp_setfpregs() functions return 0 and obtain or
-     set the register state.  Otherwise, -1 is returned, errno is set to
-     indicate the error, and the register state is not updated nor are the
-     data pointers changed.
+     Plwp_getfpregs(), Plwp_setfpregs(), Lgetfpregs(), Lsetfpregs(),
+     Lgetregs(), and Lsetregs() functions return 0 and obtain or set the
+     register state.  Otherwise, -1 is returned, errno is set to indicate the
+     error, and the register state is not updated nor are the data pointers
+     changed.
 
 ERRORS
-     For a full list of possible errors also see the DIAGNOSTICS section in
-     proc(5).
+     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 DIAGNOSTICS section in proc(5).
 
      The Plwp_getregs(), Plwp_setregs(), Plwp_getfpregs(), and
      Plwp_setfpregs() will fail if:
 
      EBUSY              The process handle P is not currently stopped.
 
      ENOENT             There is no thread in P with id lwpid.
+     The Lgetfpregs(), Lsetfpregs(), Lgetregs(), and Lsetregs() will fail if:
 
+     EBUSY              The thread handle L is not currently stopped.
+
 INTERFACE STABILITY
      Uncommitted
 
 MT-LEVEL
      See LOCKING in libproc(3LIB).
 
 SEE ALSO
      libproc(3LIB), proc(5)
 
-illumos                           May 2, 2020                          illumos
+illumos                        January 19, 2023                        illumos