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
        
*** 26,36 ****
  
  /*
   * Copyright 2012 DEY Storage Systems, Inc.  All rights reserved.
   * Copyright 2018 Joyent, Inc.
   * Copyright 2020 OmniOS Community Edition (OmniOSce) Association.
!  * Copyright 2022 Oxide Computer Company
   */
  
  #include <sys/types.h>
  #include <sys/param.h>
  #include <sys/thread.h>
--- 26,36 ----
  
  /*
   * Copyright 2012 DEY Storage Systems, Inc.  All rights reserved.
   * Copyright 2018 Joyent, Inc.
   * Copyright 2020 OmniOS Community Edition (OmniOSce) Association.
!  * Copyright 2023 Oxide Computer Company
   */
  
  #include <sys/types.h>
  #include <sys/param.h>
  #include <sys/thread.h>
*** 136,146 ****
          mutex_exit(&p->p_ldtlock);
          if (size != 0)
                  v[0].p_filesz += sizeof (Note) + roundup(size, sizeof (Word));
  #endif  /* __i386_COMPAT */
  
!         if ((size = prhasx(p)? prgetprxregsize(p) : 0) != 0)
                  v[0].p_filesz += nlwp * sizeof (Note)
                      + nlwp * roundup(size, sizeof (Word));
  
  #if defined(__sparc)
          /*
--- 136,146 ----
          mutex_exit(&p->p_ldtlock);
          if (size != 0)
                  v[0].p_filesz += sizeof (Note) + roundup(size, sizeof (Word));
  #endif  /* __i386_COMPAT */
  
!         if ((size = prhasx(p) ? prgetprxregsize(p) : 0) != 0)
                  v[0].p_filesz += nlwp * sizeof (Note)
                      + nlwp * roundup(size, sizeof (Word));
  
  #if defined(__sparc)
          /*
*** 195,205 ****
                  struct utsname  uts;
                  prsecflags_t    psecflags;
                  prupanic_t      upanic;
          } *bigwad;
  
!         size_t xregsize = prhasx(p)? prgetprxregsize(p) : 0;
          size_t crsize = sizeof (prcred_t) + sizeof (gid_t) * (ngroups_max - 1);
          size_t psize = prgetprivsize();
          size_t bigsize = MAX(psize, MAX(sizeof (*bigwad),
              MAX(xregsize, crsize)));
  
--- 195,205 ----
                  struct utsname  uts;
                  prsecflags_t    psecflags;
                  prupanic_t      upanic;
          } *bigwad;
  
!         size_t xregsize = prhasx(p) ? prgetprxregsize(p) : 0;
          size_t crsize = sizeof (prcred_t) + sizeof (gid_t) * (ngroups_max - 1);
          size_t psize = prgetprivsize();
          size_t bigsize = MAX(psize, MAX(sizeof (*bigwad),
              MAX(xregsize, crsize)));
  
*** 572,582 ****
                                  goto done;
                  }
  #endif /* __sparc */
  
                  if (xregsize) {
!                         prgetprxregs(lwp, bigwad->xregs);
                          error = elfnote(vp, &offset, NT_PRXREG,
                              xregsize, bigwad->xregs, rlimit, credp);
                          if (error)
                                  goto done;
                  }
--- 572,582 ----
                                  goto done;
                  }
  #endif /* __sparc */
  
                  if (xregsize) {
!                         prgetprxregs(lwp, (prxregset_t *)bigwad->xregs);
                          error = elfnote(vp, &offset, NT_PRXREG,
                              xregsize, bigwad->xregs, rlimit, credp);
                          if (error)
                                  goto done;
                  }