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);