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


  24  * Copyright 2020 Joyent, Inc.
  25  */
  26 
  27 #ifndef _SYS_PCB_H
  28 #define _SYS_PCB_H
  29 
  30 #include <sys/regset.h>
  31 #include <sys/segments.h>
  32 #ifndef _ASM
  33 #include <sys/fp.h>       /* kfpu_t */
  34 #endif
  35 
  36 #ifdef  __cplusplus
  37 extern "C" {
  38 #endif
  39 
  40 #ifndef _ASM
  41 typedef struct fpu_ctx {
  42         kfpu_t          fpu_regs;       /* kernel save area for FPU */
  43         uint64_t        fpu_xsave_mask; /* xsave mask for FPU/SSE/AVX */
  44 #if defined(__i386)
  45         uint64_t        fpu_padding;    /* fix 32bit libmicro regression */
  46 #endif
  47         uint_t          fpu_flags;      /* FPU state flags */

  48 } fpu_ctx_t;
  49 
  50 typedef struct pcb {
  51         fpu_ctx_t       pcb_fpu;        /* fpu state */
  52         uint_t          pcb_flags;      /* state flags; cleared on fork */
  53         greg_t          pcb_drstat;     /* status debug register (%dr6) */
  54         unsigned char   pcb_instr;      /* /proc: instruction at stop */
  55         unsigned char   pcb_rupdate;    /* new register values in pcb -> regs */
  56         uintptr_t       pcb_fsbase;
  57         uintptr_t       pcb_gsbase;
  58         selector_t      pcb_ds;
  59         selector_t      pcb_es;
  60         selector_t      pcb_fs;
  61         selector_t      pcb_gs;
  62         user_desc_t     pcb_fsdesc;     /* private per-lwp %fs descriptors */
  63         user_desc_t     pcb_gsdesc;     /* private per-lwp %gs descriptors */
  64 } pcb_t;
  65 
  66 #endif /* ! _ASM */
  67 




  24  * Copyright 2020 Joyent, Inc.
  25  */
  26 
  27 #ifndef _SYS_PCB_H
  28 #define _SYS_PCB_H
  29 
  30 #include <sys/regset.h>
  31 #include <sys/segments.h>
  32 #ifndef _ASM
  33 #include <sys/fp.h>       /* kfpu_t */
  34 #endif
  35 
  36 #ifdef  __cplusplus
  37 extern "C" {
  38 #endif
  39 
  40 #ifndef _ASM
  41 typedef struct fpu_ctx {
  42         kfpu_t          fpu_regs;       /* kernel save area for FPU */
  43         uint64_t        fpu_xsave_mask; /* xsave mask for FPU/SSE/AVX */



  44         uint_t          fpu_flags;      /* FPU state flags */
  45         void            *fpu_signal;    /* copyin area for signal handling */
  46 } fpu_ctx_t;
  47 
  48 typedef struct pcb {
  49         fpu_ctx_t       pcb_fpu;        /* fpu state */
  50         uint_t          pcb_flags;      /* state flags; cleared on fork */
  51         greg_t          pcb_drstat;     /* status debug register (%dr6) */
  52         unsigned char   pcb_instr;      /* /proc: instruction at stop */
  53         unsigned char   pcb_rupdate;    /* new register values in pcb -> regs */
  54         uintptr_t       pcb_fsbase;
  55         uintptr_t       pcb_gsbase;
  56         selector_t      pcb_ds;
  57         selector_t      pcb_es;
  58         selector_t      pcb_fs;
  59         selector_t      pcb_gs;
  60         user_desc_t     pcb_fsdesc;     /* private per-lwp %fs descriptors */
  61         user_desc_t     pcb_gsdesc;     /* private per-lwp %gs descriptors */
  62 } pcb_t;
  63 
  64 #endif /* ! _ASM */
  65