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