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>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/intel/sys/ucontext.h
          +++ new/usr/src/uts/intel/sys/ucontext.h
↓ open down ↓ 13 lines elided ↑ open up ↑
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
  24      - *
       24 + * Copyright 2015 Joyent, Inc.
  25   25   * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  26   26   * Use is subject to license terms.
  27   27   */
  28   28  
  29   29  /*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
  30   30  /*        All Rights Reserved   */
  31   31  
  32   32  #ifndef _SYS_UCONTEXT_H
  33   33  #define _SYS_UCONTEXT_H
  34   34  
↓ open down ↓ 42 lines elided ↑ open up ↑
  77   77  #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
  78   78  struct  ucontext {
  79   79  #else
  80   80  struct  __ucontext {
  81   81  #endif
  82   82          unsigned long   uc_flags;
  83   83          ucontext_t      *uc_link;
  84   84          sigset_t        uc_sigmask;
  85   85          stack_t         uc_stack;
  86   86          mcontext_t      uc_mcontext;
  87      -        long            uc_filler[5];   /* see ABI spec for Intel386 */
       87 +        /*
       88 +         * The Intel386 ABI specification includes a 5-element array of longs
       89 +         * called "uc_filler", padding the size of the struct to 512 bytes.  To
       90 +         * allow zone brands to communicate extra data right the way through
       91 +         * the signal handling process, from sigacthandler to setcontext, we
       92 +         * steal the first three of these longs as a brand-private member.
       93 +         */
       94 +        void            *uc_brand_data[3];
       95 +        long            uc_filler[2];
  88   96  };
  89      -
  90   97  #if defined(_SYSCALL32)
  91   98  
  92   99  /* Kernel view of user ILP32 ucontext structure */
  93  100  
  94  101  typedef struct ucontext32 {
  95  102          uint32_t        uc_flags;
  96  103          caddr32_t       uc_link;
  97  104          sigset_t        uc_sigmask;
  98  105          stack32_t       uc_stack;
  99  106          mcontext32_t    uc_mcontext;
 100      -        int32_t         uc_filler[5];
      107 +        caddr32_t       uc_brand_data[3];
      108 +        int32_t         uc_filler[2];
 101  109  } ucontext32_t;
 102  110  
 103  111  #if defined(_KERNEL)
 104  112  extern void ucontext_nto32(const ucontext_t *src, ucontext32_t *dest);
 105  113  extern void ucontext_32ton(const ucontext32_t *src, ucontext_t *dest);
 106  114  #endif
 107  115  
 108  116  #endif  /* _SYSCALL32 */
 109  117  
 110  118  #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
↓ open down ↓ 41 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX