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,36 ****
--- 27,37 ----
* 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,340 ****
--- 332,348 ----
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,431 ****
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 *);
! extern int Plwp_setxregs(struct ps_prochandle *, lwpid_t, const prxregset_t *);
!
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);
--- 425,441 ----
extern int Plwp_getfpregs(struct ps_prochandle *, lwpid_t, prfpregset_t *);
extern int Plwp_setfpregs(struct ps_prochandle *, lwpid_t,
const prfpregset_t *);
! 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);
! #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);