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 ****
PLWP_GETREGS(3PROC) Process Control Library Functions PLWP_GETREGS(3PROC)
NAME
! Plwp_getfpregs, Plwp_setfpregs, Plwp_getregs, Plwp_setregs - get and set
! thread registers
LIBRARY
Process Control Library (libproc, -lproc)
SYNOPSIS
--- 1,10 ----
PLWP_GETREGS(3PROC) Process Control Library Functions PLWP_GETREGS(3PROC)
NAME
! 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,32 ****
--- 23,44 ----
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,85 ****
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.
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.
ERRORS
! 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.
INTERFACE STABILITY
Uncommitted
MT-LEVEL
See LOCKING in libproc(3LIB).
SEE ALSO
libproc(3LIB), proc(5)
! illumos May 2, 2020 illumos
--- 65,115 ----
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(), 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
! 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 January 19, 2023 illumos