Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 | /* * Copyright (c) 2004-2006 Apple Computer, Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. The rights granted to you under the License * may not be used to create, or enable the creation or redistribution of, * unlawful or unlicensed copies of an Apple operating system, or to * circumvent, violate, or enable the circumvention or violation of, any * terms of an Apple operating system software license agreement. * * Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ #include <sys/cdefs.h> #include <sys/_types.h> #ifdef __need_ucontext_t #ifndef __need_struct_ucontext #define __need_struct_ucontext #endif /* __need_struct_ucontext */ #endif /* __need_ucontext_t */ #ifdef __need_ucontext64_t #ifndef __need_struct_ucontext64 #define __need_struct_ucontext64 #endif /* __need_struct_ucontext64 */ #endif /* __need_ucontext64_t */ #ifdef __need_struct_ucontext #ifndef __need_struct_mcontext #define __need_struct_mcontext #endif /* __need_struct_mcontext */ #endif /* __need_struct_ucontext */ #ifdef __need_struct_ucontext64 #ifndef __need_struct_mcontext64 #define __need_struct_mcontext64 #endif /* __need_struct_mcontext64 */ #endif /* __need_struct_ucontext64 */ #if defined(__need_struct_mcontext) || defined(__need_struct_mcontext64) #include <machine/_structs.h> #endif /* __need_struct_mcontext || __need_struct_mcontext64 */ #if defined(__need_stack_t) || defined(__need_struct_ucontext) || defined(__need_struct_ucontext64) #ifndef __need_struct_sigaltstack #define __need_struct_sigaltstack #endif /* __need_struct_sigaltstack */ #endif /* __need_stack_t || __need_struct_ucontext || __need_struct_ucontext64 */ #ifdef __need_struct_sigaltstack #undef __need_struct_sigaltstack /* Structure used in sigaltstack call. */ #ifndef _STRUCT_SIGALTSTACK #if __DARWIN_UNIX03 #define _STRUCT_SIGALTSTACK struct __darwin_sigaltstack #else /* !__DARWIN_UNIX03 */ #define _STRUCT_SIGALTSTACK struct sigaltstack #endif /* __DARWIN_UNIX03 */ _STRUCT_SIGALTSTACK { void *ss_sp; /* signal stack base */ __darwin_size_t ss_size; /* signal stack length */ int ss_flags; /* SA_DISABLE and/or SA_ONSTACK */ }; #endif /* _STRUCT_SIGALTSTACK */ #endif /* __need_struct_sigaltstack */ #ifdef __need_struct_timespec #undef __need_struct_timespec #ifndef _STRUCT_TIMESPEC #define _STRUCT_TIMESPEC struct timespec _STRUCT_TIMESPEC { __darwin_time_t tv_sec; long tv_nsec; }; #endif /* _STRUCT_TIMESPEC */ #endif /* __need_struct_timespec */ #ifdef __need_struct_timeval #undef __need_struct_timeval #ifndef _STRUCT_TIMEVAL #define _STRUCT_TIMEVAL struct timeval _STRUCT_TIMEVAL { __darwin_time_t tv_sec; /* seconds */ __darwin_suseconds_t tv_usec; /* and microseconds */ }; #endif /* _STRUCT_TIMEVAL */ #endif /* __need_struct_timeval */ #ifdef __need_struct_timeval32 #undef __need_struct_timeval32 #ifndef _STRUCT_TIMEVAL32 #define _STRUCT_TIMEVAL32 struct timeval32 _STRUCT_TIMEVAL32 { __int32_t tv_sec; /* seconds */ __int32_t tv_usec; /* and microseconds */ }; #endif /* _STRUCT_TIMEVAL32 */ #endif /* __need_struct_timeval32 */ #ifdef __need_struct_ucontext #undef __need_struct_ucontext #ifndef _STRUCT_UCONTEXT #if __DARWIN_UNIX03 #define _STRUCT_UCONTEXT struct __darwin_ucontext #else /* !__DARWIN_UNIX03 */ #define _STRUCT_UCONTEXT struct ucontext #endif /* __DARWIN_UNIX03 */ _STRUCT_UCONTEXT { int uc_onstack; __darwin_sigset_t uc_sigmask; /* signal mask used by this context */ _STRUCT_SIGALTSTACK uc_stack; /* stack used by this context */ _STRUCT_UCONTEXT *uc_link; /* pointer to resuming context */ __darwin_size_t uc_mcsize; /* size of the machine context passed in */ _STRUCT_MCONTEXT *uc_mcontext; /* pointer to machine specific context */ #ifdef _XOPEN_SOURCE _STRUCT_MCONTEXT __mcontext_data; #endif /* _XOPEN_SOURCE */ }; #endif /* _STRUCT_UCONTEXT */ #endif /* __need_struct_ucontext */ #ifdef __need_struct_ucontext64 #undef __need_struct_ucontext64 #ifndef _STRUCT_UCONTEXT64 #if __DARWIN_UNIX03 #define _STRUCT_UCONTEXT64 struct __darwin_ucontext64 #else /* !__DARWIN_UNIX03 */ #define _STRUCT_UCONTEXT64 struct ucontext64 #endif /* __DARWIN_UNIX03 */ _STRUCT_UCONTEXT64 { int uc_onstack; __darwin_sigset_t uc_sigmask; /* signal mask used by this context */ _STRUCT_SIGALTSTACK uc_stack; /* stack used by this context */ _STRUCT_UCONTEXT64 *uc_link; /* pointer to resuming context */ __darwin_size_t uc_mcsize; /* size of the machine context passed in */ _STRUCT_MCONTEXT64 *uc_mcontext64; /* pointer to machine specific context */ }; #endif /* _STRUCT_UCONTEXT64 */ #endif /* __need_struct_ucontext64 */ #ifdef KERNEL /* LP64 version of struct timespec. time_t is a long and must grow when * we're dealing with a 64-bit process. * WARNING - keep in sync with struct timespec */ #ifdef __need_struct_user_timespec #undef __need_struct_user_timespec #ifndef _STRUCT_USER_TIMESPEC #define _STRUCT_USER_TIMESPEC struct user_timespec _STRUCT_USER_TIMESPEC { user_time_t tv_sec; /* seconds */ __int64_t tv_nsec __attribute((aligned(8))); /* and nanoseconds */ }; #endif /* _STRUCT_USER_TIMESPEC */ #endif /* __need_struct_user_timespec */ #endif /* KERNEL */ #ifdef __need_fd_set #undef __need_fd_set #ifndef _FD_SET #define _FD_SET /* * Select uses bit masks of file descriptors in longs. These macros * manipulate such bit fields (the filesystem macros use chars). The * extra protection here is to permit application redefinition above * the default size. */ #ifdef FD_SETSIZE #define __DARWIN_FD_SETSIZE FD_SETSIZE #else /* !FD_SETSIZE */ #define __DARWIN_FD_SETSIZE 1024 #endif /* FD_SETSIZE */ #define __DARWIN_NBBY 8 /* bits in a byte */ #define __DARWIN_NFDBITS (sizeof(__int32_t) * __DARWIN_NBBY) /* bits per mask */ #define __DARWIN_howmany(x, y) (((x) + ((y) - 1)) / (y)) /* # y's == x bits? */ __BEGIN_DECLS typedef struct fd_set { __int32_t fds_bits[__DARWIN_howmany(__DARWIN_FD_SETSIZE, __DARWIN_NFDBITS)]; } fd_set; __END_DECLS /* This inline avoids argument side-effect issues with FD_ISSET() */ static __inline int __darwin_fd_isset(int _n, struct fd_set *_p) { return (_p->fds_bits[_n/__DARWIN_NFDBITS] & (1<<(_n % __DARWIN_NFDBITS))); } #define __DARWIN_FD_SET(n, p) do { int __fd = (n); ((p)->fds_bits[__fd/__DARWIN_NFDBITS] |= (1<<(__fd % __DARWIN_NFDBITS))); } while(0) #define __DARWIN_FD_CLR(n, p) do { int __fd = (n); ((p)->fds_bits[__fd/__DARWIN_NFDBITS] &= ~(1<<(__fd % __DARWIN_NFDBITS))); } while(0) #define __DARWIN_FD_ISSET(n, p) __darwin_fd_isset((n), (p)) #if __GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ >= 3 /* * Use the built-in bzero function instead of the library version so that * we do not pollute the namespace or introduce prototype warnings. */ #define __DARWIN_FD_ZERO(p) __builtin_bzero(p, sizeof(*(p))) #else #define __DARWIN_FD_ZERO(p) bzero(p, sizeof(*(p))) #endif #define __DARWIN_FD_COPY(f, t) bcopy(f, t, sizeof(*(f))) #endif /* _FD_SET */ #endif /* __need_fd_set */ #ifdef __need_stack_t #undef __need_stack_t #ifndef _STACK_T #define _STACK_T typedef _STRUCT_SIGALTSTACK stack_t; /* [???] signal stack */ #endif /* _STACK_T */ #endif /* __need_stack_t */ #ifdef __need_ucontext_t #undef __need_ucontext_t /* user context */ #ifndef _UCONTEXT_T #define _UCONTEXT_T typedef _STRUCT_UCONTEXT ucontext_t; /* [???] user context */ #endif /* _UCONTEXT_T */ #endif /* __need_ucontext_t */ #ifdef __need_ucontext64_t #undef __need_ucontext64_t #ifndef _UCONTEXT64_T #define _UCONTEXT64_T typedef _STRUCT_UCONTEXT64 ucontext64_t; /* [???] user context */ #endif /* _UCONTEXT64_T */ #endif /* __need_ucontext64_t */ |