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