Fix headers
authorDavid Bartley <dtbartle@maltodextrin.csclub.uwaterloo.ca>
Sun, 21 Sep 2008 03:42:44 +0000 (03:42 +0000)
committerDavid Bartley <dtbartle@maltodextrin.csclub.uwaterloo.ca>
Sun, 21 Sep 2008 03:42:44 +0000 (03:42 +0000)
14 files changed:
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/Makefile
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/bits/sigaction.h
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/bits/siginfo.h
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/bits/sigset.h
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/bits/sigstack.h
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/priv.c
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/privP.c
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/privP.h
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/sys/procfs.h
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/sys/ucontext.h
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/ucred.c
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/ucredP.h
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/x86/sys/procfs_isa.h
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/x86/sys/regset.h

index f5f6f9b..60e1894 100644 (file)
@@ -42,17 +42,16 @@ sysdep_routines += sys_fdsync sys_brk sys_fcntl sys_utssys sys_lwp_private \
     sys_zone_create sys_allocids sys_settaskid sys_zone_lookup sys_port \
     sys_door
 sysdep_headers += sys/feature_tests.h sys/mount.h sys/dirent.h sys/utime.h \
-    sys/systeminfo.h sys/link.h sys/procfs_isa.h sys/frame.h sys/ttold.h \
+    sys/systeminfo.h sys/link.h sys/procfs_isa.h sys/ttold.h \
     sys/priocntl.h sys/procset.h sys/ptyvar.h sys/synch.h sys/fork.h \
     sys/sockio.h sys/ioccom.h sys/tty.h sys/trap.h sys/sysconfig.h \
        sys/ptms.h sys/stack.h sys/regset.h sys/fault.h sys/processor.h \
-    sys/pset.h sys/priv.h sys/priv_names.h sys/reg.h sys/siginfo.h \
-    sys/bufmod.h sys/types32.h sys/isa_defs.h sys/elf.h sys/int_types.h \
-    sys/machelf.h sys/inttypes.h sys/atomic.h sys/procfs.h sys/old_procfs.h \
-    sys/machtypes.h
-sysdep_headers += priv.h bits/regset.h procfs.h nss_common.h \
+    sys/pset.h sys/reg.h sys/siginfo.h sys/types32.h sys/isa_defs.h sys/elf.h \
+    sys/int_types.h sys/machelf.h sys/inttypes.h sys/atomic.h sys/machtypes.h
+sysdep_headers += procfs.h nss_common.h \
     rtld_db.h pcsample.h atomic.h bits/machtypes.h
 headers := $(filter-out sys/sysinfo.h,$(headers))
+headers := $(filter-out sys/sysmacros.h,$(headers))
 endif
 
 ifeq ($(subdir),dirent)
index fbc836c..ad80ab9 100644 (file)
@@ -41,6 +41,24 @@ struct sigaction
 #endif
 };
 
+#ifdef _SYSCALL32
+
+# include <sys/types32.h>
+
+struct sigaction32
+  {
+       int32_t sa_flags;
+       union
+         {
+               caddr32_t _handler;
+               caddr32_t _sigaction;
+         } _funcptr;
+       sigset32_t sa_mask;
+       int32_t sa_resv[2];
+  };
+
+#endif
+
 /* Bits in `sa_flags'.  */
 #define SA_NOCLDSTOP    0x00020000     /* Don't send SIGCHLD when children stop.  */
 #define        SA_NOCLDWAIT    0x00010000      /* Don't send SIGCHLD when children stop.  */
index 81feadd..2eadc76 100644 (file)
@@ -101,7 +101,7 @@ typedef struct siginfo
 
         struct /* SIGSEGV, SIGBUS, SIGILL, SIGTRAP, SIGFPE */
         {
-            void  *__addr;
+            void *__addr;
             int __trapno;
             char *__pc;
         } __fault;
@@ -130,6 +130,70 @@ typedef struct siginfo
     } __data;
 } siginfo_t;
 
+# ifdef _SYSCALL32
+
+#  include <sys/types32.h>
+
+typedef struct siginfo32
+{
+    int32_t si_signo;
+    int32_t si_code;
+    int32_t si_errno;
+    union
+    {
+        int32_t _pad[__SI_PAD_SIZE];
+
+        struct /* kill(), SIGCLD, siqqueue() */
+        {
+            pid32_t __pid;     /* Sending process ID.  */
+            union {
+                struct {
+                    uid32_t __uid;     /* Real user ID of sending process.  */
+                    union sigval32  __value;
+                } __kill;
+                struct {
+                    clock32_t __utime;
+                    int32_t __status;
+                    clock32_t __stime;
+                } __cld;
+            } __pdata;
+            id32_t __ctid;
+            id32_t __zoneid;
+        } __proc;
+
+        struct /* SIGSEGV, SIGBUS, SIGILL, SIGTRAP, SIGFPE */
+        {
+            caddr32_t __addr;
+            int32_t __trapno;
+            caddr32_t __pc;
+        } __fault;
+
+        struct /* SIGPOLL, SIGXFSZ */
+        {
+            int32_t __fd;
+            int32_t  __band;
+        } __file;
+
+        struct /* SIGPROF */
+        {
+            caddr32_t __faddr;
+            struct timespec32 __tstamp;
+            int16_t __syscall;
+            int8_t  __nsysarg;
+            int8_t  __fault;
+            int32_t  __sysarg[8];
+            int32_t __mstate[10];
+        } __prof;
+
+        struct /* SI_RCTL */
+        {
+            int32_t __entity;
+        } __rctl;
+    } __data;
+} siginfo32_t;
+
+# endif /* _SYSCALL32 */
+
 # ifdef __USE_MISC
 
 typedef struct k_siginfo
index 3204bfc..8a384bb 100644 (file)
@@ -30,6 +30,17 @@ typedef struct
        unsigned int __sigbits[_SIGSET_NWORDS];
   } __sigset_t;
 
+#ifdef _SYSCALL32
+
+# include <sys/types32.h>
+
+typedef struct
+  {
+       uint32_t __sigbits[4];
+  } sigset32_t;
+
+#endif
+
 typedef struct
   {
        unsigned int __sigbits[2];
index cb38867..ae8ba1f 100644 (file)
@@ -32,6 +32,19 @@ struct sigstack
     int ss_onstack;            /* Nonzero if executing on this stack.  */
   };
 
+#ifdef _SYSCALL32
+
+# include <sys/types32.h>
+
+typedef struct sigaltstack32
+  {
+       caddr32_t ss_sp;
+       size32_t ss_size;
+    int32_t  ss_flags;
+  } stack32_t;
+
+#endif
+
 
 /* Possible values for `ss_flags.'.  */
 enum
index 3c6ef95..77651a8 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <inline-syscall.h>
 #include <privP.h>
-#include <priv.h>
 #include <sys/priocntl.h>
 #include <string.h>
 #include <assert.h>
@@ -46,7 +45,7 @@ const priv_impl_info_t * getprivimplinfo (void)
 
   /* First call: get header.  */
   priv_impl_info_t _info;
-  int res = INLINE_SYSCALL (privsys, 5, PRIVSYS_GETIMPLINFO, 0, 0, &_info,
+  int res = INLINE_SYSCALL (privsys, 5, SYS_SUB_getimplinfo, 0, 0, &_info,
       sizeof(_info));
   if (res == 0)
     {
@@ -54,7 +53,7 @@ const priv_impl_info_t * getprivimplinfo (void)
       size_t info_size = PRIV_IMPL_INFO_SIZE (&_info);
       __info = malloc (info_size);
       assert (__info);
-      res = INLINE_SYSCALL (privsys, 5, PRIVSYS_GETIMPLINFO, 0, 0, __info,
+      res = INLINE_SYSCALL (privsys, 5, SYS_SUB_getimplinfo, 0, 0, __info,
           info_size);
       assert (res == 0);
     }
@@ -70,7 +69,7 @@ int getppriv (priv_ptype_t which, priv_set_t *set)
   if (setn == -1)
     return -1;
 
-  return INLINE_SYSCALL (privsys, 5, PRIVSYS_GETPPRIV, 0, (priv_ptype_t)setn,
+  return INLINE_SYSCALL (privsys, 5, SYS_SUB_getppriv, 0, (priv_ptype_t)setn,
       (void *)set, __PRIVSETSIZE);
 }
 
@@ -81,7 +80,7 @@ int setppriv (priv_op_t op, priv_ptype_t which, const priv_set_t *set)
   if (setn == -1)
     return -1;
 
-  return INLINE_SYSCALL (privsys, 5, PRIVSYS_GETPPRIV, op, (priv_ptype_t)setn,
+  return INLINE_SYSCALL (privsys, 5, SYS_SUB_setppriv, op, (priv_ptype_t)setn,
       (void *)set, __PRIVSETSIZE);
 }
 
index e0cbc4c..d616955 100644 (file)
@@ -18,7 +18,6 @@
    02111-1307 USA.  */
 
 #include <privP.h>
-#include <priv.h>
 #include <bits/libc-lock.h>
 
 __libc_lock_define_recursive (extern, __priv_lock);
index b6e8e25..e026432 100644 (file)
 #ifndef _PRIVP_H
 #define _PRIVP_H
 
-#include <priv.h>
+#include <sys/types.h>
+#include <stdint.h>
+
+typedef uint32_t priv_chunk_t;
+typedef struct priv_set priv_set_t;
+typedef const char *priv_ptype_t;
+
+typedef struct prpriv
+  {
+       uint32_t pr_nsets;
+       uint32_t pr_setsize;
+       uint32_t pr_infosize;
+       priv_chunk_t pr_sets[1];
+  } prpriv_t;
+
+typedef struct priv_impl_info
+  {
+       uint32_t priv_headersize;
+       uint32_t priv_flags;
+       uint32_t priv_nsets;
+       uint32_t priv_setsize;
+       uint32_t priv_max;
+       uint32_t priv_infosize;
+       uint32_t priv_globalinfosize;
+  } priv_impl_info_t;
+
+#define PRIV_IMPL_INFO_SIZE(p) \
+       ((p)->priv_headersize + (p)->priv_globalinfosize)
+
+typedef struct priv_info
+  {
+       uint32_t priv_info_type;
+       uint32_t priv_info_size;
+  } priv_info_t;
+
+typedef struct priv_info_uint
+  {
+       priv_info_t info;
+       unsigned int val;
+  } priv_info_uint_t;
+
+typedef struct priv_info_set
+  {
+       priv_info_t info;
+       priv_chunk_t set[1];
+  } priv_info_set_t;
+
+typedef struct priv_info_names
+  {
+       priv_info_t info;
+       int cnt;
+       char names[1];
+  } priv_info_names_t;
+
+#define PRIV_INFO_SETNAMES     1
+#define PRIV_INFO_PRIVNAMES    2
+#define PRIV_INFO_BASICPRIVS   3
+#define PRIV_INFO_FLAGS                4
 
 typedef struct priv_data
   {
@@ -32,7 +89,17 @@ typedef struct priv_data
        priv_chunk_t *pd_basicprivs;
   } priv_data_t;
 
-extern const priv_data_t * __priv_parse_data_cached (void);
+typedef enum priv_op
+{
+       PRIV_ON,
+       PRIV_OFF,
+       PRIV_SET
+} priv_op_t;
+
+#define PRIV_EFFECTIVE         "Effective"
+#define PRIV_INHERITABLE       "Inheritable"
+#define PRIV_PERMITTED         "Permitted"
+#define PRIV_LIMIT             "Limit"
 
 #define __NPRIVBITS    (8 * sizeof (priv_chunk_t))
 #define __PRIVELT(pr)  ((pr) / __NPRIVBITS)
@@ -40,4 +107,10 @@ extern const priv_data_t * __priv_parse_data_cached (void);
 #define __PRIVSETCHUNKS        (getprivimplinfo()->priv_setsize)
 #define __PRIVSETSIZE  (__PRIVSETCHUNKS * sizeof (priv_chunk_t))
 
+extern const priv_data_t * __priv_parse_data_cached (void);
+extern const priv_impl_info_t *getprivimplinfo (void);
+extern int setppriv (priv_op_t, priv_ptype_t, const priv_set_t *);
+extern int getppriv (priv_ptype_t, priv_set_t *);
+extern int priv_getsetbyname (const char *);
+
 #endif /* _PRIVP_H */
index 881cfd9..670089f 100644 (file)
@@ -40,7 +40,7 @@
 #include <bits/regset.h>
 #include <time.h>
 #include <bits/wordsize.h>
-#include <sys/isa_defs.h>
+#include <sys/procfs_isa.h>
 
 /* control codes for ctl and lwpctl */
 #define PCNULL         0
index ceba4c2..37cea06 100644 (file)
@@ -23,7 +23,7 @@
 #define __need_stack_t
 #include <bits/sigstack.h>
 #include <bits/sigset.h>
-#include <bits/regset.h>
+#include <sys/regset.h>
 #include <features.h>
 
 typedef struct ucontext
index 12af3b6..976bce6 100644 (file)
@@ -21,8 +21,8 @@
 #include <unistd.h>
 #include <ucredP.h>
 #include <auditP.h>
+#include <privP.h>
 #include <errno.h>
-#include <priv.h>
 #include <assert.h>
 
 DECLARE_INLINE_SYSCALL (int, getpeerucred, int fd, ucred_t *ucred);
@@ -62,23 +62,76 @@ void ucred_free (ucred_t *uc)
 }
 
 
-#define MAKE_PRCRED_T_CALL(field, type)                                     \
-  type ucred_get##field (const ucred_t *uc)                                 \
-  {                                                                         \
-    if (uc->uc_credoff == 0)                                                \
-      {                                                                     \
-        __set_errno(EINVAL);                                                \
-        return (type)-1;                                                    \
-      }                                                                     \
-    return (type)((prcred_t *)((char *)uc + uc->uc_credoff))->pr_##field;   \
-   }
-
-MAKE_PRCRED_T_CALL (euid, uid_t)
-MAKE_PRCRED_T_CALL (ruid, uid_t)
-MAKE_PRCRED_T_CALL (suid, uid_t)
-MAKE_PRCRED_T_CALL (egid, gid_t)
-MAKE_PRCRED_T_CALL (rgid, gid_t)
-MAKE_PRCRED_T_CALL (sgid, gid_t)
+uid_t ucred_geteuid (const ucred_t *uc)
+{
+  if (uc->uc_credoff == 0)
+    {
+      __set_errno (EINVAL);
+      return (uid_t)-1;
+    }
+
+  return (uid_t)((prcred_t *)((char *)uc + uc->uc_credoff))->pr_euid;
+}
+
+
+uid_t ucred_getruid (const ucred_t *uc)
+{
+  if (uc->uc_credoff == 0)
+    {
+      __set_errno (EINVAL);
+      return (uid_t)-1;
+    }
+
+  return (uid_t)((prcred_t *)((char *)uc + uc->uc_credoff))->pr_ruid;
+}
+
+
+uid_t ucred_getsuid (const ucred_t *uc)
+{
+  if (uc->uc_credoff == 0)
+    {
+      __set_errno (EINVAL);
+      return (uid_t)-1;
+    }
+
+  return (uid_t)((prcred_t *)((char *)uc + uc->uc_credoff))->pr_suid;
+}
+
+
+gid_t ucred_getegid (const ucred_t *uc)
+{
+  if (uc->uc_credoff == 0)
+    {
+      __set_errno (EINVAL);
+      return (gid_t)-1;
+    }
+
+  return (gid_t)((prcred_t *)((char *)uc + uc->uc_credoff))->pr_egid;
+}
+
+
+gid_t ucred_getrgid (const ucred_t *uc)
+{
+  if (uc->uc_credoff == 0)
+    {
+      __set_errno (EINVAL);
+      return (gid_t)-1;
+    }
+
+  return (gid_t)((prcred_t *)((char *)uc + uc->uc_credoff))->pr_rgid;
+}
+
+
+gid_t ucred_getsgid (const ucred_t *uc)
+{
+  if (uc->uc_credoff == 0)
+    {
+      __set_errno(EINVAL);                                                \
+      return (gid_t)-1;                                                    \
+    }
+
+  return (gid_t)((prcred_t *)((char *)uc + uc->uc_credoff))->pr_sgid;
+}
 
 
 int ucred_getgroups (const ucred_t *uc, const gid_t **groups)
index cc4ffeb..7d680cb 100644 (file)
 
 #include <sys/types.h>
 #include <auditP.h>
+#include <privP.h>
+
+typedef struct prcred
+  {
+       uid_t pr_euid;
+       uid_t pr_ruid;
+       uid_t pr_suid;
+       gid_t pr_egid;
+       gid_t pr_rgid;
+       gid_t pr_sgid;
+       int pr_ngroups;
+       gid_t pr_groups[1];
+  } prcred_t;
 
 typedef struct ucred_s
   {
index 8e5ddb6..1b03891 100644 (file)
 #define _SYS_PROCFS_ISA_H
 
 #include <sys/regset.h>
+#include <sys/isa_defs.h>
 
-#ifdef __i386__
-# define R_PC  EIP
-# define R_PS  EFL
-# define R_SP  UESP
-# define R_FP  EBP
-# define R_R0  EAX
-# define R_R1  EDX
+#define PR_MODEL_UNKNOWN       0
+#define PR_MODEL_ILP32         1
+#define PR_MODEL_LP64          2
+
+#ifdef _LP64
+# define PR_MODEL_NATIVE       PR_MODEL_LP64
 #else
+# define PR_MODEL_NATIVE       PR_MODEL_ILP32
+#endif
+
+typedef unsigned char instr_t;
+
+#define prgregset_t    gregset_t
+#define prfpregset_t   fpregset_t
+#define prgreg_t       greg_t
+#define prfpregset     fpu
+
+#define NPRGREG        _NGREG
+
+#ifdef _SYSCALL32
+
+typedef unsigned char instr32_t;
+
+# if defined(__amd64)
+#  define NPRGREG32            _NGREG32
+#  define prgreg32_t           greg32_t
+#  define prgregset32_t                gregset32_t
+#  define prfpregset32         fpu32
+#  define prfpregset32_t       fpregset32_t
+# else
+#  define NPRGREG32            _NGREG
+#  define prgreg32_t           greg_t
+#  define prgregset32_t                gregset_t
+#  define prfpregset32         fpu
+#  define prfpregset32_t       fpregset_t
+# endif
+
+#endif /* _SYSCALL32 */
+
+#ifdef __amd64__
 # define R_PC  REG_RIP
 # define R_PS  REG_RFL
 # define R_SP  REG_RSP
 # define R_FP  REG_RBP
 # define R_R0  REG_RAX
 # define R_R1  REG_RDX
+#else
+# define R_PC  EIP
+# define R_PS  EFL
+# define R_SP  UESP
+# define R_FP  EBP
+# define R_R0  EAX
+# define R_R1  EDX
 #endif
 
 #endif /* _SYS_PROCFS_ISA_H */
index 26744f2..a16e3ab 100644 (file)
 #define _SYS_REGSET_H  1
 
 #include <features.h>
+#include <bits/types.h>
 
 #ifdef __USE_MISC
 
-#include <bits/regset.h>
+# ifdef __amd64__
+#  define REG_R15      0
+#  define REG_R14      1
+#  define REG_R13      2
+#  define REG_R12      3
+#  define REG_R11      4
+#  define REG_R10      5
+#  define REG_R9       6
+#  define REG_R8       7
+#  define REG_RDI      8
+#  define REG_RSI      9
+#  define REG_RBP      10
+#  define REG_RBX      11
+#  define REG_RDX      12
+#  define REG_RCX      13
+#  define REG_RAX      14
+#  define REG_TRAPNO   15
+#  define REG_ERR      16
+#  define REG_RIP      17
+#  define REG_CS       18
+#  define REG_RFL      19
+#  define REG_RSP      20
+#  define REG_SS       21
+#  define REG_FS       22
+#  define REG_GS       23
+#  define REG_ES       24
+#  define REG_DS       25
+#  define REG_FSBASE   26
+#  define REG_GSBASE   27
+#  define REG_PC       REG_RIP
+#  define REG_FP       REG_RBP
+#  define REG_SP       REG_RSP
+#  define REG_PS       REG_RFL
+#  define REG_R0       REG_RAX
+#  define REG_R1       REG_RDX
+# else /* __i386__ */
+#  define GS           0
+#  define FS           1
+#  define ES           2
+#  define DS           3
+#  define EDI          4
+#  define ESI          5
+#  define EBP          6
+#  define ESP          7
+#  define EBX          8
+#  define EDX          9
+#  define ECX          10
+#  define EAX          11
+#  define TRAPNO       12
+#  define ERR          13
+#  define EIP          14
+#  define CS           15
+#  define EFL          16
+#  define UESP         17
+#  define SS           18
+#  define REG_PC       EIP
+#  define REG_FP       EBP
+#  define REG_SP       UESP
+#  define REG_PS       EFL
+#  define REG_R0       EAX
+#  define REG_R1       EDX
+# endif /* __amd64__ */
+
+#endif /* __USE_MISC */
+
+typedef struct __fpu
+  {
+       union
+         {
+               struct __fpchip_state
+                 {
+                       __uint32_t __state[27];
+                       __uint32_t __status;
+                       __uint32_t __mxcsr;
+                       __uint32_t __xstatus;
+                       __uint32_t __pad[2];
+                       __uint32_t __xmm[4][8];
+                 } __fpchip_state;
+               struct __fp_emul_space
+                 {
+                       __uint8_t __fp_emul[246];
+                       __uint8_t __fp_epad[2];
+                 } __fp_emul_space;
+               __uint32_t __f_fpregs[95];
+         } __fp_reg_set;
+  } fpregset_t;
+
+#ifdef __amd64
+# define _NGREG                28
+#else
+# define _NGREG                19
+#endif
+#define NGREG          _NGREG
 
-#ifdef __amd64__
+typedef int greg_t;
+
+#if defined (_SYSCALL32)
+typedef int32_t greg32_t;
+typedef int64_t greg64_t;
+#endif
+
+typedef greg_t gregset_t[_NGREG];
 
-# define REG_R15       0
-# define REG_R14       1
-# define REG_R13       2
-# define REG_R12       3
-# define REG_R11       4
-# define REG_R10       5
-# define REG_R9                6
-# define REG_R8                7
-# define REG_RDI       8
-# define REG_RSI       9
-# define REG_RBP       10
-# define REG_RBX       11
-# define REG_RDX       12
-# define REG_RCX       13
-# define REG_RAX       14
-# define REG_TRAPNO    15
-# define REG_ERR       16
-# define REG_RIP       17
-# define REG_CS                18
-# define REG_RFL       19
-# define REG_RSP       20
-# define REG_SS                21
-# define REG_FS                22
-# define REG_GS                23
-# define REG_ES                24
-# define REG_DS                25
-# define REG_FSBASE    26
-# define REG_GSBASE    27
-
-# define REG_PC                REG_RIP
-# define REG_FP                REG_RBP
-# define REG_SP                REG_RSP
-# define REG_PS                REG_RFL
-# define REG_R0                REG_RAX
-# define REG_R1                REG_RDX
-
-#else /* __i386__ */
-
-# define GS    0
-# define FS    1
-# define ES    2
-# define DS    3
-# define EDI   4
-# define ESI   5
-# define EBP   6
-# define ESP   7
-# define EBX   8
-# define EDX   9
-# define ECX   10
-# define EAX   11
-# define TRAPNO        12
-# define ERR   13
-# define EIP   14
-# define CS    15
-# define EFL   16
-# define UESP  17
-# define SS    18
-
-# define REG_PC                EIP
-# define REG_FP                EBP
-# define REG_SP                UESP
-# define REG_PS                EFL
-# define REG_R0                EAX
-# define REG_R1                EDX
-
-#endif /* __amd64__ */
+typedef struct
+  {
+    gregset_t gregs;
+    fpregset_t fpregs;
+  } mcontext_t;
 
+#ifdef __USE_MISC
+
+struct fxsave_state
+  {
+       __uint16_t fx_fcw;
+       __uint16_t fx_fsw;
+       __uint16_t fx_fctw;
+       __uint16_t fx_fop;
+#ifdef __amd64__
+       __uint64_t fx_rip;
+       __uint64_t fx_rdp;
+#else
+       __uint32_t fx_eip;
+       __uint16_t fx_cs;
+       __uint16_t __fx_ign0;
+       __uint32_t fx_dp;
+       __uint16_t fx_ds;
+       __uint16_t __fx_ign1;
+#endif
+       __uint32_t fx_mxcsr;
+       __uint32_t fx_mxcsr_mask;
+       union
+         {
+               __uint16_t fpr_16[5];
+               unsigned long long fpr_mmx;
+        __uint32_t __fpr_pad[4];
+         } fx_st[8];
+#if defined(__amd64)
+       upad128_t fx_xmm[16]; /* 128-bit registers */
+       upad128_t __fx_ign2[6];
+#else
+       upad128_t fx_xmm[8];  /* 128-bit registers */
+       upad128_t __fx_ign2[14];
 #endif
+  };
+
+struct fnsave_state
+  {
+       __uint16_t f_fcw;
+       __uint16_t __f_ign0;
+       __uint16_t f_fsw;
+       __uint16_t __f_ign1;
+       __uint16_t f_ftw;
+       __uint16_t __f_ign2;
+       __uint32_t f_eip;
+       __uint16_t f_cs;
+       __uint16_t f_fop;
+       __uint32_t f_dp;
+       __uint16_t f_ds;
+       __uint16_t __f_ign3;
+       union
+         {
+               __uint16_t fpr_16[5];
+         } f_st[8];
+  };
+
+typedef struct
+  {
+       union _kfpu_u
+         {
+               struct fxsave_state kfpu_fx;
+#ifdef __i386__
+               struct fnsave_state kfpu_fn;
+#endif
+         } kfpu_u;
+       __uint32_t kfpu_status;
+       __uint32_t kfpu_xstatus;
+  } kfpu_t;
+
+#endif /* __USE_MISC */
 
 #endif /* _SYS_REGSET_H */