1 /* 2 * Copyright (c) 2003-2012 Apple Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 29 #ifndef __I386_MCONTEXT_H_ 30 #define __I386_MCONTEXT_H_ 31 32 #if defined (__i386__) || defined (__x86_64__) 33 34 #include <sys/cdefs.h> /* __DARWIN_UNIX03 */ 35 #include <sys/appleapiopts.h> 36 #include <mach/machine/_structs.h> 37 38 #ifndef _STRUCT_MCONTEXT32 39 #if __DARWIN_UNIX03 40 #define _STRUCT_MCONTEXT32 struct __darwin_mcontext32 41 _STRUCT_MCONTEXT32 42 { 43 _STRUCT_X86_EXCEPTION_STATE32 __es; 44 _STRUCT_X86_THREAD_STATE32 __ss; 45 _STRUCT_X86_FLOAT_STATE32 __fs; 46 }; 47 48 #define _STRUCT_MCONTEXT_AVX32 struct __darwin_mcontext_avx32 49 _STRUCT_MCONTEXT_AVX32 50 { 51 _STRUCT_X86_EXCEPTION_STATE32 __es; 52 _STRUCT_X86_THREAD_STATE32 __ss; 53 _STRUCT_X86_AVX_STATE32 __fs; 54 }; 55 56 #if defined(_STRUCT_X86_AVX512_STATE32) 57 #define _STRUCT_MCONTEXT_AVX512_32 struct __darwin_mcontext_avx512_32 58 _STRUCT_MCONTEXT_AVX512_32 59 { 60 _STRUCT_X86_EXCEPTION_STATE32 __es; 61 _STRUCT_X86_THREAD_STATE32 __ss; 62 _STRUCT_X86_AVX512_STATE32 __fs; 63 }; 64 #endif /* _STRUCT_X86_AVX512_STATE32 */ 65 66 #else /* !__DARWIN_UNIX03 */ 67 #define _STRUCT_MCONTEXT32 struct mcontext32 68 _STRUCT_MCONTEXT32 69 { 70 _STRUCT_X86_EXCEPTION_STATE32 es; 71 _STRUCT_X86_THREAD_STATE32 ss; 72 _STRUCT_X86_FLOAT_STATE32 fs; 73 }; 74 75 #define _STRUCT_MCONTEXT_AVX32 struct mcontext_avx32 76 _STRUCT_MCONTEXT_AVX32 77 { 78 _STRUCT_X86_EXCEPTION_STATE32 es; 79 _STRUCT_X86_THREAD_STATE32 ss; 80 _STRUCT_X86_AVX_STATE32 fs; 81 }; 82 83 #if defined(_STRUCT_X86_AVX512_STATE32) 84 #define _STRUCT_MCONTEXT_AVX512_32 struct mcontext_avx512_32 85 _STRUCT_MCONTEXT_AVX512_32 86 { 87 _STRUCT_X86_EXCEPTION_STATE32 es; 88 _STRUCT_X86_THREAD_STATE32 ss; 89 _STRUCT_X86_AVX512_STATE32 fs; 90 }; 91 #endif /* _STRUCT_X86_AVX512_STATE32 */ 92 93 #endif /* __DARWIN_UNIX03 */ 94 #endif /* _STRUCT_MCONTEXT32 */ 95 96 #ifndef _STRUCT_MCONTEXT64 97 #if __DARWIN_UNIX03 98 #define _STRUCT_MCONTEXT64 struct __darwin_mcontext64 99 _STRUCT_MCONTEXT64 100 { 101 _STRUCT_X86_EXCEPTION_STATE64 __es; 102 _STRUCT_X86_THREAD_STATE64 __ss; 103 _STRUCT_X86_FLOAT_STATE64 __fs; 104 }; 105 106 #define _STRUCT_MCONTEXT64_FULL struct __darwin_mcontext64_full 107 _STRUCT_MCONTEXT64_FULL 108 { 109 _STRUCT_X86_EXCEPTION_STATE64 __es; 110 _STRUCT_X86_THREAD_FULL_STATE64 __ss; 111 _STRUCT_X86_FLOAT_STATE64 __fs; 112 }; 113 114 #define _STRUCT_MCONTEXT_AVX64 struct __darwin_mcontext_avx64 115 _STRUCT_MCONTEXT_AVX64 116 { 117 _STRUCT_X86_EXCEPTION_STATE64 __es; 118 _STRUCT_X86_THREAD_STATE64 __ss; 119 _STRUCT_X86_AVX_STATE64 __fs; 120 }; 121 122 #define _STRUCT_MCONTEXT_AVX64_FULL struct __darwin_mcontext_avx64_full 123 _STRUCT_MCONTEXT_AVX64_FULL 124 { 125 _STRUCT_X86_EXCEPTION_STATE64 __es; 126 _STRUCT_X86_THREAD_FULL_STATE64 __ss; 127 _STRUCT_X86_AVX_STATE64 __fs; 128 }; 129 130 #if defined(_STRUCT_X86_AVX512_STATE64) 131 #define _STRUCT_MCONTEXT_AVX512_64 struct __darwin_mcontext_avx512_64 132 _STRUCT_MCONTEXT_AVX512_64 133 { 134 _STRUCT_X86_EXCEPTION_STATE64 __es; 135 _STRUCT_X86_THREAD_STATE64 __ss; 136 _STRUCT_X86_AVX512_STATE64 __fs; 137 }; 138 139 #define _STRUCT_MCONTEXT_AVX512_64_FULL struct __darwin_mcontext_avx512_64_full 140 _STRUCT_MCONTEXT_AVX512_64_FULL 141 { 142 _STRUCT_X86_EXCEPTION_STATE64 __es; 143 _STRUCT_X86_THREAD_FULL_STATE64 __ss; 144 _STRUCT_X86_AVX512_STATE64 __fs; 145 }; 146 #endif /* _STRUCT_X86_AVX512_STATE64 */ 147 148 #else /* !__DARWIN_UNIX03 */ 149 #define _STRUCT_MCONTEXT64 struct mcontext64 150 _STRUCT_MCONTEXT64 151 { 152 _STRUCT_X86_EXCEPTION_STATE64 es; 153 _STRUCT_X86_THREAD_STATE64 ss; 154 _STRUCT_X86_FLOAT_STATE64 fs; 155 }; 156 157 #define _STRUCT_MCONTEXT64_FULL struct mcontext64_full 158 _STRUCT_MCONTEXT64_FULL 159 { 160 _STRUCT_X86_EXCEPTION_STATE64 es; 161 _STRUCT_X86_THREAD_FULL_STATE64 ss; 162 _STRUCT_X86_FLOAT_STATE64 fs; 163 }; 164 165 #define _STRUCT_MCONTEXT_AVX64 struct mcontext_avx64 166 _STRUCT_MCONTEXT_AVX64 167 { 168 _STRUCT_X86_EXCEPTION_STATE64 es; 169 _STRUCT_X86_THREAD_STATE64 ss; 170 _STRUCT_X86_AVX_STATE64 fs; 171 }; 172 173 #define _STRUCT_MCONTEXT_AVX64_FULL struct mcontext_avx64_full 174 _STRUCT_MCONTEXT_AVX64_FULL 175 { 176 _STRUCT_X86_EXCEPTION_STATE64 es; 177 _STRUCT_X86_THREAD_FULL_STATE64 ss; 178 _STRUCT_X86_AVX_STATE64 fs; 179 }; 180 181 #if defined(_STRUCT_X86_AVX512_STATE64) 182 #define _STRUCT_MCONTEXT_AVX512_64 struct mcontext_avx512_64 183 _STRUCT_MCONTEXT_AVX512_64 184 { 185 _STRUCT_X86_EXCEPTION_STATE64 es; 186 _STRUCT_X86_THREAD_STATE64 ss; 187 _STRUCT_X86_AVX512_STATE64 fs; 188 }; 189 190 #define _STRUCT_MCONTEXT_AVX512_64_FULL struct mcontext_avx512_64_full 191 _STRUCT_MCONTEXT_AVX512_64_FULL 192 { 193 _STRUCT_X86_EXCEPTION_STATE64 es; 194 _STRUCT_X86_THREAD_FULL_STATE64 ss; 195 _STRUCT_X86_AVX512_STATE64 fs; 196 }; 197 #endif /* _STRUCT_X86_AVX512_STATE64 */ 198 199 #endif /* __DARWIN_UNIX03 */ 200 #endif /* _STRUCT_MCONTEXT64 */ 201 202 203 #ifndef _MCONTEXT_T 204 #define _MCONTEXT_T 205 #if defined(__LP64__) 206 typedef _STRUCT_MCONTEXT64 *mcontext_t; 207 #define _STRUCT_MCONTEXT _STRUCT_MCONTEXT64 208 #else 209 typedef _STRUCT_MCONTEXT32 *mcontext_t; 210 #define _STRUCT_MCONTEXT _STRUCT_MCONTEXT32 211 #endif 212 #endif /* _MCONTEXT_T */ 213 214 #endif /* defined (__i386__) || defined (__x86_64__) */ 215 216 #endif /* __I386_MCONTEXT_H_ */ 217