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

MySQL数据库

开发平台:

Visual C++

  1. /* ==== machdep.h ============================================================
  2.  * Copyright (c) 1993 Chris Provenzano, proven@athena.mit.edu
  3.  *
  4.  */
  5. #include <unistd.h>
  6. #include <setjmp.h>
  7. #include <sys/time.h>
  8. /*
  9.  * Stuff for compiling
  10.  */
  11. #if defined(__GNUC__)
  12. #if defined(__cplusplus)
  13. #define __BEGIN_DECLS   extern "C" {
  14. #define __END_DECLS             };
  15. #else
  16. #define __BEGIN_DECLS
  17. #define __END_DECLS
  18. #if !defined(__STDC__)
  19. #define const           __const
  20. #define inline          __inline
  21. #define signed          __signed
  22. #define volatile                __volatile
  23. #endif
  24. #endif
  25. #else /* !__GNUC__ */
  26. #define __BEGIN_DECLS
  27. #define __END_DECLS
  28. #if !defined(__STDC__) 
  29. #define const
  30. #endif
  31. #define inline
  32. #define signed
  33. #define volatile
  34. #endif
  35. /*
  36.  * The first machine dependent functions are the SEMAPHORES
  37.  * needing the test and set instruction.
  38.  *
  39.  * Note: The set and clear defines are backwards.
  40.  */
  41. #define SEMAPHORE_CLEAR { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  42. 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  43. 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }
  44. #define SEMAPHORE_SET   0
  45. #define SEMAPHORE_TEST_AND_SET(lock)    
  46. ({
  47. long real_addr;
  48. long temp;     
  49. real_addr = ((long)((*lock) + 15) & ~15);
  50. __asm__ volatile("ldcwx %%r0(%2),%0"
  51.         :"=r" (temp)                    
  52.         :"0" (temp),"r" (real_addr));   
  53. temp ? 0 : 1;                              
  54. })
  55. #define SEMAPHORE_RESET(lock)           
  56. ({
  57. char *real_addr;
  58. real_addr = (char*)((long)((*lock) + 15) & ~15);
  59. *real_addr = 0xff;
  60. })
  61. /*
  62.  * New types
  63.  * The semaphore is really 16 bytes but must be aligened on a 16 byte
  64.  * boundary. By specifing 31 bytes the macros can frob it correctly.
  65.  */
  66. typedef char semaphore[31];
  67. /*
  68.  * Macros for sigset_t
  69.  */
  70. #define SIGMAX 30
  71. /* see hpux-9.03/__signal.h for SIG_ANY */
  72. /*
  73.  * New Strutures
  74.  */
  75. struct machdep_pthread {
  76.     void         *(*start_routine)(void *);
  77.     void         *start_argument;
  78.     void         *machdep_stack;
  79.     struct itimerval machdep_timer;
  80.     jmp_buf machdep_state;
  81.  /*   long       machdep_state[_JBLEN]; */
  82. };
  83. /*
  84.  * Static machdep_pthread initialization values.
  85.  * For initial thread only.
  86.  */
  87. #define MACHDEP_PTHREAD_INIT    
  88. { NULL, NULL, NULL, { { 0, 0 }, { 0, 100000 } }, 0 }
  89. /*
  90.  * Minimum stack size
  91.  */
  92. #define PTHREAD_STACK_MIN 4096
  93. /*
  94.  * Some fd flag defines that are necessary to distinguish between posix
  95.  * behavior and bsd4.3 behavior.
  96.  */
  97. #define __FD_NONBLOCK  O_NONBLOCK
  98. /*
  99.  * page size
  100.  */
  101. #define getpagesize() 4096
  102. /*
  103.  * New functions
  104.  */
  105. __BEGIN_DECLS
  106. #if defined(PTHREAD_KERNEL)
  107. #define __machdep_stack_get(x)      (x)->machdep_stack
  108. #define __machdep_stack_set(x, y)   (x)->machdep_stack = y
  109. #define __machdep_stack_repl(x, y)                          
  110. {                                                           
  111.     if (stack = __machdep_stack_get(x)) {                   
  112.         __machdep_stack_free(stack);                        
  113.     }                                                       
  114.     __machdep_stack_set(x, y);                              
  115. }
  116. void *  __machdep_stack_alloc       __P_((size_t));
  117. void    __machdep_stack_free        __P_((void *));
  118. int machdep_save_state      __P_((void));
  119. #endif
  120. __END_DECLS