diff options
author | Gordon Ross <gwr@nexenta.com> | 2015-05-02 16:01:22 -0400 |
---|---|---|
committer | Gordon Ross <gwr@nexenta.com> | 2015-10-17 08:33:25 -0400 |
commit | 21227944c2bcc086121a5428f3f9d2496ba646f5 (patch) | |
tree | 148367c925007409bbc4e3778a61022681fac3ff /usr/src/uts/intel/sys/mcontext.h | |
parent | 6a72db4a7fa12c3e0d1c1cf91a07390739fa0fbf (diff) | |
download | illumos-joyent-21227944c2bcc086121a5428f3f9d2496ba646f5.tar.gz |
5876 sys/regset.h pollutes name space
Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Reviewed by: Jonathan Perkin <jperkin@joyent.com>
Reviewed by: Alexander Pyhalov <alp@sfedu.ru>
Approved by: Albert Lee <trisk@omniti.com>
Diffstat (limited to 'usr/src/uts/intel/sys/mcontext.h')
-rw-r--r-- | usr/src/uts/intel/sys/mcontext.h | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/usr/src/uts/intel/sys/mcontext.h b/usr/src/uts/intel/sys/mcontext.h new file mode 100644 index 0000000000..23d0aba364 --- /dev/null +++ b/usr/src/uts/intel/sys/mcontext.h @@ -0,0 +1,191 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2015 Nexenta Systems, Inc. All rights reserved. + * + * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. + */ +/* Copyright (c) 1990, 1991 UNIX System Laboratories, Inc. */ + +/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ +/* All Rights Reserved */ + +/* + * Essential struct definitions for mcontext_t needed by ucontext.h + * These were formerly in regset.h, which now includes this file. + */ + +#ifndef _SYS_MCONTEXT_H +#define _SYS_MCONTEXT_H + +#include <sys/feature_tests.h> + +#if !defined(_ASM) +#include <sys/types.h> +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A gregset_t is defined as an array type for compatibility with the reference + * source. This is important due to differences in the way the C language + * treats arrays and structures as parameters. + */ +#if defined(__amd64) +#define _NGREG 28 +#else +#define _NGREG 19 +#endif + +#if !defined(_ASM) + +#if defined(_LP64) || defined(_I32LPx) +typedef long greg_t; +#else +typedef int greg_t; +#endif + +#if defined(_SYSCALL32) + +typedef int32_t greg32_t; +typedef int64_t greg64_t; + +#endif /* _SYSCALL32 */ + +typedef greg_t gregset_t[_NGREG]; + +#if defined(_SYSCALL32) + +#define _NGREG32 19 +#define _NGREG64 28 + +typedef greg32_t gregset32_t[_NGREG32]; +typedef greg64_t gregset64_t[_NGREG64]; + +#endif /* _SYSCALL32 */ + +/* + * Floating point definitions. + */ + +#if defined(__amd64) + +typedef struct _fpu { + union { + struct _fpchip_state { + uint16_t cw; + uint16_t sw; + uint8_t fctw; + uint8_t __fx_rsvd; + uint16_t fop; + uint64_t rip; + uint64_t rdp; + uint32_t mxcsr; + uint32_t mxcsr_mask; + union { + uint16_t fpr_16[5]; + upad128_t __fpr_pad; + } st[8]; + upad128_t xmm[16]; + upad128_t __fx_ign2[6]; + uint32_t status; /* sw at exception */ + uint32_t xstatus; /* mxcsr at exception */ + } fpchip_state; + uint32_t f_fpregs[130]; + } fp_reg_set; +} fpregset_t; + +#else /* __i386 */ + +/* + * This definition of the floating point structure is binary + * compatible with the Intel386 psABI definition, and source + * compatible with that specification for x87-style floating point. + * It also allows SSE/SSE2 state to be accessed on machines that + * possess such hardware capabilities. + */ +typedef struct _fpu { + union { + struct _fpchip_state { + uint32_t state[27]; /* 287/387 saved state */ + uint32_t status; /* saved at exception */ + uint32_t mxcsr; /* SSE control and status */ + uint32_t xstatus; /* SSE mxcsr at exception */ + uint32_t __pad[2]; /* align to 128-bits */ + upad128_t xmm[8]; /* %xmm0-%xmm7 */ + } fpchip_state; + struct _fp_emul_space { /* for emulator(s) */ + uint8_t fp_emul[246]; + uint8_t fp_epad[2]; + } fp_emul_space; + uint32_t f_fpregs[95]; /* union of the above */ + } fp_reg_set; +} fpregset_t; + +#endif /* __i386 */ + +#if defined(_SYSCALL32) + +/* Kernel view of user i386 fpu structure */ + +typedef struct fpu32 { + union { + struct fpchip32_state { + uint32_t state[27]; /* 287/387 saved state */ + uint32_t status; /* saved at exception */ + uint32_t mxcsr; /* SSE control and status */ + uint32_t xstatus; /* SSE mxcsr at exception */ + uint32_t __pad[2]; /* align to 128-bits */ + uint32_t xmm[8][4]; /* %xmm0-%xmm7 */ + } fpchip_state; + uint32_t f_fpregs[95]; /* union of the above */ + } fp_reg_set; +} fpregset32_t; + +#endif /* _SYSCALL32 */ + +/* + * Structure mcontext defines the complete hardware machine state. + * (This structure is specified in the i386 ABI suppl.) + */ +typedef struct { + gregset_t gregs; /* general register set */ + fpregset_t fpregs; /* floating point register set */ +} mcontext_t; + +#if defined(_SYSCALL32) + +typedef struct { + gregset32_t gregs; /* general register set */ + fpregset32_t fpregs; /* floating point register set */ +} mcontext32_t; + +#endif /* _SYSCALL32 */ + +#endif /* _ASM */ + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_MCONTEXT_H */ |