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

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/i86pc/os/fpu_subr.c
          +++ new/usr/src/uts/intel/os/fpu_subr.c
↓ open down ↓ 54 lines elided ↑ open up ↑
  55   55   * If fpu_exists is non-zero, fpu_probe will attempt to use any
  56   56   * hardware FPU (subject to other constraints, see below).  If
  57   57   * fpu_exists is zero, fpu_probe will report that there is no
  58   58   * FPU even if there is one.
  59   59   */
  60   60  int fpu_exists = 1;
  61   61  
  62   62  int fp_kind = FP_387;
  63   63  
  64   64  /*
  65      - * The kind of FPU we advertise to rtld so it knows what to do on context
  66      - * switch.
  67      - */
  68      -int fp_elf = AT_386_FPINFO_FXSAVE;
  69      -
  70      -/*
  71      - * Mechanism to save FPU state.
  72      - */
  73      -int fp_save_mech = FP_FXSAVE;
  74      -
  75      -/*
  76   65   * The variable fpu_ignored is provided to allow other code to
  77   66   * determine whether emulation is being done because there is
  78   67   * no FPU or because of an override requested via /etc/system.
  79   68   */
  80   69  int fpu_ignored = 0;
  81   70  
  82   71  /*
  83   72   * Used by ppcopy and ppzero to determine whether or not to use the
  84   73   * SSE-based pagecopy and pagezero routines
  85   74   */
↓ open down ↓ 134 lines elided ↑ open up ↑
 220  209          return;
 221  210  
 222  211          /*
 223  212           * No FPU hardware present
 224  213           */
 225  214  nofpu:
 226  215          setcr0(CR0_DISABLE_FPU_FLAGS(getcr0()));
 227  216          DISABLE_SSE();
 228  217          fp_kind = FP_NO;
 229  218          fpu_exists = 0;
 230      -}
 231      -
 232      -/*
 233      - * Fill in FPU information that is required by exec.
 234      - */
 235      -void
 236      -fpu_auxv_info(int *typep, size_t *lenp)
 237      -{
 238      -        *typep = fp_elf;
 239      -        switch (fp_save_mech) {
 240      -        case FP_FXSAVE:
 241      -                *lenp = sizeof (struct fxsave_state);
 242      -                break;
 243      -        case FP_XSAVE:
 244      -                *lenp = cpuid_get_xsave_size();
 245      -                break;
 246      -        default:
 247      -                *lenp = 0;
 248      -                break;
 249      -        }
 250  219  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX