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

@@ -27,10 +27,11 @@
  * Copyright 2012 DEY Storage Systems, Inc.  All rights reserved.
  * Copyright 2019 Joyent, Inc.
  * Copyright (c) 2013 by Delphix. All rights reserved.
  * Copyright 2019, Carlos Neira <cneirabustos@gmail.com>
  * Copyright 2020 OmniOS Community Edition (OmniOSce) Association.
+ * Copyright 2023 Oxide Computer Company
  */
 
 /*
  * Interfaces available from the process control library, libproc.
  */

@@ -331,10 +332,17 @@
 
 extern  int     Lstack(struct ps_lwphandle *, stack_t *);
 extern  int     Lmain_stack(struct ps_lwphandle *, stack_t *);
 extern  int     Lalt_stack(struct ps_lwphandle *, stack_t *);
 
+extern int      Lgetregs(struct ps_lwphandle *, prgregset_t *);
+extern int      Lsetregs(struct ps_lwphandle *, const prgregset_t *);
+extern int      Lgetfpregs(struct ps_lwphandle *, prfpregset_t *);
+extern int      Lsetfpregs(struct ps_lwphandle *, const prfpregset_t *);
+extern int      Lgetxregs(struct ps_lwphandle *, prxregset_t **, size_t *);
+extern int      Lsetxregs(struct ps_lwphandle *, const prxregset_t *, size_t);
+
 /*
  * Function prototypes for system calls forced on the victim process.
  */
 extern  int     pr_open(struct ps_prochandle *, const char *, int, mode_t);
 extern  int     pr_creat(struct ps_prochandle *, const char *, mode_t);

@@ -417,15 +425,17 @@
 
 extern int Plwp_getfpregs(struct ps_prochandle *, lwpid_t, prfpregset_t *);
 extern int Plwp_setfpregs(struct ps_prochandle *, lwpid_t,
     const prfpregset_t *);
 
-#if defined(__sparc)
+extern int Plwp_getxregs(struct ps_prochandle *, lwpid_t, prxregset_t **,
+    size_t *);
+extern void Plwp_freexregs(struct ps_prochandle *, prxregset_t *, size_t);
+extern int Plwp_setxregs(struct ps_prochandle *, lwpid_t, const prxregset_t *,
+    size_t);
 
-extern int Plwp_getxregs(struct ps_prochandle *, lwpid_t, prxregset_t *);
-extern int Plwp_setxregs(struct ps_prochandle *, lwpid_t, const prxregset_t *);
-
+#if defined(__sparc)
 extern int Plwp_getgwindows(struct ps_prochandle *, lwpid_t, gwindows_t *);
 
 #if defined(__sparcv9)
 extern int Plwp_getasrs(struct ps_prochandle *, lwpid_t, asrset_t);
 extern int Plwp_setasrs(struct ps_prochandle *, lwpid_t, const asrset_t);