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,41 **** .\" source. A copy of the CDDL is also available via the Internet at .\" http://www.illumos.org/license/CDDL. .\" .\" .\" Copyright 2015 Joyent, Inc. .\" ! .Dd May 11, 2016 .Dt PLWP_GETXREGS 3PROC .Os .Sh NAME .Nm Plwp_getxregs , ! .Nm Plwp_setxregs .Nd get and set extended register state .Sh LIBRARY .Lb libproc .Sh SYNOPSIS .In libproc.h .Ft int .Fo Plwp_getxregs .Fa "struct ps_prochandle *P" .Fa "lwpid_t lwpid" .Fa "prxregset_t *xregs" .Fc .Ft int .Fo Plwp_setxregs .Fa "struct ps_prochandle *P" .Fa "lwpid_t lwpid" .Fa "const prxregset_t *xregs" .Fc .Sh DESCRIPTION The .Fn Plwp_getxregs and .Fn Plwp_setxregs --- 8,64 ---- .\" 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 January 19, 2023 .Dt PLWP_GETXREGS 3PROC .Os .Sh NAME .Nm Plwp_getxregs , ! .Nm Plwp_freexregs , ! .Nm Plwp_setxregs , ! .Nm Lgetxregs , ! .Nm Lsetxregs .Nd get and set extended register state .Sh LIBRARY .Lb libproc .Sh SYNOPSIS .In libproc.h .Ft int .Fo Plwp_getxregs .Fa "struct ps_prochandle *P" .Fa "lwpid_t lwpid" + .Fa "prxregset_t **xregsp" + .Fa "size_t *sizep" + .Fc + .Ft int + .Fo Plwp_freexregs + .Fa "struct ps_prochandle *P" + .Fa "lwpid_t lwpid" .Fa "prxregset_t *xregs" + .Fa "size_t size" .Fc .Ft int .Fo Plwp_setxregs .Fa "struct ps_prochandle *P" .Fa "lwpid_t lwpid" .Fa "const prxregset_t *xregs" .Fc + .Ft int + .Fo Lgetxregs + .Fa "struct ps_lwphandle *L" + .Fa "prxregset_t **xregsp" + .Fa "size_t *sizep" + .Fc + .Ft int + .Fo Lsetxregs + .Fa "struct ps_lwphandle *L" + .Fa "const prxregset_t *xregs" + .Fc .Sh DESCRIPTION The .Fn Plwp_getxregs and .Fn Plwp_setxregs
*** 44,64 **** in the process handle .Fa P . .Pp The extended register state is defined by the architecture. These registers may refer to optional registers that have become common on the ! platform, but are not part of the standard ABI and thus not covered by functions such as .Xr Plwp_getregs 3PROC and .Xr Plwp_getfpregs 3PROC . .Pp The .Fn Plwp_getxregs ! function gets the extended register state information and places it into ! .Fa xregs . ! Where as the .Fn Plwp_setxregs function sets the extended register state information in .Fa xregs for the process handle .Fa P . --- 67,115 ---- in the process handle .Fa P . .Pp The extended register state is defined by the architecture. These registers may refer to optional registers that have become common on the ! platform, but are not part of the traditional ABI and thus not covered by functions such as .Xr Plwp_getregs 3PROC and .Xr Plwp_getfpregs 3PROC . + Support for the extended registers varies based on the architecture and + varies based on the specific system. + For example, on x86 based CPUs the xregs functionality requires the x86 + xsave functionality to be supported. .Pp The .Fn Plwp_getxregs ! function gets the extended register state information, allocates the ! appropriate sized buffer for it, and places a pointer to that buffer ! into ! .Fa xregs ! and updates ! .Fa sizep ! to indicate the size of the allocated structure. ! Due to the fact that hardware has varying sized extended register sets, ! the exact size of the structure can vary between different running ! systems and core files. ! It is also possible that some processor extensions are enabled at ! process runtime, leading for this to further be different between ! different processes on the same system. ! As such, all of the different platform instantiations of the ! .Vt prxregset_t ! end up generally being opaque structures that can be cast to something ! more specific that also includes its size. ! .Pp ! The obtained ! .Vt prxregset_t ! in ! .Fa xregsp ! must be freed by the caller with the ! .Fn Plwp_freexregs ! function. ! .Pp ! The .Fn Plwp_setxregs function sets the extended register state information in .Fa xregs for the process handle .Fa P .
*** 73,82 **** --- 124,151 ---- structure is described in .Xr proc 5 . .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 Lgetxregs + and + .Fn Lsetxregs + functions are equivalent to the + .Fn Plwp_getxregs + and + .Fn Plwp_setxregs + functions except that they operate on a specific thread identified by + the handle + .Fa L + and only require that the thread in question be stopped. + Data allocated with the + .Fn Lgetxregs + functions should be freed with the + .Fn Plwp_freexregs + function. .Sh RETURN VALUES Upon successful completion, the .Fn Plwp_getxregs and .Fn Plwp_setxregs
*** 102,134 **** .Bl -tag -width Er .It Er ENODATA The process handle .Fa P does not have any extended register state information. .It Er EBUSY The process handle .Fa P refers to a live process and it is not stopped. .It Er ENOENT ! The process handle ! .Fa P ! refers to a live process and there is no thread with id ! .Fa lwpid . ! .It Er EINVAL ! The process handle ! .Fa P ! refers to a core file and there is no thread with id ! .Fa lwpid . .El - .Sh ARCHITECTURE The ! .Fn Plwp_getxregs and ! .Fn Plwp_setxregs ! functions are only available on ! .Sy SPARC ! platforms. .Sh INTERFACE STABILITY .Sy Uncommitted .Sh MT-LEVEL See .Sy LOCKING --- 171,207 ---- .Bl -tag -width Er .It Er ENODATA The process handle .Fa P does not have any extended register state information. + This generally happens because the platform does not support it. .It Er EBUSY The process handle .Fa P refers to a live process and it is not stopped. .It Er ENOENT ! There is no thread with id ! .Fa lwpid ! in the process handle ! .Fa P . .El The ! .Fn Lgetxregs and ! .Fn Lsetxregs ! function will fail if: ! .Bl -tag -width Er ! .It Er ENODATA ! The thread handle ! .Fa L ! does not have any extended register state information. ! This generally happens because the platform does not support it. ! .It Er EBUSY ! The thread handle ! .Fa L ! refers to a live process and the thread is not stopped. ! .El .Sh INTERFACE STABILITY .Sy Uncommitted .Sh MT-LEVEL See .Sy LOCKING