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>
        
*** 19,29 ****
   * CDDL HEADER END
   */
  
  /*
   * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
!  *
   * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
   * Use is subject to license terms.
   */
  
  /*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
--- 19,29 ----
   * CDDL HEADER END
   */
  
  /*
   * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
!  * 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 */
*** 82,94 ****
          unsigned long   uc_flags;
          ucontext_t      *uc_link;
          sigset_t        uc_sigmask;
          stack_t         uc_stack;
          mcontext_t      uc_mcontext;
!         long            uc_filler[5];   /* see ABI spec for Intel386 */
  };
- 
  #if defined(_SYSCALL32)
  
  /* Kernel view of user ILP32 ucontext structure */
  
  typedef struct ucontext32 {
--- 82,101 ----
          unsigned long   uc_flags;
          ucontext_t      *uc_link;
          sigset_t        uc_sigmask;
          stack_t         uc_stack;
          mcontext_t      uc_mcontext;
!         /*
!          * The Intel386 ABI specification includes a 5-element array of longs
!          * called "uc_filler", padding the size of the struct to 512 bytes.  To
!          * allow zone brands to communicate extra data right the way through
!          * the signal handling process, from sigacthandler to setcontext, we
!          * steal the first three of these longs as a brand-private member.
!          */
!         void            *uc_brand_data[3];
!         long            uc_filler[2];
  };
  #if defined(_SYSCALL32)
  
  /* Kernel view of user ILP32 ucontext structure */
  
  typedef struct ucontext32 {
*** 95,105 ****
          uint32_t        uc_flags;
          caddr32_t       uc_link;
          sigset_t        uc_sigmask;
          stack32_t       uc_stack;
          mcontext32_t    uc_mcontext;
!         int32_t         uc_filler[5];
  } ucontext32_t;
  
  #if defined(_KERNEL)
  extern void ucontext_nto32(const ucontext_t *src, ucontext32_t *dest);
  extern void ucontext_32ton(const ucontext32_t *src, ucontext_t *dest);
--- 102,113 ----
          uint32_t        uc_flags;
          caddr32_t       uc_link;
          sigset_t        uc_sigmask;
          stack32_t       uc_stack;
          mcontext32_t    uc_mcontext;
!         caddr32_t       uc_brand_data[3];
!         int32_t         uc_filler[2];
  } ucontext32_t;
  
  #if defined(_KERNEL)
  extern void ucontext_nto32(const ucontext_t *src, ucontext32_t *dest);
  extern void ucontext_32ton(const ucontext32_t *src, ucontext_t *dest);