engine-sparc-sunos-5.3.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* ==== machdep.h ============================================================
  2.  * Copyright (c) 1994 Chris Provenzano, proven@athena.mit.edu
  3.  *
  4.  * $Id$
  5.  *
  6.  */
  7. #include <unistd.h>
  8. #include <setjmp.h>
  9. #include <sys/time.h>
  10. #include <sys/cdefs.h>
  11. /*
  12.  * The first machine dependent functions are the SEMAPHORES
  13.  * needing the test and set instruction.
  14.  */
  15. #define SEMAPHORE_CLEAR 0
  16. #define SEMAPHORE_SET   0xff
  17. #define SEMAPHORE_TEST_AND_SET(lock)    
  18. ({
  19. char *p = lock;
  20. long temp;                              
  21. __asm__ volatile("ldstub %1,%0"         
  22.         :"=r" (temp)         
  23.         :"m" (*p)
  24.     :"memory");                     
  25. temp;                                   
  26. })
  27. #define SEMAPHORE_RESET(lock)           
  28. {
  29. __asm__ volatile("stb %1, %0"
  30. :"=m" (*lock)
  31. :"r" (SEMAPHORE_CLEAR)
  32. :"memory");
  33. }
  34. /*
  35.  * More machine dependent macros
  36.  */
  37. #ifdef PTHREAD_KERNEL
  38. #define machdep_save_float_state(x)
  39. #define machdep_restore_float_state()
  40. #endif
  41. /*
  42.  * New types
  43.  */
  44. typedef char    semaphore;
  45. /*
  46.  * sigset_t macros
  47.  */
  48. #define SIGMAX 31
  49. #define SIG_ANY(sig)                    
  50. ({                                      
  51.     sigset_t *sig_addr = (sigset_t *)&sig;
  52.     int ret = 0;                        
  53.     int i;                              
  54.                                         
  55.     for (i = 1; i <= SIGMAX; i++) {     
  56.         if (sigismember(sig_addr, i)) { 
  57.             ret = 1;                    
  58.             break;                      
  59.         }                               
  60.     }                                   
  61.     ret;                                
  62. })
  63. /*
  64.  * New Strutures
  65.  */
  66. struct machdep_pthread {
  67.     void         *(*start_routine)(void *);
  68.     void         *start_argument;
  69.     void         *machdep_stack;
  70. struct itimerval machdep_timer;
  71.     jmp_buf      machdep_state;
  72. };
  73. /*
  74.  * Static machdep_pthread initialization values.
  75.  * For initial thread only.
  76.  */
  77. #define MACHDEP_PTHREAD_INIT    
  78. { NULL, NULL, NULL, { { 0, 0 }, { 0, 100000 } }, 0 }
  79. /*
  80.  * Minimum stack size
  81.  */
  82. #undef PTHREAD_STACK_MIN /* Defined in limits.h */
  83. #define PTHREAD_STACK_MIN 1024
  84. /*
  85.  * Some fd flag defines that are necessary to distinguish between posix
  86.  * behavior and bsd4.3 behavior.
  87.  */
  88. #define __FD_NONBLOCK  (O_NONBLOCK | O_NDELAY)
  89. /*
  90.  * New functions
  91.  */
  92. __BEGIN_DECLS
  93. #if defined(PTHREAD_KERNEL)
  94. #define __machdep_stack_get(x)      (x)->machdep_stack
  95. #define __machdep_stack_set(x, y)   (x)->machdep_stack = y
  96. #define __machdep_stack_repl(x, y)                          
  97. {                                                           
  98.     if (stack = __machdep_stack_get(x)) {                   
  99.         __machdep_stack_free(stack);                        
  100.     }                                                       
  101.     __machdep_stack_set(x, y);                              
  102. }  
  103. void *  __machdep_stack_alloc       __P_((size_t));
  104. void    __machdep_stack_free        __P_((void *));
  105. int machdep_save_state      __P_((void));
  106. #endif
  107. __END_DECLS