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