143051d27SRobert Mustacchi.\" 243051d27SRobert Mustacchi.\" This file and its contents are supplied under the terms of the 343051d27SRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0. 443051d27SRobert Mustacchi.\" You may only use this file in accordance with the terms of version 543051d27SRobert Mustacchi.\" 1.0 of the CDDL. 643051d27SRobert Mustacchi.\" 743051d27SRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this 843051d27SRobert Mustacchi.\" source. A copy of the CDDL is also available via the Internet at 943051d27SRobert Mustacchi.\" http://www.illumos.org/license/CDDL. 1043051d27SRobert Mustacchi.\" 1143051d27SRobert Mustacchi.\" 1243051d27SRobert Mustacchi.\" Copyright 2015 Joyent, Inc. 13*ed093b41SRobert Mustacchi.\" Copyright 2023 Oxide Computer Company 1443051d27SRobert Mustacchi.\" 15*ed093b41SRobert Mustacchi.Dd January 19, 2023 1643051d27SRobert Mustacchi.Dt PLWP_GETREGS 3PROC 1743051d27SRobert Mustacchi.Os 1843051d27SRobert Mustacchi.Sh NAME 1943051d27SRobert Mustacchi.Nm Plwp_getfpregs , 2043051d27SRobert Mustacchi.Nm Plwp_setfpregs , 2143051d27SRobert Mustacchi.Nm Plwp_getregs , 22*ed093b41SRobert Mustacchi.Nm Plwp_setregs , 23*ed093b41SRobert Mustacchi.Nm Lgetfpregs , 24*ed093b41SRobert Mustacchi.Nm Lsetfpregs , 25*ed093b41SRobert Mustacchi.Nm Lgetregs , 26*ed093b41SRobert Mustacchi.Nm Lsetregs 2743051d27SRobert Mustacchi.Nd get and set thread registers 28ab618543SJohn Levon.Sh LIBRARY 2943051d27SRobert Mustacchi.Lb libproc 30ab618543SJohn Levon.Sh SYNOPSIS 3143051d27SRobert Mustacchi.In libproc.h 3243051d27SRobert Mustacchi.Ft int 3343051d27SRobert Mustacchi.Fo Plwp_getfpregs 3443051d27SRobert Mustacchi.Fa "struct ps_prochandle *P" 3543051d27SRobert Mustacchi.Fa "lwpid_t lwpid" 3643051d27SRobert Mustacchi.Fa "prfpregset_t *fpregs" 3743051d27SRobert Mustacchi.Fc 3843051d27SRobert Mustacchi.Ft int 3943051d27SRobert Mustacchi.Fo Plwp_setfpregs 4043051d27SRobert Mustacchi.Fa "struct ps_prochandle *P" 4143051d27SRobert Mustacchi.Fa "lwpid_t lwpid" 4243051d27SRobert Mustacchi.Fa "const prfpregset_t fpregs" 4343051d27SRobert Mustacchi.Fc 4443051d27SRobert Mustacchi.Ft int 4543051d27SRobert Mustacchi.Fo Plwp_getregs 4643051d27SRobert Mustacchi.Fa "struct ps_prochandle *P" 4743051d27SRobert Mustacchi.Fa "lwpid_t lwpid" 48282d4a2dSRobert Mustacchi.Fa "prgregset_t gregs" 4943051d27SRobert Mustacchi.Fc 5043051d27SRobert Mustacchi.Ft int 5143051d27SRobert Mustacchi.Fo Plwp_setregs 5243051d27SRobert Mustacchi.Fa "struct ps_prochandle *P" 5343051d27SRobert Mustacchi.Fa "lwpid_t lwpid" 54282d4a2dSRobert Mustacchi.Fa "const prgregset_t gregs" 5543051d27SRobert Mustacchi.Fc 56*ed093b41SRobert Mustacchi.Ft int 57*ed093b41SRobert Mustacchi.Fo Lgetfpregs 58*ed093b41SRobert Mustacchi.Fa "struct ps_lwphandle *L" 59*ed093b41SRobert Mustacchi.Fa "prfpregset_t *fpregs" 60*ed093b41SRobert Mustacchi.Fc 61*ed093b41SRobert Mustacchi.Ft int 62*ed093b41SRobert Mustacchi.Fo Lsetfpregs 63*ed093b41SRobert Mustacchi.Fa "struct ps_lwphandle *L" 64*ed093b41SRobert Mustacchi.Fa "const prfpregset_t *fpregs" 65*ed093b41SRobert Mustacchi.Fc 66*ed093b41SRobert Mustacchi.Ft int 67*ed093b41SRobert Mustacchi.Fo Lgetregs 68*ed093b41SRobert Mustacchi.Fa "struct ps_lwphandle *L" 69*ed093b41SRobert Mustacchi.Fa "prgregset_t gregs" 70*ed093b41SRobert Mustacchi.Fc 71*ed093b41SRobert Mustacchi.Ft int 72*ed093b41SRobert Mustacchi.Fo Lsetregs 73*ed093b41SRobert Mustacchi.Fa "struct ps_lwphandle *L" 74*ed093b41SRobert Mustacchi.Fa "const prgregset_t gregs" 75*ed093b41SRobert Mustacchi.Fc 7643051d27SRobert Mustacchi.Sh DESCRIPTION 7743051d27SRobert MustacchiThe 7843051d27SRobert Mustacchi.Fn Plwp_getregs , 7943051d27SRobert Mustacchi.Fn Plwp_setregs , 8043051d27SRobert Mustacchi.Fn Plwp_getfpregs , 8143051d27SRobert Mustacchiand 8243051d27SRobert Mustacchi.Fn Plwp_setfpregs 8343051d27SRobert Mustacchifunctions allow one to get and set the general purpose and floating 8443051d27SRobert Mustacchipoint registers from the thread 8543051d27SRobert Mustacchi.Fa lwpid 8643051d27SRobert Mustacchiin the process handle 8743051d27SRobert Mustacchi.Fa P . 8843051d27SRobert Mustacchi.Pp 8943051d27SRobert MustacchiThe 9043051d27SRobert Mustacchi.Fn Plwp_getfpregs 9143051d27SRobert Mustacchifunction updates the structure pointed to by 9243051d27SRobert Mustacchi.Fa fpregs 9343051d27SRobert Mustacchiwith the state and values of the floating point registers of the thread 9443051d27SRobert Mustacchispecified by 9543051d27SRobert Mustacchi.Fa lwpid . 9643051d27SRobert Mustacchi.Pp 9743051d27SRobert MustacchiThe 9843051d27SRobert Mustacchi.Fn Plwp_setfpregs 9943051d27SRobert Mustacchifunction updates the floating point registers of the thread specified by 10043051d27SRobert Mustacchi.Fa lwpid 10143051d27SRobert Mustacchito the register state contained in 10243051d27SRobert Mustacchi.Fa fpregs . 10343051d27SRobert Mustacchi.Pp 10443051d27SRobert MustacchiThe 10543051d27SRobert Mustacchi.Fn Plwp_getregs 10643051d27SRobert Mustacchifunction updates the structure pointed to by 10743051d27SRobert Mustacchi.Fa gregs 10843051d27SRobert Mustacchiwith the state and values of the general purpose registers of the thread 10943051d27SRobert Mustacchispecified by 11043051d27SRobert Mustacchi.Fa lwpid. 11143051d27SRobert Mustacchi.Pp 11243051d27SRobert MustacchiThe 11343051d27SRobert Mustacchi.Fn Plwp_setregs 11443051d27SRobert Mustacchifunction updates the general purpose registers of the thread specified 11543051d27SRobert Mustacchiby 11643051d27SRobert Mustacchi.Fa lwpid 11743051d27SRobert Mustacchito the register state contained in 11843051d27SRobert Mustacchi.Fa gregs . 11943051d27SRobert Mustacchi.Pp 12043051d27SRobert MustacchiProcesses must be stopped before obtaining the register state of 12172d3dbb9SYuri Pankovindividual threads. 12272d3dbb9SYuri PankovProcesses may be stopped with 12343051d27SRobert Mustacchi.Xr Pstop 3PROC . 12443051d27SRobert MustacchiThe structures used for registers are described in 125bbf21555SRichard Lowe.Xr proc 5 126282d4a2dSRobert Mustacchiand their definitions may be found in 127282d4a2dSRobert Mustacchi.In procfs.h . 12843051d27SRobert MustacchiThe definitions of these structures varies based on the architecture of 12943051d27SRobert Mustacchithe system and the running process. 13043051d27SRobert Mustacchi.Pp 13143051d27SRobert MustacchiOne may not set the register values of a process that is not an active 13243051d27SRobert Mustacchiprocess, e.g. a process handle that refers to a file or a core file. 133*ed093b41SRobert Mustacchi.Pp 134*ed093b41SRobert MustacchiThe 135*ed093b41SRobert Mustacchi.Fn Lgetfpregs , 136*ed093b41SRobert Mustacchi.Fn Lsetfpregs , 137*ed093b41SRobert Mustacchi.Fn Lgetregs , 138*ed093b41SRobert Mustacchiand 139*ed093b41SRobert Mustacchi.Fn Lsetregs 140*ed093b41SRobert Mustacchifunctions behave in a same way as the corresponding process-handle 141*ed093b41SRobert Mustacchispecific functions, with the following differences: 142*ed093b41SRobert Mustacchi.Bl -dash 143*ed093b41SRobert Mustacchi.It 144*ed093b41SRobert MustacchiRather than take a specified thread id via 145*ed093b41SRobert Mustacchi.Fa lwpid , 146*ed093b41SRobert Mustacchithey operate on the thread that the thread-handle, 147*ed093b41SRobert Mustacchi.Fa L , 148*ed093b41SRobert Mustacchirefers to. 149*ed093b41SRobert Mustacchi.It 150*ed093b41SRobert MustacchiThe process-handle functions will require that the entire process is 151*ed093b41SRobert Mustacchistopped before performing a set operation. 152*ed093b41SRobert MustacchiIn these cases, only the specific thread identified by the handle 153*ed093b41SRobert Mustacchi.Fa L 154*ed093b41SRobert Mustacchimust be stopped through a call to 155*ed093b41SRobert Mustacchi.Xr Lstop 3PROC 156*ed093b41SRobert Mustacchior similar. 157*ed093b41SRobert MustacchiNote, a suspended thread 158*ed093b41SRobert Mustacchi.Po 159*ed093b41SRobert Mustacchi.Xr thr_suspend 3C 160*ed093b41SRobert Mustacchi.Pc 161*ed093b41SRobert Mustacchiis not considered stopped for these purposes. 162*ed093b41SRobert Mustacchi.El 16343051d27SRobert Mustacchi.Sh RETURN VALUES 16443051d27SRobert MustacchiUpon successful completion, the 16543051d27SRobert Mustacchi.Fn Plwp_getregs , 16643051d27SRobert Mustacchi.Fn Plwp_setregs , 16743051d27SRobert Mustacchi.Fn Plwp_getfpregs , 168*ed093b41SRobert Mustacchi.Fn Plwp_setfpregs , 169*ed093b41SRobert Mustacchi.Fn Lgetfpregs , 170*ed093b41SRobert Mustacchi.Fn Lsetfpregs , 171*ed093b41SRobert Mustacchi.Fn Lgetregs , 17243051d27SRobert Mustacchiand 173*ed093b41SRobert Mustacchi.Fn Lsetregs 17443051d27SRobert Mustacchifunctions return 17543051d27SRobert Mustacchi.Sy 0 17672d3dbb9SYuri Pankovand obtain or set the register state. 17772d3dbb9SYuri PankovOtherwise, 17843051d27SRobert Mustacchi.Sy -1 17943051d27SRobert Mustacchiis returned, 180*ed093b41SRobert Mustacchi.Va errno 18143051d27SRobert Mustacchiis set to indicate the error, and the register state is not updated nor 18243051d27SRobert Mustacchiare the data pointers changed. 18343051d27SRobert Mustacchi.Sh ERRORS 184*ed093b41SRobert MustacchiThe implementations of these functions may use standard system and 185*ed093b41SRobert Mustacchilibrary calls that can fail. 18643051d27SRobert MustacchiFor a full list of possible errors also see the 18743051d27SRobert Mustacchi.Sy DIAGNOSTICS 18843051d27SRobert Mustacchisection in 189bbf21555SRichard Lowe.Xr proc 5 . 19043051d27SRobert Mustacchi.Pp 19143051d27SRobert MustacchiThe 19243051d27SRobert Mustacchi.Fn Plwp_getregs , 19343051d27SRobert Mustacchi.Fn Plwp_setregs , 19443051d27SRobert Mustacchi.Fn Plwp_getfpregs , 19543051d27SRobert Mustacchiand 19643051d27SRobert Mustacchi.Fn Plwp_setfpregs 19743051d27SRobert Mustacchiwill fail if: 19843051d27SRobert Mustacchi.Bl -tag -width Er 19943051d27SRobert Mustacchi.It Er EBUSY 20043051d27SRobert MustacchiThe process handle 20143051d27SRobert Mustacchi.Fa P 20243051d27SRobert Mustacchiis not currently stopped. 20343051d27SRobert Mustacchi.It Er ENOENT 20443051d27SRobert MustacchiThere is no thread in 20543051d27SRobert Mustacchi.Fa P 20643051d27SRobert Mustacchiwith id 20743051d27SRobert Mustacchi.Fa lwpid . 20843051d27SRobert Mustacchi.El 209*ed093b41SRobert MustacchiThe 210*ed093b41SRobert Mustacchi.Fn Lgetfpregs , 211*ed093b41SRobert Mustacchi.Fn Lsetfpregs , 212*ed093b41SRobert Mustacchi.Fn Lgetregs , 213*ed093b41SRobert Mustacchiand 214*ed093b41SRobert Mustacchi.Fn Lsetregs 215*ed093b41SRobert Mustacchiwill fail if: 216*ed093b41SRobert Mustacchi.Bl -tag -width Er 217*ed093b41SRobert Mustacchi.It Er EBUSY 218*ed093b41SRobert MustacchiThe thread handle 219*ed093b41SRobert Mustacchi.Fa L 220*ed093b41SRobert Mustacchiis not currently stopped. 221*ed093b41SRobert Mustacchi.El 22243051d27SRobert Mustacchi.Sh INTERFACE STABILITY 22343051d27SRobert Mustacchi.Sy Uncommitted 22443051d27SRobert Mustacchi.Sh MT-LEVEL 22543051d27SRobert MustacchiSee 22643051d27SRobert Mustacchi.Sy LOCKING 22743051d27SRobert Mustacchiin 22843051d27SRobert Mustacchi.Xr libproc 3LIB . 22943051d27SRobert Mustacchi.Sh SEE ALSO 23043051d27SRobert Mustacchi.Xr libproc 3LIB , 231bbf21555SRichard Lowe.Xr proc 5 232