正在显示
3 个修改的文件
包含
332 行增加
和
362 行删除
| @@ -50,7 +50,7 @@ | @@ -50,7 +50,7 @@ | ||
| 50 | 50 | ||
| 51 | /* Enable assertions only if DEBUG is defined */ | 51 | /* Enable assertions only if DEBUG is defined */ |
| 52 | #ifndef DEBUG | 52 | #ifndef DEBUG |
| 53 | -#define NDEBUG | 53 | + #define NDEBUG |
| 54 | #endif | 54 | #endif |
| 55 | #include <assert.h> | 55 | #include <assert.h> |
| 56 | #define ST_ASSERT(expr) assert(expr) | 56 | #define ST_ASSERT(expr) assert(expr) |
| @@ -59,15 +59,14 @@ | @@ -59,15 +59,14 @@ | ||
| 59 | #define ST_END_MACRO } | 59 | #define ST_END_MACRO } |
| 60 | 60 | ||
| 61 | #ifdef DEBUG | 61 | #ifdef DEBUG |
| 62 | -#define ST_HIDDEN /*nothing*/ | 62 | + #define ST_HIDDEN /*nothing*/ |
| 63 | #else | 63 | #else |
| 64 | -#define ST_HIDDEN static | 64 | + #define ST_HIDDEN static |
| 65 | #endif | 65 | #endif |
| 66 | 66 | ||
| 67 | #include "public.h" | 67 | #include "public.h" |
| 68 | #include "md.h" | 68 | #include "md.h" |
| 69 | 69 | ||
| 70 | - | ||
| 71 | /***************************************** | 70 | /***************************************** |
| 72 | * Circular linked list definitions | 71 | * Circular linked list definitions |
| 73 | */ | 72 | */ |
| @@ -137,7 +136,6 @@ typedef struct _st_clist { | @@ -137,7 +136,6 @@ typedef struct _st_clist { | ||
| 137 | 136 | ||
| 138 | typedef void (*_st_destructor_t)(void *); | 137 | typedef void (*_st_destructor_t)(void *); |
| 139 | 138 | ||
| 140 | - | ||
| 141 | typedef struct _st_stack { | 139 | typedef struct _st_stack { |
| 142 | _st_clist_t links; | 140 | _st_clist_t links; |
| 143 | char *vaddr; /* Base of stack's allocated memory */ | 141 | char *vaddr; /* Base of stack's allocated memory */ |
| @@ -146,9 +144,9 @@ typedef struct _st_stack { | @@ -146,9 +144,9 @@ typedef struct _st_stack { | ||
| 146 | char *stk_bottom; /* Lowest address of stack's usable portion */ | 144 | char *stk_bottom; /* Lowest address of stack's usable portion */ |
| 147 | char *stk_top; /* Highest address of stack's usable portion */ | 145 | char *stk_top; /* Highest address of stack's usable portion */ |
| 148 | void *sp; /* Stack pointer from C's point of view */ | 146 | void *sp; /* Stack pointer from C's point of view */ |
| 149 | -#ifdef __ia64__ | 147 | + #ifdef __ia64__ |
| 150 | void *bsp; /* Register stack backing store pointer */ | 148 | void *bsp; /* Register stack backing store pointer */ |
| 151 | -#endif | 149 | + #endif |
| 152 | } _st_stack_t; | 150 | } _st_stack_t; |
| 153 | 151 | ||
| 154 | 152 | ||
| @@ -171,9 +169,9 @@ struct _st_thread { | @@ -171,9 +169,9 @@ struct _st_thread { | ||
| 171 | 169 | ||
| 172 | _st_clist_t links; /* For putting on run/sleep/zombie queue */ | 170 | _st_clist_t links; /* For putting on run/sleep/zombie queue */ |
| 173 | _st_clist_t wait_links; /* For putting on mutex/condvar wait queue */ | 171 | _st_clist_t wait_links; /* For putting on mutex/condvar wait queue */ |
| 174 | -#ifdef DEBUG | 172 | + #ifdef DEBUG |
| 175 | _st_clist_t tlink; /* For putting on thread queue */ | 173 | _st_clist_t tlink; /* For putting on thread queue */ |
| 176 | -#endif | 174 | + #endif |
| 177 | 175 | ||
| 178 | st_utime_t due; /* Wakeup time when thread is sleeping */ | 176 | st_utime_t due; /* Wakeup time when thread is sleeping */ |
| 179 | _st_thread_t *left; /* For putting in timeout heap */ | 177 | _st_thread_t *left; /* For putting in timeout heap */ |
| @@ -223,18 +221,18 @@ typedef struct _st_vp { | @@ -223,18 +221,18 @@ typedef struct _st_vp { | ||
| 223 | _st_clist_t run_q; /* run queue for this vp */ | 221 | _st_clist_t run_q; /* run queue for this vp */ |
| 224 | _st_clist_t io_q; /* io queue for this vp */ | 222 | _st_clist_t io_q; /* io queue for this vp */ |
| 225 | _st_clist_t zombie_q; /* zombie queue for this vp */ | 223 | _st_clist_t zombie_q; /* zombie queue for this vp */ |
| 226 | -#ifdef DEBUG | 224 | + #ifdef DEBUG |
| 227 | _st_clist_t thread_q; /* all threads of this vp */ | 225 | _st_clist_t thread_q; /* all threads of this vp */ |
| 228 | -#endif | 226 | + #endif |
| 229 | int pagesize; | 227 | int pagesize; |
| 230 | 228 | ||
| 231 | _st_thread_t *sleep_q; /* sleep queue for this vp */ | 229 | _st_thread_t *sleep_q; /* sleep queue for this vp */ |
| 232 | int sleepq_size; /* number of threads on sleep queue */ | 230 | int sleepq_size; /* number of threads on sleep queue */ |
| 233 | 231 | ||
| 234 | -#ifdef ST_SWITCH_CB | 232 | + #ifdef ST_SWITCH_CB |
| 235 | st_switch_cb_t switch_out_cb; /* called when a thread is switched out */ | 233 | st_switch_cb_t switch_out_cb; /* called when a thread is switched out */ |
| 236 | st_switch_cb_t switch_in_cb; /* called when a thread is switched in */ | 234 | st_switch_cb_t switch_in_cb; /* called when a thread is switched in */ |
| 237 | -#endif | 235 | + #endif |
| 238 | } _st_vp_t; | 236 | } _st_vp_t; |
| 239 | 237 | ||
| 240 | 238 | ||
| @@ -265,7 +263,7 @@ extern _st_eventsys_t *_st_eventsys; | @@ -265,7 +263,7 @@ extern _st_eventsys_t *_st_eventsys; | ||
| 265 | #define _ST_IOQ (_st_this_vp.io_q) | 263 | #define _ST_IOQ (_st_this_vp.io_q) |
| 266 | #define _ST_ZOMBIEQ (_st_this_vp.zombie_q) | 264 | #define _ST_ZOMBIEQ (_st_this_vp.zombie_q) |
| 267 | #ifdef DEBUG | 265 | #ifdef DEBUG |
| 268 | -#define _ST_THREADQ (_st_this_vp.thread_q) | 266 | + #define _ST_THREADQ (_st_this_vp.thread_q) |
| 269 | #endif | 267 | #endif |
| 270 | 268 | ||
| 271 | #define _ST_PAGE_SIZE (_st_this_vp.pagesize) | 269 | #define _ST_PAGE_SIZE (_st_this_vp.pagesize) |
| @@ -293,8 +291,8 @@ extern _st_eventsys_t *_st_eventsys; | @@ -293,8 +291,8 @@ extern _st_eventsys_t *_st_eventsys; | ||
| 293 | #define _ST_DEL_ZOMBIEQ(_thr) ST_REMOVE_LINK(&(_thr)->links) | 291 | #define _ST_DEL_ZOMBIEQ(_thr) ST_REMOVE_LINK(&(_thr)->links) |
| 294 | 292 | ||
| 295 | #ifdef DEBUG | 293 | #ifdef DEBUG |
| 296 | -#define _ST_ADD_THREADQ(_thr) ST_APPEND_LINK(&(_thr)->tlink, &_ST_THREADQ) | ||
| 297 | -#define _ST_DEL_THREADQ(_thr) ST_REMOVE_LINK(&(_thr)->tlink) | 294 | + #define _ST_ADD_THREADQ(_thr) ST_APPEND_LINK(&(_thr)->tlink, &_ST_THREADQ) |
| 295 | + #define _ST_DEL_THREADQ(_thr) ST_REMOVE_LINK(&(_thr)->tlink) | ||
| 298 | #endif | 296 | #endif |
| 299 | 297 | ||
| 300 | 298 | ||
| @@ -317,13 +315,12 @@ extern _st_eventsys_t *_st_eventsys; | @@ -317,13 +315,12 @@ extern _st_eventsys_t *_st_eventsys; | ||
| 317 | #define _ST_FL_INTERRUPT 0x08 | 315 | #define _ST_FL_INTERRUPT 0x08 |
| 318 | #define _ST_FL_TIMEDOUT 0x10 | 316 | #define _ST_FL_TIMEDOUT 0x10 |
| 319 | 317 | ||
| 320 | - | ||
| 321 | /***************************************** | 318 | /***************************************** |
| 322 | * Pointer conversion | 319 | * Pointer conversion |
| 323 | */ | 320 | */ |
| 324 | 321 | ||
| 325 | #ifndef offsetof | 322 | #ifndef offsetof |
| 326 | -#define offsetof(type, identifier) ((size_t)&(((type *)0)->identifier)) | 323 | + #define offsetof(type, identifier) ((size_t)&(((type *)0)->identifier)) |
| 327 | #endif | 324 | #endif |
| 328 | 325 | ||
| 329 | #define _ST_THREAD_PTR(_qp) \ | 326 | #define _ST_THREAD_PTR(_qp) \ |
| @@ -339,7 +336,7 @@ extern _st_eventsys_t *_st_eventsys; | @@ -339,7 +336,7 @@ extern _st_eventsys_t *_st_eventsys; | ||
| 339 | ((_st_pollq_t *)((char *)(_qp) - offsetof(_st_pollq_t, links))) | 336 | ((_st_pollq_t *)((char *)(_qp) - offsetof(_st_pollq_t, links))) |
| 340 | 337 | ||
| 341 | #ifdef DEBUG | 338 | #ifdef DEBUG |
| 342 | -#define _ST_THREAD_THREADQ_PTR(_qp) \ | 339 | + #define _ST_THREAD_THREADQ_PTR(_qp) \ |
| 343 | ((_st_thread_t *)((char *)(_qp) - offsetof(_st_thread_t, tlink))) | 340 | ((_st_thread_t *)((char *)(_qp) - offsetof(_st_thread_t, tlink))) |
| 344 | #endif | 341 | #endif |
| 345 | 342 | ||
| @@ -349,21 +346,21 @@ extern _st_eventsys_t *_st_eventsys; | @@ -349,21 +346,21 @@ extern _st_eventsys_t *_st_eventsys; | ||
| 349 | */ | 346 | */ |
| 350 | 347 | ||
| 351 | #ifndef ST_UTIME_NO_TIMEOUT | 348 | #ifndef ST_UTIME_NO_TIMEOUT |
| 352 | -#define ST_UTIME_NO_TIMEOUT ((st_utime_t) -1LL) | 349 | + #define ST_UTIME_NO_TIMEOUT ((st_utime_t) -1LL) |
| 353 | #endif | 350 | #endif |
| 354 | 351 | ||
| 355 | #ifndef __ia64__ | 352 | #ifndef __ia64__ |
| 356 | -#define ST_DEFAULT_STACK_SIZE (64*1024) | 353 | + #define ST_DEFAULT_STACK_SIZE (64*1024) |
| 357 | #else | 354 | #else |
| 358 | -#define ST_DEFAULT_STACK_SIZE (128*1024) /* Includes register stack size */ | 355 | + #define ST_DEFAULT_STACK_SIZE (128*1024) /* Includes register stack size */ |
| 359 | #endif | 356 | #endif |
| 360 | 357 | ||
| 361 | #ifndef ST_KEYS_MAX | 358 | #ifndef ST_KEYS_MAX |
| 362 | -#define ST_KEYS_MAX 16 | 359 | + #define ST_KEYS_MAX 16 |
| 363 | #endif | 360 | #endif |
| 364 | 361 | ||
| 365 | #ifndef ST_MIN_POLLFDS_SIZE | 362 | #ifndef ST_MIN_POLLFDS_SIZE |
| 366 | -#define ST_MIN_POLLFDS_SIZE 64 | 363 | + #define ST_MIN_POLLFDS_SIZE 64 |
| 367 | #endif | 364 | #endif |
| 368 | 365 | ||
| 369 | 366 | ||
| @@ -372,28 +369,28 @@ extern _st_eventsys_t *_st_eventsys; | @@ -372,28 +369,28 @@ extern _st_eventsys_t *_st_eventsys; | ||
| 372 | */ | 369 | */ |
| 373 | 370 | ||
| 374 | #ifdef DEBUG | 371 | #ifdef DEBUG |
| 375 | -void _st_iterate_threads(void); | ||
| 376 | -#define ST_DEBUG_ITERATE_THREADS() _st_iterate_threads() | 372 | + void _st_iterate_threads(void); |
| 373 | + #define ST_DEBUG_ITERATE_THREADS() _st_iterate_threads() | ||
| 377 | #else | 374 | #else |
| 378 | -#define ST_DEBUG_ITERATE_THREADS() | 375 | + #define ST_DEBUG_ITERATE_THREADS() |
| 379 | #endif | 376 | #endif |
| 380 | 377 | ||
| 381 | #ifdef ST_SWITCH_CB | 378 | #ifdef ST_SWITCH_CB |
| 382 | -#define ST_SWITCH_OUT_CB(_thread) \ | 379 | + #define ST_SWITCH_OUT_CB(_thread) \ |
| 383 | if (_st_this_vp.switch_out_cb != NULL && \ | 380 | if (_st_this_vp.switch_out_cb != NULL && \ |
| 384 | _thread != _st_this_vp.idle_thread && \ | 381 | _thread != _st_this_vp.idle_thread && \ |
| 385 | _thread->state != _ST_ST_ZOMBIE) { \ | 382 | _thread->state != _ST_ST_ZOMBIE) { \ |
| 386 | _st_this_vp.switch_out_cb(); \ | 383 | _st_this_vp.switch_out_cb(); \ |
| 387 | } | 384 | } |
| 388 | -#define ST_SWITCH_IN_CB(_thread) \ | 385 | + #define ST_SWITCH_IN_CB(_thread) \ |
| 389 | if (_st_this_vp.switch_in_cb != NULL && \ | 386 | if (_st_this_vp.switch_in_cb != NULL && \ |
| 390 | _thread != _st_this_vp.idle_thread && \ | 387 | _thread != _st_this_vp.idle_thread && \ |
| 391 | _thread->state != _ST_ST_ZOMBIE) { \ | 388 | _thread->state != _ST_ST_ZOMBIE) { \ |
| 392 | _st_this_vp.switch_in_cb(); \ | 389 | _st_this_vp.switch_in_cb(); \ |
| 393 | } | 390 | } |
| 394 | #else | 391 | #else |
| 395 | -#define ST_SWITCH_OUT_CB(_thread) | ||
| 396 | -#define ST_SWITCH_IN_CB(_thread) | 392 | + #define ST_SWITCH_OUT_CB(_thread) |
| 393 | + #define ST_SWITCH_IN_CB(_thread) | ||
| 397 | #endif | 394 | #endif |
| 398 | 395 | ||
| 399 | /* | 396 | /* |
| @@ -424,9 +421,9 @@ void _st_iterate_threads(void); | @@ -424,9 +421,9 @@ void _st_iterate_threads(void); | ||
| 424 | * Initialize the thread context preparing it to execute _main | 421 | * Initialize the thread context preparing it to execute _main |
| 425 | */ | 422 | */ |
| 426 | #ifdef MD_INIT_CONTEXT | 423 | #ifdef MD_INIT_CONTEXT |
| 427 | -#define _ST_INIT_CONTEXT MD_INIT_CONTEXT | 424 | + #define _ST_INIT_CONTEXT MD_INIT_CONTEXT |
| 428 | #else | 425 | #else |
| 429 | -#error Unknown OS | 426 | + #error Unknown OS |
| 430 | #endif | 427 | #endif |
| 431 | 428 | ||
| 432 | /* | 429 | /* |
| @@ -456,11 +453,9 @@ int st_cond_destroy(_st_cond_t *cvar); | @@ -456,11 +453,9 @@ int st_cond_destroy(_st_cond_t *cvar); | ||
| 456 | int st_cond_timedwait(_st_cond_t *cvar, st_utime_t timeout); | 453 | int st_cond_timedwait(_st_cond_t *cvar, st_utime_t timeout); |
| 457 | int st_cond_signal(_st_cond_t *cvar); | 454 | int st_cond_signal(_st_cond_t *cvar); |
| 458 | ssize_t st_read(_st_netfd_t *fd, void *buf, size_t nbyte, st_utime_t timeout); | 455 | ssize_t st_read(_st_netfd_t *fd, void *buf, size_t nbyte, st_utime_t timeout); |
| 459 | -ssize_t st_write(_st_netfd_t *fd, const void *buf, size_t nbyte, | ||
| 460 | - st_utime_t timeout); | 456 | +ssize_t st_write(_st_netfd_t *fd, const void *buf, size_t nbyte, st_utime_t timeout); |
| 461 | int st_poll(struct pollfd *pds, int npds, st_utime_t timeout); | 457 | int st_poll(struct pollfd *pds, int npds, st_utime_t timeout); |
| 462 | -_st_thread_t *st_thread_create(void *(*start)(void *arg), void *arg, | ||
| 463 | - int joinable, int stk_size); | 458 | +_st_thread_t *st_thread_create(void *(*start)(void *arg), void *arg, int joinable, int stk_size); |
| 464 | 459 | ||
| 465 | #endif /* !__ST_COMMON_H__ */ | 460 | #endif /* !__ST_COMMON_H__ */ |
| 466 | 461 |
| @@ -43,163 +43,157 @@ | @@ -43,163 +43,157 @@ | ||
| 43 | #define __ST_MD_H__ | 43 | #define __ST_MD_H__ |
| 44 | 44 | ||
| 45 | #if defined(ETIMEDOUT) && !defined(ETIME) | 45 | #if defined(ETIMEDOUT) && !defined(ETIME) |
| 46 | -#define ETIME ETIMEDOUT | 46 | + #define ETIME ETIMEDOUT |
| 47 | #endif | 47 | #endif |
| 48 | 48 | ||
| 49 | #if defined(MAP_ANONYMOUS) && !defined(MAP_ANON) | 49 | #if defined(MAP_ANONYMOUS) && !defined(MAP_ANON) |
| 50 | -#define MAP_ANON MAP_ANONYMOUS | 50 | + #define MAP_ANON MAP_ANONYMOUS |
| 51 | #endif | 51 | #endif |
| 52 | 52 | ||
| 53 | #ifndef MAP_FAILED | 53 | #ifndef MAP_FAILED |
| 54 | -#define MAP_FAILED -1 | 54 | + #define MAP_FAILED -1 |
| 55 | #endif | 55 | #endif |
| 56 | 56 | ||
| 57 | /***************************************** | 57 | /***************************************** |
| 58 | * Platform specifics | 58 | * Platform specifics |
| 59 | */ | 59 | */ |
| 60 | - | ||
| 61 | #if defined (AIX) | 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 | ||
| 62 | 65 | ||
| 63 | -#define MD_STACK_GROWS_DOWN | ||
| 64 | -#define MD_USE_SYSV_ANON_MMAP | ||
| 65 | -#define MD_ACCEPT_NB_INHERITED | ||
| 66 | -#define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 67 | - | ||
| 68 | -#ifndef MD_HAVE_SOCKLEN_T | ||
| 69 | -#define MD_HAVE_SOCKLEN_T | ||
| 70 | -#define socklen_t unsigned long | ||
| 71 | -#endif | 66 | + #ifndef MD_HAVE_SOCKLEN_T |
| 67 | + #define MD_HAVE_SOCKLEN_T | ||
| 68 | + #define socklen_t unsigned long | ||
| 69 | + #endif | ||
| 72 | 70 | ||
| 73 | -#define MD_SETJMP(env) _setjmp(env) | ||
| 74 | -#define MD_LONGJMP(env, val) _longjmp(env, val) | 71 | + #define MD_SETJMP(env) _setjmp(env) |
| 72 | + #define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 75 | 73 | ||
| 76 | -#define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 74 | + #define MD_INIT_CONTEXT(_thread, _sp, _main) \ |
| 77 | ST_BEGIN_MACRO \ | 75 | ST_BEGIN_MACRO \ |
| 78 | if (MD_SETJMP((_thread)->context)) \ | 76 | if (MD_SETJMP((_thread)->context)) \ |
| 79 | _main(); \ | 77 | _main(); \ |
| 80 | (_thread)->context[3] = (long) (_sp); \ | 78 | (_thread)->context[3] = (long) (_sp); \ |
| 81 | ST_END_MACRO | 79 | ST_END_MACRO |
| 82 | 80 | ||
| 83 | -#define MD_GET_UTIME() \ | 81 | + #define MD_GET_UTIME() \ |
| 84 | timebasestruct_t rt; \ | 82 | timebasestruct_t rt; \ |
| 85 | (void) read_real_time(&rt, TIMEBASE_SZ); \ | 83 | (void) read_real_time(&rt, TIMEBASE_SZ); \ |
| 86 | (void) time_base_to_time(&rt, TIMEBASE_SZ); \ | 84 | (void) time_base_to_time(&rt, TIMEBASE_SZ); \ |
| 87 | return (rt.tb_high * 1000000LL + rt.tb_low / 1000) | 85 | return (rt.tb_high * 1000000LL + rt.tb_low / 1000) |
| 88 | 86 | ||
| 89 | #elif defined (CYGWIN) | 87 | #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 | ||
| 90 | 92 | ||
| 91 | -#define MD_STACK_GROWS_DOWN | ||
| 92 | -#define MD_USE_BSD_ANON_MMAP | ||
| 93 | -#define MD_ACCEPT_NB_NOT_INHERITED | ||
| 94 | -#define MD_ALWAYS_UNSERIALIZED_ACCEPT | 93 | + #define MD_SETJMP(env) setjmp(env) |
| 94 | + #define MD_LONGJMP(env, val) longjmp(env, val) | ||
| 95 | 95 | ||
| 96 | -#define MD_SETJMP(env) setjmp(env) | ||
| 97 | -#define MD_LONGJMP(env, val) longjmp(env, val) | 96 | + #define MD_JB_SP 7 |
| 98 | 97 | ||
| 99 | -#define MD_JB_SP 7 | 98 | + #define MD_GET_SP(_t) (_t)->context[MD_JB_SP] |
| 100 | 99 | ||
| 101 | -#define MD_GET_SP(_t) (_t)->context[MD_JB_SP] | ||
| 102 | - | ||
| 103 | -#define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 100 | + #define MD_INIT_CONTEXT(_thread, _sp, _main) \ |
| 104 | ST_BEGIN_MACRO \ | 101 | ST_BEGIN_MACRO \ |
| 105 | if (MD_SETJMP((_thread)->context)) \ | 102 | if (MD_SETJMP((_thread)->context)) \ |
| 106 | _main(); \ | 103 | _main(); \ |
| 107 | MD_GET_SP(_thread) = (long) (_sp); \ | 104 | MD_GET_SP(_thread) = (long) (_sp); \ |
| 108 | ST_END_MACRO | 105 | ST_END_MACRO |
| 109 | 106 | ||
| 110 | -#define MD_GET_UTIME() \ | 107 | + #define MD_GET_UTIME() \ |
| 111 | struct timeval tv; \ | 108 | struct timeval tv; \ |
| 112 | (void) gettimeofday(&tv, NULL); \ | 109 | (void) gettimeofday(&tv, NULL); \ |
| 113 | return (tv.tv_sec * 1000000LL + tv.tv_usec) | 110 | return (tv.tv_sec * 1000000LL + tv.tv_usec) |
| 114 | 111 | ||
| 115 | #elif defined (DARWIN) | 112 | #elif defined (DARWIN) |
| 116 | - | ||
| 117 | -#define MD_STACK_GROWS_DOWN | ||
| 118 | -#define MD_USE_BSD_ANON_MMAP | ||
| 119 | -#define MD_ACCEPT_NB_INHERITED | ||
| 120 | -#define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 121 | -#define MD_HAVE_SOCKLEN_T | ||
| 122 | - | ||
| 123 | -#define MD_SETJMP(env) _setjmp(env) | ||
| 124 | -#define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 125 | - | ||
| 126 | -#if defined(__ppc__) | ||
| 127 | -#define MD_JB_SP 0 | ||
| 128 | -#elif defined(__i386__) | ||
| 129 | -#define MD_JB_SP 9 | ||
| 130 | -#elif defined(__x86_64__) | ||
| 131 | -#define MD_JB_SP 4 | ||
| 132 | -#else | ||
| 133 | -#error Unknown CPU architecture | ||
| 134 | -#endif | ||
| 135 | - | ||
| 136 | -#define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 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) \ | ||
| 137 | ST_BEGIN_MACRO \ | 133 | ST_BEGIN_MACRO \ |
| 138 | if (MD_SETJMP((_thread)->context)) \ | 134 | if (MD_SETJMP((_thread)->context)) \ |
| 139 | _main(); \ | 135 | _main(); \ |
| 140 | *((long *)&((_thread)->context[MD_JB_SP])) = (long) (_sp); \ | 136 | *((long *)&((_thread)->context[MD_JB_SP])) = (long) (_sp); \ |
| 141 | ST_END_MACRO | 137 | ST_END_MACRO |
| 142 | 138 | ||
| 143 | -#define MD_GET_UTIME() \ | 139 | + #define MD_GET_UTIME() \ |
| 144 | struct timeval tv; \ | 140 | struct timeval tv; \ |
| 145 | (void) gettimeofday(&tv, NULL); \ | 141 | (void) gettimeofday(&tv, NULL); \ |
| 146 | return (tv.tv_sec * 1000000LL + tv.tv_usec) | 142 | return (tv.tv_sec * 1000000LL + tv.tv_usec) |
| 147 | 143 | ||
| 148 | #elif defined (FREEBSD) | 144 | #elif defined (FREEBSD) |
| 149 | - | ||
| 150 | -#define MD_STACK_GROWS_DOWN | ||
| 151 | -#define MD_USE_BSD_ANON_MMAP | ||
| 152 | -#define MD_ACCEPT_NB_INHERITED | ||
| 153 | -#define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 154 | - | ||
| 155 | -#define MD_SETJMP(env) _setjmp(env) | ||
| 156 | -#define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 157 | - | ||
| 158 | -#if defined(__i386__) | ||
| 159 | -#define MD_JB_SP 2 | ||
| 160 | -#elif defined(__alpha__) | ||
| 161 | -#define MD_JB_SP 34 | ||
| 162 | -#elif defined(__amd64__) | ||
| 163 | -#define MD_JB_SP 2 | ||
| 164 | -#else | ||
| 165 | -#error Unknown CPU architecture | ||
| 166 | -#endif | ||
| 167 | - | ||
| 168 | -#define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 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) \ | ||
| 169 | ST_BEGIN_MACRO \ | 164 | ST_BEGIN_MACRO \ |
| 170 | if (MD_SETJMP((_thread)->context)) \ | 165 | if (MD_SETJMP((_thread)->context)) \ |
| 171 | _main(); \ | 166 | _main(); \ |
| 172 | (_thread)->context[0]._jb[MD_JB_SP] = (long) (_sp); \ | 167 | (_thread)->context[0]._jb[MD_JB_SP] = (long) (_sp); \ |
| 173 | ST_END_MACRO | 168 | ST_END_MACRO |
| 174 | 169 | ||
| 175 | -#define MD_GET_UTIME() \ | 170 | + #define MD_GET_UTIME() \ |
| 176 | struct timeval tv; \ | 171 | struct timeval tv; \ |
| 177 | (void) gettimeofday(&tv, NULL); \ | 172 | (void) gettimeofday(&tv, NULL); \ |
| 178 | return (tv.tv_sec * 1000000LL + tv.tv_usec) | 173 | return (tv.tv_sec * 1000000LL + tv.tv_usec) |
| 179 | 174 | ||
| 180 | #elif defined (HPUX) | 175 | #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 | ||
| 181 | 180 | ||
| 182 | -#define MD_STACK_GROWS_UP | ||
| 183 | -#define MD_USE_BSD_ANON_MMAP | ||
| 184 | -#define MD_ACCEPT_NB_INHERITED | ||
| 185 | -#define MD_ALWAYS_UNSERIALIZED_ACCEPT | 181 | + #define MD_SETJMP(env) _setjmp(env) |
| 182 | + #define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 186 | 183 | ||
| 187 | -#define MD_SETJMP(env) _setjmp(env) | ||
| 188 | -#define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 189 | - | ||
| 190 | -#ifndef __LP64__ | ||
| 191 | -/* 32-bit mode (ILP32 data model) */ | ||
| 192 | -#define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 184 | + #ifndef __LP64__ |
| 185 | + /* 32-bit mode (ILP32 data model) */ | ||
| 186 | + #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 193 | ST_BEGIN_MACRO \ | 187 | ST_BEGIN_MACRO \ |
| 194 | if (MD_SETJMP((_thread)->context)) \ | 188 | if (MD_SETJMP((_thread)->context)) \ |
| 195 | _main(); \ | 189 | _main(); \ |
| 196 | ((long *)((_thread)->context))[1] = (long) (_sp); \ | 190 | ((long *)((_thread)->context))[1] = (long) (_sp); \ |
| 197 | ST_END_MACRO | 191 | ST_END_MACRO |
| 198 | -#else | ||
| 199 | -/* 64-bit mode (LP64 data model) */ | ||
| 200 | -#define MD_STACK_PAD_SIZE 256 | ||
| 201 | -/* Last stack frame must be preserved */ | ||
| 202 | -#define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 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) \ | ||
| 203 | ST_BEGIN_MACRO \ | 197 | ST_BEGIN_MACRO \ |
| 204 | if (MD_SETJMP((_thread)->context)) \ | 198 | if (MD_SETJMP((_thread)->context)) \ |
| 205 | _main(); \ | 199 | _main(); \ |
| @@ -208,33 +202,32 @@ | @@ -208,33 +202,32 @@ | ||
| 208 | MD_STACK_PAD_SIZE); \ | 202 | MD_STACK_PAD_SIZE); \ |
| 209 | ((long *)((_thread)->context))[1] = (long) (_sp); \ | 203 | ((long *)((_thread)->context))[1] = (long) (_sp); \ |
| 210 | ST_END_MACRO | 204 | ST_END_MACRO |
| 211 | -#endif /* !__LP64__ */ | 205 | + #endif /* !__LP64__ */ |
| 212 | 206 | ||
| 213 | -#define MD_GET_UTIME() \ | 207 | + #define MD_GET_UTIME() \ |
| 214 | struct timeval tv; \ | 208 | struct timeval tv; \ |
| 215 | (void) gettimeofday(&tv, NULL); \ | 209 | (void) gettimeofday(&tv, NULL); \ |
| 216 | return (tv.tv_sec * 1000000LL + tv.tv_usec) | 210 | return (tv.tv_sec * 1000000LL + tv.tv_usec) |
| 217 | 211 | ||
| 218 | #elif defined (IRIX) | 212 | #elif defined (IRIX) |
| 213 | + #include <sys/syssgi.h> | ||
| 219 | 214 | ||
| 220 | -#include <sys/syssgi.h> | 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 | ||
| 221 | 219 | ||
| 222 | -#define MD_STACK_GROWS_DOWN | ||
| 223 | -#define MD_USE_SYSV_ANON_MMAP | ||
| 224 | -#define MD_ACCEPT_NB_INHERITED | ||
| 225 | -#define MD_ALWAYS_UNSERIALIZED_ACCEPT | 220 | + #define MD_SETJMP(env) setjmp(env) |
| 221 | + #define MD_LONGJMP(env, val) longjmp(env, val) | ||
| 226 | 222 | ||
| 227 | -#define MD_SETJMP(env) setjmp(env) | ||
| 228 | -#define MD_LONGJMP(env, val) longjmp(env, val) | ||
| 229 | - | ||
| 230 | -#define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 223 | + #define MD_INIT_CONTEXT(_thread, _sp, _main) \ |
| 231 | ST_BEGIN_MACRO \ | 224 | ST_BEGIN_MACRO \ |
| 232 | (void) MD_SETJMP((_thread)->context); \ | 225 | (void) MD_SETJMP((_thread)->context); \ |
| 233 | (_thread)->context[JB_SP] = (long) (_sp); \ | 226 | (_thread)->context[JB_SP] = (long) (_sp); \ |
| 234 | (_thread)->context[JB_PC] = (long) _main; \ | 227 | (_thread)->context[JB_PC] = (long) _main; \ |
| 235 | ST_END_MACRO | 228 | ST_END_MACRO |
| 236 | 229 | ||
| 237 | -#define MD_GET_UTIME() \ | 230 | + #define MD_GET_UTIME() \ |
| 238 | static int inited = 0; \ | 231 | static int inited = 0; \ |
| 239 | static clockid_t clock_id = CLOCK_SGI_CYCLE; \ | 232 | static clockid_t clock_id = CLOCK_SGI_CYCLE; \ |
| 240 | struct timespec ts; \ | 233 | struct timespec ts; \ |
| @@ -246,7 +239,7 @@ | @@ -246,7 +239,7 @@ | ||
| 246 | (void) clock_gettime(clock_id, &ts); \ | 239 | (void) clock_gettime(clock_id, &ts); \ |
| 247 | return (ts.tv_sec * 1000000LL + ts.tv_nsec / 1000) | 240 | return (ts.tv_sec * 1000000LL + ts.tv_nsec / 1000) |
| 248 | 241 | ||
| 249 | -/* | 242 | + /* |
| 250 | * Cap the stack by zeroing out the saved return address register | 243 | * Cap the stack by zeroing out the saved return address register |
| 251 | * value. This allows libexc, used by SpeedShop, to know when to stop | 244 | * value. This allows libexc, used by SpeedShop, to know when to stop |
| 252 | * backtracing since it won't find main, start, or any other known | 245 | * backtracing since it won't find main, start, or any other known |
| @@ -257,38 +250,37 @@ | @@ -257,38 +250,37 @@ | ||
| 257 | * automatic variables are added to the _st_thread_main() routine, because | 250 | * automatic variables are added to the _st_thread_main() routine, because |
| 258 | * the address where ra is stored will change. | 251 | * the address where ra is stored will change. |
| 259 | */ | 252 | */ |
| 260 | -#if !defined(__GNUC__) && defined(_MIPS_SIM) && _MIPS_SIM != _ABIO32 | ||
| 261 | -#define MD_CAP_STACK(var_addr) \ | 253 | + #if !defined(__GNUC__) && defined(_MIPS_SIM) && _MIPS_SIM != _ABIO32 |
| 254 | + #define MD_CAP_STACK(var_addr) \ | ||
| 262 | (((volatile __uint64_t *)(var_addr))[1] = 0) | 255 | (((volatile __uint64_t *)(var_addr))[1] = 0) |
| 263 | -#endif | 256 | + #endif |
| 264 | 257 | ||
| 265 | #elif defined (LINUX) | 258 | #elif defined (LINUX) |
| 266 | - | ||
| 267 | -/* | 259 | + /* |
| 268 | * These are properties of the linux kernel and are the same on every | 260 | * These are properties of the linux kernel and are the same on every |
| 269 | * flavor and architecture. | 261 | * flavor and architecture. |
| 270 | */ | 262 | */ |
| 271 | -#define MD_USE_BSD_ANON_MMAP | ||
| 272 | -#define MD_ACCEPT_NB_NOT_INHERITED | ||
| 273 | -#define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 274 | -/* | 263 | + #define MD_USE_BSD_ANON_MMAP |
| 264 | + #define MD_ACCEPT_NB_NOT_INHERITED | ||
| 265 | + #define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 266 | + /* | ||
| 275 | * Modern GNU/Linux is Posix.1g compliant. | 267 | * Modern GNU/Linux is Posix.1g compliant. |
| 276 | */ | 268 | */ |
| 277 | -#define MD_HAVE_SOCKLEN_T | 269 | + #define MD_HAVE_SOCKLEN_T |
| 278 | 270 | ||
| 279 | -/* | 271 | + /* |
| 280 | * All architectures and flavors of linux have the gettimeofday | 272 | * All architectures and flavors of linux have the gettimeofday |
| 281 | * function but if you know of a faster way, use it. | 273 | * function but if you know of a faster way, use it. |
| 282 | */ | 274 | */ |
| 283 | -#define MD_GET_UTIME() \ | 275 | + #define MD_GET_UTIME() \ |
| 284 | struct timeval tv; \ | 276 | struct timeval tv; \ |
| 285 | (void) gettimeofday(&tv, NULL); \ | 277 | (void) gettimeofday(&tv, NULL); \ |
| 286 | return (tv.tv_sec * 1000000LL + tv.tv_usec) | 278 | return (tv.tv_sec * 1000000LL + tv.tv_usec) |
| 287 | 279 | ||
| 288 | -#if defined(__ia64__) | ||
| 289 | -#define MD_STACK_GROWS_DOWN | 280 | + #if defined(__ia64__) |
| 281 | + #define MD_STACK_GROWS_DOWN | ||
| 290 | 282 | ||
| 291 | -/* | 283 | + /* |
| 292 | * IA-64 architecture. Besides traditional memory call stack, IA-64 | 284 | * IA-64 architecture. Besides traditional memory call stack, IA-64 |
| 293 | * uses general register stack. Thus each thread needs a backing store | 285 | * uses general register stack. Thus each thread needs a backing store |
| 294 | * for register stack in addition to memory stack. Standard | 286 | * for register stack in addition to memory stack. Standard |
| @@ -296,14 +288,14 @@ | @@ -296,14 +288,14 @@ | ||
| 296 | * because their implementation implicitly assumes that only one | 288 | * because their implementation implicitly assumes that only one |
| 297 | * register stack exists. | 289 | * register stack exists. |
| 298 | */ | 290 | */ |
| 299 | -#ifdef USE_LIBC_SETJMP | ||
| 300 | -#undef USE_LIBC_SETJMP | ||
| 301 | -#endif | ||
| 302 | -#define MD_USE_BUILTIN_SETJMP | ||
| 303 | - | ||
| 304 | -#define MD_STACK_PAD_SIZE 128 | ||
| 305 | -/* Last register stack frame must be preserved */ | ||
| 306 | -#define MD_INIT_CONTEXT(_thread, _sp, _bsp, _main) \ | 291 | + #ifdef USE_LIBC_SETJMP |
| 292 | + #undef USE_LIBC_SETJMP | ||
| 293 | + #endif | ||
| 294 | + #define MD_USE_BUILTIN_SETJMP | ||
| 295 | + | ||
| 296 | + #define MD_STACK_PAD_SIZE 128 | ||
| 297 | + /* Last register stack frame must be preserved */ | ||
| 298 | + #define MD_INIT_CONTEXT(_thread, _sp, _bsp, _main) \ | ||
| 307 | ST_BEGIN_MACRO \ | 299 | ST_BEGIN_MACRO \ |
| 308 | if (MD_SETJMP((_thread)->context)) \ | 300 | if (MD_SETJMP((_thread)->context)) \ |
| 309 | _main(); \ | 301 | _main(); \ |
| @@ -313,28 +305,24 @@ | @@ -313,28 +305,24 @@ | ||
| 313 | (_thread)->context[0].__jmpbuf[0] = (long) (_sp); \ | 305 | (_thread)->context[0].__jmpbuf[0] = (long) (_sp); \ |
| 314 | (_thread)->context[0].__jmpbuf[17] = (long) (_bsp); \ | 306 | (_thread)->context[0].__jmpbuf[17] = (long) (_bsp); \ |
| 315 | ST_END_MACRO | 307 | ST_END_MACRO |
| 308 | + #elif defined(__mips__) | ||
| 309 | + #define MD_STACK_GROWS_DOWN | ||
| 316 | 310 | ||
| 317 | -#elif defined(__mips__) | ||
| 318 | -#define MD_STACK_GROWS_DOWN | ||
| 319 | - | ||
| 320 | -#define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 311 | + #define MD_INIT_CONTEXT(_thread, _sp, _main) \ |
| 321 | ST_BEGIN_MACRO \ | 312 | ST_BEGIN_MACRO \ |
| 322 | MD_SETJMP((_thread)->context); \ | 313 | MD_SETJMP((_thread)->context); \ |
| 323 | _thread->context[0].__jmpbuf[0].__pc = (__ptr_t) _main; \ | 314 | _thread->context[0].__jmpbuf[0].__pc = (__ptr_t) _main; \ |
| 324 | _thread->context[0].__jmpbuf[0].__sp = _sp; \ | 315 | _thread->context[0].__jmpbuf[0].__sp = _sp; \ |
| 325 | ST_END_MACRO | 316 | ST_END_MACRO |
| 326 | - | ||
| 327 | -#else /* Not IA-64 or mips */ | ||
| 328 | - | ||
| 329 | -/* | 317 | + #else /* Not IA-64 or mips */ |
| 318 | + /* | ||
| 330 | * On linux, there are a few styles of jmpbuf format. These vary based | 319 | * On linux, there are a few styles of jmpbuf format. These vary based |
| 331 | * on architecture/glibc combination. | 320 | * on architecture/glibc combination. |
| 332 | * | 321 | * |
| 333 | * Most of the glibc based toggles were lifted from: | 322 | * Most of the glibc based toggles were lifted from: |
| 334 | * mozilla/nsprpub/pr/include/md/_linux.h | 323 | * mozilla/nsprpub/pr/include/md/_linux.h |
| 335 | */ | 324 | */ |
| 336 | - | ||
| 337 | -/* | 325 | + /* |
| 338 | * Starting with glibc 2.4, JB_SP definitions are not public anymore. | 326 | * Starting with glibc 2.4, JB_SP definitions are not public anymore. |
| 339 | * They, however, can still be found in glibc source tree in | 327 | * They, however, can still be found in glibc source tree in |
| 340 | * architecture-specific "jmpbuf-offsets.h" files. | 328 | * architecture-specific "jmpbuf-offsets.h" files. |
| @@ -345,282 +333,270 @@ | @@ -345,282 +333,270 @@ | ||
| 345 | * functions as a setjmp/longjmp replacement wherever they are available | 333 | * functions as a setjmp/longjmp replacement wherever they are available |
| 346 | * unless USE_LIBC_SETJMP is defined. | 334 | * unless USE_LIBC_SETJMP is defined. |
| 347 | */ | 335 | */ |
| 348 | - | ||
| 349 | -#if defined(__powerpc__) | ||
| 350 | -#define MD_STACK_GROWS_DOWN | ||
| 351 | - | ||
| 352 | -#if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) | ||
| 353 | -#ifndef JB_GPR1 | ||
| 354 | -#define JB_GPR1 0 | ||
| 355 | -#endif | ||
| 356 | -#define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[JB_GPR1] | ||
| 357 | -#else | ||
| 358 | -/* not an error but certainly cause for caution */ | ||
| 359 | -#error "Untested use of old glibc on powerpc" | ||
| 360 | -#define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[0].__misc[0] | ||
| 361 | -#endif /* glibc 2.1 or later */ | ||
| 362 | - | ||
| 363 | -#elif defined(__alpha) | ||
| 364 | -#define MD_STACK_GROWS_DOWN | ||
| 365 | - | ||
| 366 | -#if defined(__GLIBC__) && __GLIBC__ >= 2 | ||
| 367 | -#ifndef JB_SP | ||
| 368 | -#define JB_SP 8 | ||
| 369 | -#endif | ||
| 370 | -#define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[JB_SP] | ||
| 371 | -#else | ||
| 372 | -/* not an error but certainly cause for caution */ | ||
| 373 | -#error "Untested use of old glibc on alpha" | ||
| 374 | -#define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[0].__sp | ||
| 375 | -#endif | ||
| 376 | - | ||
| 377 | -#elif defined(__mc68000__) | ||
| 378 | -#define MD_STACK_GROWS_DOWN | ||
| 379 | - | ||
| 380 | -/* m68k still uses old style sigjmp_buf */ | ||
| 381 | -#define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[0].__sp | ||
| 382 | - | ||
| 383 | -#elif defined(__sparc__) | ||
| 384 | -#define MD_STACK_GROWS_DOWN | ||
| 385 | - | ||
| 386 | -#if defined(__GLIBC__) && __GLIBC__ >= 2 | ||
| 387 | -#ifndef JB_SP | ||
| 388 | -#define JB_SP 0 | ||
| 389 | -#endif | ||
| 390 | -#define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[JB_SP] | ||
| 391 | -#else | ||
| 392 | -/* not an error but certainly cause for caution */ | ||
| 393 | -#error "Untested use of old glic on sparc -- also using odd mozilla derived __fp" | ||
| 394 | -#define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[0].__fp | ||
| 395 | -#endif | ||
| 396 | - | ||
| 397 | -#elif defined(__i386__) | ||
| 398 | -#define MD_STACK_GROWS_DOWN | ||
| 399 | -#define MD_USE_BUILTIN_SETJMP | ||
| 400 | - | ||
| 401 | -#if defined(__GLIBC__) && __GLIBC__ >= 2 | ||
| 402 | -#ifndef JB_SP | ||
| 403 | -#define JB_SP 4 | ||
| 404 | -#endif | ||
| 405 | -#define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[JB_SP] | ||
| 406 | -#else | ||
| 407 | -/* not an error but certainly cause for caution */ | ||
| 408 | -#error "Untested use of old glibc on i386" | ||
| 409 | -#define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[0].__sp | ||
| 410 | -#endif | ||
| 411 | - | ||
| 412 | -#elif defined(__amd64__) || defined(__x86_64__) | ||
| 413 | -#define MD_STACK_GROWS_DOWN | ||
| 414 | -#define MD_USE_BUILTIN_SETJMP | ||
| 415 | - | ||
| 416 | -#ifndef JB_RSP | ||
| 417 | -#define JB_RSP 6 | ||
| 418 | -#endif | ||
| 419 | -#define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[JB_RSP] | ||
| 420 | - | ||
| 421 | -#elif defined(__arm__) | ||
| 422 | -#define MD_STACK_GROWS_DOWN | ||
| 423 | - | ||
| 424 | -#if defined(__GLIBC__) && __GLIBC__ >= 2 | ||
| 425 | -#define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[20] | ||
| 426 | -#else | ||
| 427 | -#error "ARM/Linux pre-glibc2 not supported yet" | ||
| 428 | -#endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */ | ||
| 429 | - | ||
| 430 | -#elif defined(__s390__) | ||
| 431 | -#define MD_STACK_GROWS_DOWN | ||
| 432 | - | ||
| 433 | -/* There is no JB_SP in glibc at this time. (glibc 2.2.5) | 336 | + #if defined(__powerpc__) |
| 337 | + #define MD_STACK_GROWS_DOWN | ||
| 338 | + | ||
| 339 | + #if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) | ||
| 340 | + #ifndef JB_GPR1 | ||
| 341 | + #define JB_GPR1 0 | ||
| 342 | + #endif | ||
| 343 | + #define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[JB_GPR1] | ||
| 344 | + #else | ||
| 345 | + /* not an error but certainly cause for caution */ | ||
| 346 | + #error "Untested use of old glibc on powerpc" | ||
| 347 | + #define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[0].__misc[0] | ||
| 348 | + #endif /* glibc 2.1 or later */ | ||
| 349 | + #elif defined(__alpha) | ||
| 350 | + #define MD_STACK_GROWS_DOWN | ||
| 351 | + | ||
| 352 | + #if defined(__GLIBC__) && __GLIBC__ >= 2 | ||
| 353 | + #ifndef JB_SP | ||
| 354 | + #define JB_SP 8 | ||
| 355 | + #endif | ||
| 356 | + #define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[JB_SP] | ||
| 357 | + #else | ||
| 358 | + /* not an error but certainly cause for caution */ | ||
| 359 | + #error "Untested use of old glibc on alpha" | ||
| 360 | + #define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[0].__sp | ||
| 361 | + #endif | ||
| 362 | + #elif defined(__mc68000__) | ||
| 363 | + #define MD_STACK_GROWS_DOWN | ||
| 364 | + | ||
| 365 | + /* m68k still uses old style sigjmp_buf */ | ||
| 366 | + #define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[0].__sp | ||
| 367 | + #elif defined(__sparc__) | ||
| 368 | + #define MD_STACK_GROWS_DOWN | ||
| 369 | + | ||
| 370 | + #if defined(__GLIBC__) && __GLIBC__ >= 2 | ||
| 371 | + #ifndef JB_SP | ||
| 372 | + #define JB_SP 0 | ||
| 373 | + #endif | ||
| 374 | + #define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[JB_SP] | ||
| 375 | + #else | ||
| 376 | + /* not an error but certainly cause for caution */ | ||
| 377 | + #error "Untested use of old glic on sparc -- also using odd mozilla derived __fp" | ||
| 378 | + #define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[0].__fp | ||
| 379 | + #endif | ||
| 380 | + #elif defined(__i386__) | ||
| 381 | + #define MD_STACK_GROWS_DOWN | ||
| 382 | + #define MD_USE_BUILTIN_SETJMP | ||
| 383 | + | ||
| 384 | + #if defined(__GLIBC__) && __GLIBC__ >= 2 | ||
| 385 | + #ifndef JB_SP | ||
| 386 | + #define JB_SP 4 | ||
| 387 | + #endif | ||
| 388 | + #define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[JB_SP] | ||
| 389 | + #else | ||
| 390 | + /* not an error but certainly cause for caution */ | ||
| 391 | + #error "Untested use of old glibc on i386" | ||
| 392 | + #define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[0].__sp | ||
| 393 | + #endif | ||
| 394 | + #elif defined(__amd64__) || defined(__x86_64__) | ||
| 395 | + #define MD_STACK_GROWS_DOWN | ||
| 396 | + #define MD_USE_BUILTIN_SETJMP | ||
| 397 | + | ||
| 398 | + #ifndef JB_RSP | ||
| 399 | + #define JB_RSP 6 | ||
| 400 | + #endif | ||
| 401 | + #define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[JB_RSP] | ||
| 402 | + #elif defined(__arm__) | ||
| 403 | + #define MD_STACK_GROWS_DOWN | ||
| 404 | + | ||
| 405 | + #if defined(__GLIBC__) && __GLIBC__ >= 2 | ||
| 406 | + #define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[8] | ||
| 407 | + #else | ||
| 408 | + #error "ARM/Linux pre-glibc2 not supported yet" | ||
| 409 | + #endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */ | ||
| 410 | + #elif defined(__s390__) | ||
| 411 | + #define MD_STACK_GROWS_DOWN | ||
| 412 | + | ||
| 413 | + /* There is no JB_SP in glibc at this time. (glibc 2.2.5) | ||
| 434 | */ | 414 | */ |
| 435 | -#define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[0].__gregs[9] | ||
| 436 | - | ||
| 437 | -#elif defined(__hppa__) | ||
| 438 | -#define MD_STACK_GROWS_UP | 415 | + #define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[0].__gregs[9] |
| 416 | + #elif defined(__hppa__) | ||
| 417 | + #define MD_STACK_GROWS_UP | ||
| 439 | 418 | ||
| 440 | -/* yes, this is gross, unfortunately at the moment (2002/08/01) there is | 419 | + /* yes, this is gross, unfortunately at the moment (2002/08/01) there is |
| 441 | * a bug in hppa's glibc header definition for JB_SP, so we can't | 420 | * a bug in hppa's glibc header definition for JB_SP, so we can't |
| 442 | * use that... | 421 | * use that... |
| 443 | */ | 422 | */ |
| 444 | -#define MD_GET_SP(_t) (*(long *)(((char *)&(_t)->context[0].__jmpbuf[0]) + 76)) | 423 | + #define MD_GET_SP(_t) (*(long *)(((char *)&(_t)->context[0].__jmpbuf[0]) + 76)) |
| 424 | + #else | ||
| 425 | + #error "Unknown CPU architecture" | ||
| 426 | + #endif /* Cases with common MD_INIT_CONTEXT and different SP locations */ | ||
| 445 | 427 | ||
| 446 | -#else | ||
| 447 | -#error "Unknown CPU architecture" | ||
| 448 | -#endif /* Cases with common MD_INIT_CONTEXT and different SP locations */ | ||
| 449 | - | ||
| 450 | -#define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 428 | + #define MD_INIT_CONTEXT(_thread, _sp, _main) \ |
| 451 | ST_BEGIN_MACRO \ | 429 | ST_BEGIN_MACRO \ |
| 452 | if (MD_SETJMP((_thread)->context)) \ | 430 | if (MD_SETJMP((_thread)->context)) \ |
| 453 | _main(); \ | 431 | _main(); \ |
| 454 | MD_GET_SP(_thread) = (long) (_sp); \ | 432 | MD_GET_SP(_thread) = (long) (_sp); \ |
| 455 | ST_END_MACRO | 433 | ST_END_MACRO |
| 434 | + #endif /* Cases with different MD_INIT_CONTEXT */ | ||
| 456 | 435 | ||
| 457 | -#endif /* Cases with different MD_INIT_CONTEXT */ | ||
| 458 | - | ||
| 459 | -#if defined(MD_USE_BUILTIN_SETJMP) && !defined(USE_LIBC_SETJMP) | ||
| 460 | -#define MD_SETJMP(env) _st_md_cxt_save(env) | ||
| 461 | -#define MD_LONGJMP(env, val) _st_md_cxt_restore(env, val) | 436 | + #if defined(MD_USE_BUILTIN_SETJMP) && !defined(USE_LIBC_SETJMP) |
| 437 | + #define MD_SETJMP(env) _st_md_cxt_save(env) | ||
| 438 | + #define MD_LONGJMP(env, val) _st_md_cxt_restore(env, val) | ||
| 462 | 439 | ||
| 463 | -extern int _st_md_cxt_save(jmp_buf env); | ||
| 464 | -extern void _st_md_cxt_restore(jmp_buf env, int val); | ||
| 465 | -#else | ||
| 466 | -#define MD_SETJMP(env) setjmp(env) | ||
| 467 | -#define MD_LONGJMP(env, val) longjmp(env, val) | ||
| 468 | -#endif | 440 | + extern int _st_md_cxt_save(jmp_buf env); |
| 441 | + 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 | ||
| 469 | 446 | ||
| 470 | #elif defined (NETBSD) | 447 | #elif defined (NETBSD) |
| 471 | - | ||
| 472 | -#define MD_STACK_GROWS_DOWN | ||
| 473 | -#define MD_USE_BSD_ANON_MMAP | ||
| 474 | -#define MD_ACCEPT_NB_INHERITED | ||
| 475 | -#define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 476 | -#define MD_HAVE_SOCKLEN_T | ||
| 477 | - | ||
| 478 | -#define MD_SETJMP(env) _setjmp(env) | ||
| 479 | -#define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 480 | - | ||
| 481 | -#if defined(__i386__) | ||
| 482 | -#define MD_JB_SP 2 | ||
| 483 | -#elif defined(__alpha__) | ||
| 484 | -#define MD_JB_SP 34 | ||
| 485 | -#elif defined(__sparc__) | ||
| 486 | -#define MD_JB_SP 0 | ||
| 487 | -#elif defined(__vax__) | ||
| 488 | -#define MD_JB_SP 2 | ||
| 489 | -#else | ||
| 490 | -#error Unknown CPU architecture | ||
| 491 | -#endif | ||
| 492 | - | ||
| 493 | -#define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 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) \ | ||
| 494 | ST_BEGIN_MACRO \ | 470 | ST_BEGIN_MACRO \ |
| 495 | if (MD_SETJMP((_thread)->context)) \ | 471 | if (MD_SETJMP((_thread)->context)) \ |
| 496 | _main(); \ | 472 | _main(); \ |
| 497 | (_thread)->context[MD_JB_SP] = (long) (_sp); \ | 473 | (_thread)->context[MD_JB_SP] = (long) (_sp); \ |
| 498 | ST_END_MACRO | 474 | ST_END_MACRO |
| 499 | 475 | ||
| 500 | -#define MD_GET_UTIME() \ | 476 | + #define MD_GET_UTIME() \ |
| 501 | struct timeval tv; \ | 477 | struct timeval tv; \ |
| 502 | (void) gettimeofday(&tv, NULL); \ | 478 | (void) gettimeofday(&tv, NULL); \ |
| 503 | return (tv.tv_sec * 1000000LL + tv.tv_usec) | 479 | return (tv.tv_sec * 1000000LL + tv.tv_usec) |
| 504 | 480 | ||
| 505 | #elif defined (OPENBSD) | 481 | #elif defined (OPENBSD) |
| 506 | - | ||
| 507 | -#define MD_STACK_GROWS_DOWN | ||
| 508 | -#define MD_USE_BSD_ANON_MMAP | ||
| 509 | -#define MD_ACCEPT_NB_INHERITED | ||
| 510 | -#define MD_ALWAYS_UNSERIALIZED_ACCEPT | ||
| 511 | - | ||
| 512 | -#define MD_SETJMP(env) _setjmp(env) | ||
| 513 | -#define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 514 | - | ||
| 515 | -#if defined(__i386__) | ||
| 516 | -#define MD_JB_SP 2 | ||
| 517 | -#elif defined(__alpha__) | ||
| 518 | -#define MD_JB_SP 34 | ||
| 519 | -#elif defined(__sparc__) | ||
| 520 | -#define MD_JB_SP 0 | ||
| 521 | -#elif defined(__amd64__) | ||
| 522 | -#define MD_JB_SP 6 | ||
| 523 | -#else | ||
| 524 | -#error Unknown CPU architecture | ||
| 525 | -#endif | ||
| 526 | - | ||
| 527 | -#define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 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) \ | ||
| 528 | ST_BEGIN_MACRO \ | 503 | ST_BEGIN_MACRO \ |
| 529 | if (MD_SETJMP((_thread)->context)) \ | 504 | if (MD_SETJMP((_thread)->context)) \ |
| 530 | _main(); \ | 505 | _main(); \ |
| 531 | (_thread)->context[MD_JB_SP] = (long) (_sp); \ | 506 | (_thread)->context[MD_JB_SP] = (long) (_sp); \ |
| 532 | ST_END_MACRO | 507 | ST_END_MACRO |
| 533 | 508 | ||
| 534 | -#define MD_GET_UTIME() \ | 509 | + #define MD_GET_UTIME() \ |
| 535 | struct timeval tv; \ | 510 | struct timeval tv; \ |
| 536 | (void) gettimeofday(&tv, NULL); \ | 511 | (void) gettimeofday(&tv, NULL); \ |
| 537 | return (tv.tv_sec * 1000000LL + tv.tv_usec) | 512 | return (tv.tv_sec * 1000000LL + tv.tv_usec) |
| 538 | 513 | ||
| 539 | #elif defined (OSF1) | 514 | #elif defined (OSF1) |
| 515 | + #include <signal.h> | ||
| 540 | 516 | ||
| 541 | -#include <signal.h> | 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 | ||
| 542 | 521 | ||
| 543 | -#define MD_STACK_GROWS_DOWN | ||
| 544 | -#define MD_USE_SYSV_ANON_MMAP | ||
| 545 | -#define MD_ACCEPT_NB_NOT_INHERITED | ||
| 546 | -#define MD_ALWAYS_UNSERIALIZED_ACCEPT | 522 | + #define MD_SETJMP(env) _setjmp(env) |
| 523 | + #define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 547 | 524 | ||
| 548 | -#define MD_SETJMP(env) _setjmp(env) | ||
| 549 | -#define MD_LONGJMP(env, val) _longjmp(env, val) | ||
| 550 | - | ||
| 551 | -#define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 525 | + #define MD_INIT_CONTEXT(_thread, _sp, _main) \ |
| 552 | ST_BEGIN_MACRO \ | 526 | ST_BEGIN_MACRO \ |
| 553 | if (MD_SETJMP((_thread)->context)) \ | 527 | if (MD_SETJMP((_thread)->context)) \ |
| 554 | _main(); \ | 528 | _main(); \ |
| 555 | ((struct sigcontext *)((_thread)->context))->sc_sp = (long) (_sp); \ | 529 | ((struct sigcontext *)((_thread)->context))->sc_sp = (long) (_sp); \ |
| 556 | ST_END_MACRO | 530 | ST_END_MACRO |
| 557 | 531 | ||
| 558 | -#define MD_GET_UTIME() \ | 532 | + #define MD_GET_UTIME() \ |
| 559 | struct timeval tv; \ | 533 | struct timeval tv; \ |
| 560 | (void) gettimeofday(&tv, NULL); \ | 534 | (void) gettimeofday(&tv, NULL); \ |
| 561 | return (tv.tv_sec * 1000000LL + tv.tv_usec) | 535 | return (tv.tv_sec * 1000000LL + tv.tv_usec) |
| 562 | 536 | ||
| 563 | #elif defined (SOLARIS) | 537 | #elif defined (SOLARIS) |
| 538 | + #include <sys/filio.h> | ||
| 539 | + extern int getpagesize(void); | ||
| 564 | 540 | ||
| 565 | -#include <sys/filio.h> | ||
| 566 | -extern int getpagesize(void); | ||
| 567 | - | ||
| 568 | -#define MD_STACK_GROWS_DOWN | ||
| 569 | -#define MD_USE_SYSV_ANON_MMAP | ||
| 570 | -#define MD_ACCEPT_NB_NOT_INHERITED | 541 | + #define MD_STACK_GROWS_DOWN |
| 542 | + #define MD_USE_SYSV_ANON_MMAP | ||
| 543 | + #define MD_ACCEPT_NB_NOT_INHERITED | ||
| 571 | 544 | ||
| 572 | -#define MD_SETJMP(env) setjmp(env) | ||
| 573 | -#define MD_LONGJMP(env, val) longjmp(env, val) | 545 | + #define MD_SETJMP(env) setjmp(env) |
| 546 | + #define MD_LONGJMP(env, val) longjmp(env, val) | ||
| 574 | 547 | ||
| 575 | -#if defined(sparc) || defined(__sparc) | ||
| 576 | -#ifdef _LP64 | ||
| 577 | -#define MD_STACK_PAD_SIZE 4095 | ||
| 578 | -#endif | ||
| 579 | -#define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 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) \ | ||
| 580 | ST_BEGIN_MACRO \ | 553 | ST_BEGIN_MACRO \ |
| 581 | (void) MD_SETJMP((_thread)->context); \ | 554 | (void) MD_SETJMP((_thread)->context); \ |
| 582 | (_thread)->context[1] = (long) (_sp); \ | 555 | (_thread)->context[1] = (long) (_sp); \ |
| 583 | (_thread)->context[2] = (long) _main; \ | 556 | (_thread)->context[2] = (long) _main; \ |
| 584 | ST_END_MACRO | 557 | ST_END_MACRO |
| 585 | -#elif defined(i386) || defined(__i386) | ||
| 586 | -#define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 558 | + #elif defined(i386) || defined(__i386) |
| 559 | + #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 587 | ST_BEGIN_MACRO \ | 560 | ST_BEGIN_MACRO \ |
| 588 | (void) MD_SETJMP((_thread)->context); \ | 561 | (void) MD_SETJMP((_thread)->context); \ |
| 589 | (_thread)->context[4] = (long) (_sp); \ | 562 | (_thread)->context[4] = (long) (_sp); \ |
| 590 | (_thread)->context[5] = (long) _main; \ | 563 | (_thread)->context[5] = (long) _main; \ |
| 591 | ST_END_MACRO | 564 | ST_END_MACRO |
| 592 | -#elif defined(__amd64__) | ||
| 593 | -#define MD_INIT_CONTEXT(_thread, _sp, _main) \ | 565 | + #elif defined(__amd64__) |
| 566 | + #define MD_INIT_CONTEXT(_thread, _sp, _main) \ | ||
| 594 | ST_BEGIN_MACRO \ | 567 | ST_BEGIN_MACRO \ |
| 595 | if (MD_SETJMP((_thread)->context)) \ | 568 | if (MD_SETJMP((_thread)->context)) \ |
| 596 | _main(); \ | 569 | _main(); \ |
| 597 | (_thread)->context[6] = (long) (_sp); \ | 570 | (_thread)->context[6] = (long) (_sp); \ |
| 598 | ST_END_MACRO | 571 | ST_END_MACRO |
| 599 | -#else | ||
| 600 | -#error Unknown CPU architecture | ||
| 601 | -#endif | 572 | + #else |
| 573 | + #error Unknown CPU architecture | ||
| 574 | + #endif | ||
| 602 | 575 | ||
| 603 | -#define MD_GET_UTIME() \ | 576 | + #define MD_GET_UTIME() \ |
| 604 | return (gethrtime() / 1000) | 577 | return (gethrtime() / 1000) |
| 605 | 578 | ||
| 606 | #else | 579 | #else |
| 607 | -#error Unknown OS | 580 | + #error Unknown OS |
| 608 | #endif /* OS */ | 581 | #endif /* OS */ |
| 609 | 582 | ||
| 583 | +/***************************************** | ||
| 584 | + * Other defines | ||
| 585 | + */ | ||
| 610 | #if !defined(MD_HAVE_POLL) && !defined(MD_DONT_HAVE_POLL) | 586 | #if !defined(MD_HAVE_POLL) && !defined(MD_DONT_HAVE_POLL) |
| 611 | -#define MD_HAVE_POLL | 587 | + #define MD_HAVE_POLL |
| 612 | #endif | 588 | #endif |
| 613 | 589 | ||
| 614 | #ifndef MD_STACK_PAD_SIZE | 590 | #ifndef MD_STACK_PAD_SIZE |
| 615 | -#define MD_STACK_PAD_SIZE 128 | 591 | + #define MD_STACK_PAD_SIZE 128 |
| 616 | #endif | 592 | #endif |
| 617 | 593 | ||
| 618 | #if !defined(MD_HAVE_SOCKLEN_T) && !defined(socklen_t) | 594 | #if !defined(MD_HAVE_SOCKLEN_T) && !defined(socklen_t) |
| 619 | -#define socklen_t int | 595 | + #define socklen_t int |
| 620 | #endif | 596 | #endif |
| 621 | 597 | ||
| 622 | #ifndef MD_CAP_STACK | 598 | #ifndef MD_CAP_STACK |
| 623 | -#define MD_CAP_STACK(var_addr) | 599 | + #define MD_CAP_STACK(var_addr) |
| 624 | #endif | 600 | #endif |
| 625 | 601 | ||
| 626 | #endif /* !__ST_MD_H__ */ | 602 | #endif /* !__ST_MD_H__ */ |
| @@ -129,8 +129,7 @@ extern "C" { | @@ -129,8 +129,7 @@ extern "C" { | ||
| 129 | extern void st_netfd_free(st_netfd_t fd); | 129 | extern void st_netfd_free(st_netfd_t fd); |
| 130 | extern int st_netfd_close(st_netfd_t fd); | 130 | extern int st_netfd_close(st_netfd_t fd); |
| 131 | extern int st_netfd_fileno(st_netfd_t fd); | 131 | extern int st_netfd_fileno(st_netfd_t fd); |
| 132 | - extern void st_netfd_setspecific(st_netfd_t fd, void *value, | ||
| 133 | - void (*destructor)(void *)); | 132 | + extern void st_netfd_setspecific(st_netfd_t fd, void *value, void (*destructor)(void *)); |
| 134 | extern void *st_netfd_getspecific(st_netfd_t fd); | 133 | extern void *st_netfd_getspecific(st_netfd_t fd); |
| 135 | extern int st_netfd_serialize_accept(st_netfd_t fd); | 134 | extern int st_netfd_serialize_accept(st_netfd_t fd); |
| 136 | extern int st_netfd_poll(st_netfd_t fd, int how, st_utime_t timeout); | 135 | extern int st_netfd_poll(st_netfd_t fd, int how, st_utime_t timeout); |
-
请 注册 或 登录 后发表评论