正在显示
1 个修改的文件
包含
36 行增加
和
344 行删除
| @@ -57,227 +57,55 @@ | @@ -57,227 +57,55 @@ | ||
| 57 | /***************************************** | 57 | /***************************************** |
| 58 | * Platform specifics | 58 | * Platform specifics |
| 59 | */ | 59 | */ |
| 60 | -#if defined (AIX) | ||
| 61 | - #define MD_STACK_GROWS_DOWN | ||
| 62 | - #define MD_USE_SYSV_ANON_MMAP | ||
| 63 | - #define MD_ACCEPT_NB_INHERITED | ||
| 64 | - #define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 65 | - | ||
| 66 | - #ifndef MD_HAVE_SOCKLEN_T | ||
| 67 | - #define MD_HAVE_SOCKLEN_T | ||
| 68 | - #define socklen_t unsigned long | ||
| 69 | - #endif | ||
| 70 | - | ||
| 71 | - #define MD_SETJMP(env) _setjmp(env) | ||
| 72 | - #define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 73 | - | ||
| 74 | - #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 75 | - ST_BEGIN_MACRO \ | ||
| 76 | - if (MD_SETJMP((_thread)->context)) \ | ||
| 77 | - _main(); \ | ||
| 78 | - (_thread)->context[3] = (long) (_sp); \ | ||
| 79 | - ST_END_MACRO | ||
| 80 | - | ||
| 81 | - #define MD_GET_UTIME() \ | ||
| 82 | - timebasestruct_t rt; \ | ||
| 83 | - (void) read_real_time(&rt, TIMEBASE_SZ); \ | ||
| 84 | - (void) time_base_to_time(&rt, TIMEBASE_SZ); \ | ||
| 85 | - return (rt.tb_high * 1000000LL + rt.tb_low / 1000) | ||
| 86 | - | 60 | +#if defined (LINUX) |
| 61 | + /* linux ok, defined bellow */ | ||
| 62 | +#elif defined (AIX) | ||
| 63 | + #error "AIX not supported" | ||
| 87 | #elif defined (CYGWIN) | 64 | #elif defined (CYGWIN) |
| 88 | - #define MD_STACK_GROWS_DOWN | ||
| 89 | - #define MD_USE_BSD_ANON_MMAP | ||
| 90 | - #define MD_ACCEPT_NB_NOT_INHERITED | ||
| 91 | - #define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 92 | - | ||
| 93 | - #define MD_SETJMP(env) setjmp(env) | ||
| 94 | - #define MD_LONGJMP(env, val) longjmp(env, val) | ||
| 95 | - | ||
| 96 | - #define MD_JB_SP 7 | ||
| 97 | - | ||
| 98 | - #define MD_GET_SP(_t) (_t)->context[MD_JB_SP] | ||
| 99 | - | ||
| 100 | - #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 101 | - ST_BEGIN_MACRO \ | ||
| 102 | - if (MD_SETJMP((_thread)->context)) \ | ||
| 103 | - _main(); \ | ||
| 104 | - MD_GET_SP(_thread) = (long) (_sp); \ | ||
| 105 | - ST_END_MACRO | ||
| 106 | - | ||
| 107 | - #define MD_GET_UTIME() \ | ||
| 108 | - struct timeval tv; \ | ||
| 109 | - (void) gettimeofday(&tv, NULL); \ | ||
| 110 | - return (tv.tv_sec * 1000000LL + tv.tv_usec) | ||
| 111 | - | 65 | + #error "CYGWIN not supported" |
| 112 | #elif defined (DARWIN) | 66 | #elif defined (DARWIN) |
| 113 | - #define MD_STACK_GROWS_DOWN | ||
| 114 | - #define MD_USE_BSD_ANON_MMAP | ||
| 115 | - #define MD_ACCEPT_NB_INHERITED | ||
| 116 | - #define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 117 | - #define MD_HAVE_SOCKLEN_T | ||
| 118 | - | ||
| 119 | - #define MD_SETJMP(env) _setjmp(env) | ||
| 120 | - #define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 121 | - | ||
| 122 | - #if defined(__ppc__) | ||
| 123 | - #define MD_JB_SP 0 | ||
| 124 | - #elif defined(__i386__) | ||
| 125 | - #define MD_JB_SP 9 | ||
| 126 | - #elif defined(__x86_64__) | ||
| 127 | - #define MD_JB_SP 4 | ||
| 128 | - #else | ||
| 129 | - #error Unknown CPU architecture | ||
| 130 | - #endif | ||
| 131 | - | ||
| 132 | - #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 133 | - ST_BEGIN_MACRO \ | ||
| 134 | - if (MD_SETJMP((_thread)->context)) \ | ||
| 135 | - _main(); \ | ||
| 136 | - *((long *)&((_thread)->context[MD_JB_SP])) = (long) (_sp); \ | ||
| 137 | - ST_END_MACRO | ||
| 138 | - | ||
| 139 | - #define MD_GET_UTIME() \ | ||
| 140 | - struct timeval tv; \ | ||
| 141 | - (void) gettimeofday(&tv, NULL); \ | ||
| 142 | - return (tv.tv_sec * 1000000LL + tv.tv_usec) | ||
| 143 | - | 67 | + #error "DARWIN not supported" |
| 144 | #elif defined (FREEBSD) | 68 | #elif defined (FREEBSD) |
| 145 | - #define MD_STACK_GROWS_DOWN | ||
| 146 | - #define MD_USE_BSD_ANON_MMAP | ||
| 147 | - #define MD_ACCEPT_NB_INHERITED | ||
| 148 | - #define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 149 | - | ||
| 150 | - #define MD_SETJMP(env) _setjmp(env) | ||
| 151 | - #define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 152 | - | ||
| 153 | - #if defined(__i386__) | ||
| 154 | - #define MD_JB_SP 2 | ||
| 155 | - #elif defined(__alpha__) | ||
| 156 | - #define MD_JB_SP 34 | ||
| 157 | - #elif defined(__amd64__) | ||
| 158 | - #define MD_JB_SP 2 | ||
| 159 | - #else | ||
| 160 | - #error Unknown CPU architecture | ||
| 161 | - #endif | ||
| 162 | - | ||
| 163 | - #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 164 | - ST_BEGIN_MACRO \ | ||
| 165 | - if (MD_SETJMP((_thread)->context)) \ | ||
| 166 | - _main(); \ | ||
| 167 | - (_thread)->context[0]._jb[MD_JB_SP] = (long) (_sp); \ | ||
| 168 | - ST_END_MACRO | ||
| 169 | - | ||
| 170 | - #define MD_GET_UTIME() \ | ||
| 171 | - struct timeval tv; \ | ||
| 172 | - (void) gettimeofday(&tv, NULL); \ | ||
| 173 | - return (tv.tv_sec * 1000000LL + tv.tv_usec) | ||
| 174 | - | 69 | + #error "FREEBSD not supported" |
| 175 | #elif defined (HPUX) | 70 | #elif defined (HPUX) |
| 176 | - #define MD_STACK_GROWS_UP | ||
| 177 | - #define MD_USE_BSD_ANON_MMAP | ||
| 178 | - #define MD_ACCEPT_NB_INHERITED | ||
| 179 | - #define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 180 | - | ||
| 181 | - #define MD_SETJMP(env) _setjmp(env) | ||
| 182 | - #define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 183 | - | ||
| 184 | - #ifndef __LP64__ | ||
| 185 | - /* 32-bit mode (ILP32 data model) */ | ||
| 186 | - #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 187 | - ST_BEGIN_MACRO \ | ||
| 188 | - if (MD_SETJMP((_thread)->context)) \ | ||
| 189 | - _main(); \ | ||
| 190 | - ((long *)((_thread)->context))[1] = (long) (_sp); \ | ||
| 191 | - ST_END_MACRO | ||
| 192 | - #else | ||
| 193 | - /* 64-bit mode (LP64 data model) */ | ||
| 194 | - #define MD_STACK_PAD_SIZE 256 | ||
| 195 | - /* Last stack frame must be preserved */ | ||
| 196 | - #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 197 | - ST_BEGIN_MACRO \ | ||
| 198 | - if (MD_SETJMP((_thread)->context)) \ | ||
| 199 | - _main(); \ | ||
| 200 | - memcpy((char *)(_sp) - MD_STACK_PAD_SIZE, \ | ||
| 201 | - ((char **)((_thread)->context))[1] - MD_STACK_PAD_SIZE, \ | ||
| 202 | - MD_STACK_PAD_SIZE); \ | ||
| 203 | - ((long *)((_thread)->context))[1] = (long) (_sp); \ | ||
| 204 | - ST_END_MACRO | ||
| 205 | - #endif /* !__LP64__ */ | ||
| 206 | - | ||
| 207 | - #define MD_GET_UTIME() \ | ||
| 208 | - struct timeval tv; \ | ||
| 209 | - (void) gettimeofday(&tv, NULL); \ | ||
| 210 | - return (tv.tv_sec * 1000000LL + tv.tv_usec) | ||
| 211 | - | 71 | + #error "HPUX not supported" |
| 212 | #elif defined (IRIX) | 72 | #elif defined (IRIX) |
| 213 | - #include <sys/syssgi.h> | ||
| 214 | - | ||
| 215 | - #define MD_STACK_GROWS_DOWN | ||
| 216 | - #define MD_USE_SYSV_ANON_MMAP | ||
| 217 | - #define MD_ACCEPT_NB_INHERITED | ||
| 218 | - #define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 219 | - | ||
| 220 | - #define MD_SETJMP(env) setjmp(env) | ||
| 221 | - #define MD_LONGJMP(env, val) longjmp(env, val) | ||
| 222 | - | ||
| 223 | - #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 224 | - ST_BEGIN_MACRO \ | ||
| 225 | - (void) MD_SETJMP((_thread)->context); \ | ||
| 226 | - (_thread)->context[JB_SP] = (long) (_sp); \ | ||
| 227 | - (_thread)->context[JB_PC] = (long) _main; \ | ||
| 228 | - ST_END_MACRO | ||
| 229 | - | ||
| 230 | - #define MD_GET_UTIME() \ | ||
| 231 | - static int inited = 0; \ | ||
| 232 | - static clockid_t clock_id = CLOCK_SGI_CYCLE; \ | ||
| 233 | - struct timespec ts; \ | ||
| 234 | - if (!inited) { \ | ||
| 235 | - if (syssgi(SGI_CYCLECNTR_SIZE) < 64) \ | ||
| 236 | - clock_id = CLOCK_REALTIME; \ | ||
| 237 | - inited = 1; \ | ||
| 238 | - } \ | ||
| 239 | - (void) clock_gettime(clock_id, &ts); \ | ||
| 240 | - return (ts.tv_sec * 1000000LL + ts.tv_nsec / 1000) | ||
| 241 | - | ||
| 242 | - /* | ||
| 243 | - * Cap the stack by zeroing out the saved return address register | ||
| 244 | - * value. This allows libexc, used by SpeedShop, to know when to stop | ||
| 245 | - * backtracing since it won't find main, start, or any other known | ||
| 246 | - * stack root function in a state thread's stack. Without this libexc | ||
| 247 | - * traces right off the stack and crashes. | ||
| 248 | - * The function preamble stores ra at 8(sp), this stores zero there. | ||
| 249 | - * N.B. This macro is compiler/ABI dependent. It must change if ANY more | ||
| 250 | - * automatic variables are added to the _st_thread_main() routine, because | ||
| 251 | - * the address where ra is stored will change. | ||
| 252 | - */ | ||
| 253 | - #if !defined(__GNUC__) && defined(_MIPS_SIM) && _MIPS_SIM != _ABIO32 | ||
| 254 | - #define MD_CAP_STACK(var_addr) \ | ||
| 255 | - (((volatile __uint64_t *)(var_addr))[1] = 0) | ||
| 256 | - #endif | 73 | + #error "IRIX not supported" |
| 74 | +#elif defined (NETBSD) | ||
| 75 | + #error "IRIX not supported" | ||
| 76 | +#elif defined (OPENBSD) | ||
| 77 | + #error "IRIX not supported" | ||
| 78 | +#elif defined (OSF1) | ||
| 79 | + #error "IRIX not supported" | ||
| 80 | +#elif defined (SOLARIS) | ||
| 81 | + #error "IRIX not supported" | ||
| 82 | +#else | ||
| 83 | + #error "Unknown OS" | ||
| 84 | +#endif /* OS */ | ||
| 257 | 85 | ||
| 258 | -#elif defined (LINUX) | ||
| 259 | - /* | 86 | +/* linux only, defined bellow */ |
| 87 | +/* | ||
| 260 | * These are properties of the linux kernel and are the same on every | 88 | * These are properties of the linux kernel and are the same on every |
| 261 | * flavor and architecture. | 89 | * flavor and architecture. |
| 262 | */ | 90 | */ |
| 263 | - #define MD_USE_BSD_ANON_MMAP | ||
| 264 | - #define MD_ACCEPT_NB_NOT_INHERITED | ||
| 265 | - #define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 266 | - /* | 91 | +#define MD_USE_BSD_ANON_MMAP |
| 92 | +#define MD_ACCEPT_NB_NOT_INHERITED | ||
| 93 | +#define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 94 | +/* | ||
| 267 | * Modern GNU/Linux is Posix.1g compliant. | 95 | * Modern GNU/Linux is Posix.1g compliant. |
| 268 | */ | 96 | */ |
| 269 | - #define MD_HAVE_SOCKLEN_T | 97 | +#define MD_HAVE_SOCKLEN_T |
| 270 | 98 | ||
| 271 | - /* | 99 | +/* |
| 272 | * All architectures and flavors of linux have the gettimeofday | 100 | * All architectures and flavors of linux have the gettimeofday |
| 273 | * function but if you know of a faster way, use it. | 101 | * function but if you know of a faster way, use it. |
| 274 | */ | 102 | */ |
| 275 | - #define MD_GET_UTIME() \ | 103 | +#define MD_GET_UTIME() \ |
| 276 | struct timeval tv; \ | 104 | struct timeval tv; \ |
| 277 | (void) gettimeofday(&tv, NULL); \ | 105 | (void) gettimeofday(&tv, NULL); \ |
| 278 | return (tv.tv_sec * 1000000LL + tv.tv_usec) | 106 | return (tv.tv_sec * 1000000LL + tv.tv_usec) |
| 279 | 107 | ||
| 280 | - #if defined(__ia64__) | 108 | +#if defined(__ia64__) |
| 281 | #define MD_STACK_GROWS_DOWN | 109 | #define MD_STACK_GROWS_DOWN |
| 282 | 110 | ||
| 283 | /* | 111 | /* |
| @@ -305,7 +133,7 @@ | @@ -305,7 +133,7 @@ | ||
| 305 | (_thread)->context[0].__jmpbuf[0] = (long) (_sp); \ | 133 | (_thread)->context[0].__jmpbuf[0] = (long) (_sp); \ |
| 306 | (_thread)->context[0].__jmpbuf[17] = (long) (_bsp); \ | 134 | (_thread)->context[0].__jmpbuf[17] = (long) (_bsp); \ |
| 307 | ST_END_MACRO | 135 | ST_END_MACRO |
| 308 | - #elif defined(__mips__) | 136 | +#elif defined(__mips__) |
| 309 | #define MD_STACK_GROWS_DOWN | 137 | #define MD_STACK_GROWS_DOWN |
| 310 | 138 | ||
| 311 | #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 139 | #define MD_INIT_CONTEXT(_thread, _sp, _main) \ |
| @@ -314,7 +142,7 @@ | @@ -314,7 +142,7 @@ | ||
| 314 | _thread->context[0].__jmpbuf[0].__pc = (__ptr_t) _main; \ | 142 | _thread->context[0].__jmpbuf[0].__pc = (__ptr_t) _main; \ |
| 315 | _thread->context[0].__jmpbuf[0].__sp = _sp; \ | 143 | _thread->context[0].__jmpbuf[0].__sp = _sp; \ |
| 316 | ST_END_MACRO | 144 | ST_END_MACRO |
| 317 | - #else /* Not IA-64 or mips */ | 145 | +#else /* Not IA-64 or mips */ |
| 318 | /* | 146 | /* |
| 319 | * On linux, there are a few styles of jmpbuf format. These vary based | 147 | * On linux, there are a few styles of jmpbuf format. These vary based |
| 320 | * on architecture/glibc combination. | 148 | * on architecture/glibc combination. |
| @@ -431,154 +259,18 @@ | @@ -431,154 +259,18 @@ | ||
| 431 | _main(); \ | 259 | _main(); \ |
| 432 | MD_GET_SP(_thread) = (long) (_sp); \ | 260 | MD_GET_SP(_thread) = (long) (_sp); \ |
| 433 | ST_END_MACRO | 261 | ST_END_MACRO |
| 434 | - #endif /* Cases with different MD_INIT_CONTEXT */ | 262 | +#endif /* Cases with different MD_INIT_CONTEXT */ |
| 435 | 263 | ||
| 436 | - #if defined(MD_USE_BUILTIN_SETJMP) && !defined(USE_LIBC_SETJMP) | 264 | +#if defined(MD_USE_BUILTIN_SETJMP) && !defined(USE_LIBC_SETJMP) |
| 437 | #define MD_SETJMP(env) _st_md_cxt_save(env) | 265 | #define MD_SETJMP(env) _st_md_cxt_save(env) |
| 438 | #define MD_LONGJMP(env, val) _st_md_cxt_restore(env, val) | 266 | #define MD_LONGJMP(env, val) _st_md_cxt_restore(env, val) |
| 439 | 267 | ||
| 440 | extern int _st_md_cxt_save(jmp_buf env); | 268 | extern int _st_md_cxt_save(jmp_buf env); |
| 441 | extern void _st_md_cxt_restore(jmp_buf env, int val); | 269 | extern void _st_md_cxt_restore(jmp_buf env, int val); |
| 442 | - #else | ||
| 443 | - #define MD_SETJMP(env) setjmp(env) | ||
| 444 | - #define MD_LONGJMP(env, val) longjmp(env, val) | ||
| 445 | - #endif | ||
| 446 | - | ||
| 447 | -#elif defined (NETBSD) | ||
| 448 | - #define MD_STACK_GROWS_DOWN | ||
| 449 | - #define MD_USE_BSD_ANON_MMAP | ||
| 450 | - #define MD_ACCEPT_NB_INHERITED | ||
| 451 | - #define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 452 | - #define MD_HAVE_SOCKLEN_T | ||
| 453 | - | ||
| 454 | - #define MD_SETJMP(env) _setjmp(env) | ||
| 455 | - #define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 456 | - | ||
| 457 | - #if defined(__i386__) | ||
| 458 | - #define MD_JB_SP 2 | ||
| 459 | - #elif defined(__alpha__) | ||
| 460 | - #define MD_JB_SP 34 | ||
| 461 | - #elif defined(__sparc__) | ||
| 462 | - #define MD_JB_SP 0 | ||
| 463 | - #elif defined(__vax__) | ||
| 464 | - #define MD_JB_SP 2 | ||
| 465 | - #else | ||
| 466 | - #error Unknown CPU architecture | ||
| 467 | - #endif | ||
| 468 | - | ||
| 469 | - #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 470 | - ST_BEGIN_MACRO \ | ||
| 471 | - if (MD_SETJMP((_thread)->context)) \ | ||
| 472 | - _main(); \ | ||
| 473 | - (_thread)->context[MD_JB_SP] = (long) (_sp); \ | ||
| 474 | - ST_END_MACRO | ||
| 475 | - | ||
| 476 | - #define MD_GET_UTIME() \ | ||
| 477 | - struct timeval tv; \ | ||
| 478 | - (void) gettimeofday(&tv, NULL); \ | ||
| 479 | - return (tv.tv_sec * 1000000LL + tv.tv_usec) | ||
| 480 | - | ||
| 481 | -#elif defined (OPENBSD) | ||
| 482 | - #define MD_STACK_GROWS_DOWN | ||
| 483 | - #define MD_USE_BSD_ANON_MMAP | ||
| 484 | - #define MD_ACCEPT_NB_INHERITED | ||
| 485 | - #define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 486 | - | ||
| 487 | - #define MD_SETJMP(env) _setjmp(env) | ||
| 488 | - #define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 489 | - | ||
| 490 | - #if defined(__i386__) | ||
| 491 | - #define MD_JB_SP 2 | ||
| 492 | - #elif defined(__alpha__) | ||
| 493 | - #define MD_JB_SP 34 | ||
| 494 | - #elif defined(__sparc__) | ||
| 495 | - #define MD_JB_SP 0 | ||
| 496 | - #elif defined(__amd64__) | ||
| 497 | - #define MD_JB_SP 6 | ||
| 498 | - #else | ||
| 499 | - #error Unknown CPU architecture | ||
| 500 | - #endif | ||
| 501 | - | ||
| 502 | - #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 503 | - ST_BEGIN_MACRO \ | ||
| 504 | - if (MD_SETJMP((_thread)->context)) \ | ||
| 505 | - _main(); \ | ||
| 506 | - (_thread)->context[MD_JB_SP] = (long) (_sp); \ | ||
| 507 | - ST_END_MACRO | ||
| 508 | - | ||
| 509 | - #define MD_GET_UTIME() \ | ||
| 510 | - struct timeval tv; \ | ||
| 511 | - (void) gettimeofday(&tv, NULL); \ | ||
| 512 | - return (tv.tv_sec * 1000000LL + tv.tv_usec) | ||
| 513 | - | ||
| 514 | -#elif defined (OSF1) | ||
| 515 | - #include <signal.h> | ||
| 516 | - | ||
| 517 | - #define MD_STACK_GROWS_DOWN | ||
| 518 | - #define MD_USE_SYSV_ANON_MMAP | ||
| 519 | - #define MD_ACCEPT_NB_NOT_INHERITED | ||
| 520 | - #define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 521 | - | ||
| 522 | - #define MD_SETJMP(env) _setjmp(env) | ||
| 523 | - #define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 524 | - | ||
| 525 | - #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 526 | - ST_BEGIN_MACRO \ | ||
| 527 | - if (MD_SETJMP((_thread)->context)) \ | ||
| 528 | - _main(); \ | ||
| 529 | - ((struct sigcontext *)((_thread)->context))->sc_sp = (long) (_sp); \ | ||
| 530 | - ST_END_MACRO | ||
| 531 | - | ||
| 532 | - #define MD_GET_UTIME() \ | ||
| 533 | - struct timeval tv; \ | ||
| 534 | - (void) gettimeofday(&tv, NULL); \ | ||
| 535 | - return (tv.tv_sec * 1000000LL + tv.tv_usec) | ||
| 536 | - | ||
| 537 | -#elif defined (SOLARIS) | ||
| 538 | - #include <sys/filio.h> | ||
| 539 | - extern int getpagesize(void); | ||
| 540 | - | ||
| 541 | - #define MD_STACK_GROWS_DOWN | ||
| 542 | - #define MD_USE_SYSV_ANON_MMAP | ||
| 543 | - #define MD_ACCEPT_NB_NOT_INHERITED | ||
| 544 | - | 270 | +#else |
| 545 | #define MD_SETJMP(env) setjmp(env) | 271 | #define MD_SETJMP(env) setjmp(env) |
| 546 | #define MD_LONGJMP(env, val) longjmp(env, val) | 272 | #define MD_LONGJMP(env, val) longjmp(env, val) |
| 547 | - | ||
| 548 | - #if defined(sparc) || defined(__sparc) | ||
| 549 | - #ifdef _LP64 | ||
| 550 | - #define MD_STACK_PAD_SIZE 4095 | ||
| 551 | - #endif | ||
| 552 | - #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 553 | - ST_BEGIN_MACRO \ | ||
| 554 | - (void) MD_SETJMP((_thread)->context); \ | ||
| 555 | - (_thread)->context[1] = (long) (_sp); \ | ||
| 556 | - (_thread)->context[2] = (long) _main; \ | ||
| 557 | - ST_END_MACRO | ||
| 558 | - #elif defined(i386) || defined(__i386) | ||
| 559 | - #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 560 | - ST_BEGIN_MACRO \ | ||
| 561 | - (void) MD_SETJMP((_thread)->context); \ | ||
| 562 | - (_thread)->context[4] = (long) (_sp); \ | ||
| 563 | - (_thread)->context[5] = (long) _main; \ | ||
| 564 | - ST_END_MACRO | ||
| 565 | - #elif defined(__amd64__) | ||
| 566 | - #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 567 | - ST_BEGIN_MACRO \ | ||
| 568 | - if (MD_SETJMP((_thread)->context)) \ | ||
| 569 | - _main(); \ | ||
| 570 | - (_thread)->context[6] = (long) (_sp); \ | ||
| 571 | - ST_END_MACRO | ||
| 572 | - #else | ||
| 573 | - #error Unknown CPU architecture | ||
| 574 | - #endif | ||
| 575 | - | ||
| 576 | - #define MD_GET_UTIME() \ | ||
| 577 | - return (gethrtime() / 1000) | ||
| 578 | - | ||
| 579 | -#else | ||
| 580 | - #error Unknown OS | ||
| 581 | -#endif /* OS */ | 273 | +#endif |
| 582 | 274 | ||
| 583 | /***************************************** | 275 | /***************************************** |
| 584 | * Other defines | 276 | * Other defines |
-
请 注册 或 登录 后发表评论