Print this page
OS-3561 lxbrand emulation library should execute on alternate stack
OS-3558 lxbrand add support for full in-kernel syscall handling
OS-3545 lx_syscall_regs should not walk stack
OS-3868 many LTP testcases now hang
OS-3901 lxbrand lx_recvmsg fails to translate control messages when 64-bit
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
Reviewed by: Bryan Cantrill <bryan@joyent.com>

*** 18,27 **** --- 18,30 ---- * * CDDL HEADER END */ /* + * Copyright 2015 Joyent, Inc. + */ + /* * Copyright 2010 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
*** 108,121 **** --- 111,129 ---- getfpasrs(lwp, ucp->uc_mcontext.asrs); if (ucp->uc_mcontext.fpregs.fpu_en == 0) ucp->uc_flags &= ~UC_FPU; ucp->uc_mcontext.gwins = (gwindows_t *)NULL; + if (mask != NULL) { /* * Save signal mask. */ sigktou(mask, &ucp->uc_sigmask); + } else { + ucp->uc_flags &= ~UC_SIGMASK; + bzero(&ucp->uc_sigmask, sizeof (ucp->uc_sigmask)); + } } void restorecontext(ucontext_t *ucp)
*** 410,424 **** --- 418,437 ---- if (ucp->uc_mcontext.fpregs.fpu_en == 0) ucp->uc_flags &= ~UC_FPU; ucp->uc_mcontext.gwins = (caddr32_t)NULL; + if (mask != NULL) { /* * Save signal mask (the 32- and 64-bit sigset_t structures are * identical). */ sigktou(mask, (sigset_t *)&ucp->uc_sigmask); + } else { + ucp->uc_flags &= ~UC_SIGMASK; + bzero(&ucp->uc_sigmask, sizeof (ucp->uc_sigmask)); + } } int getsetcontext32(int flag, void *arg) {