root/gc/include/gc_pthread_redirects.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* Our pthread support normally needs to intercept a number of thread   */
   2 /* calls.  We arrange to do that here, if appropriate.                  */
   3 
   4 #ifndef GC_PTHREAD_REDIRECTS_H
   5 
   6 #define GC_PTHREAD_REDIRECTS_H
   7 
   8 #if defined(GC_SOLARIS_THREADS)
   9 /* We need to intercept calls to many of the threads primitives, so     */
  10 /* that we can locate thread stacks and stop the world.                 */
  11 /* Note also that the collector cannot see thread specific data.        */
  12 /* Thread specific data should generally consist of pointers to         */
  13 /* uncollectable objects (allocated with GC_malloc_uncollectable,       */
  14 /* not the system malloc), which are deallocated using the destructor   */
  15 /* facility in thr_keycreate.  Alternatively, keep a redundant pointer  */
  16 /* to thread specific data on the thread stack.                         */
  17 # include <thread.h>
  18   int GC_thr_create(void *stack_base, size_t stack_size,
  19                     void *(*start_routine)(void *), void *arg, long flags,
  20                     thread_t *new_thread);
  21   int GC_thr_join(thread_t wait_for, thread_t *departed, void **status);
  22   int GC_thr_suspend(thread_t target_thread);
  23   int GC_thr_continue(thread_t target_thread);
  24   void * GC_dlopen(const char *path, int mode);
  25 # define thr_create GC_thr_create
  26 # define thr_join GC_thr_join
  27 # define thr_suspend GC_thr_suspend
  28 # define thr_continue GC_thr_continue
  29 #endif /* GC_SOLARIS_THREADS */
  30 
  31 #if defined(GC_SOLARIS_PTHREADS)
  32 # include <pthread.h>
  33 # include <signal.h>
  34   extern int GC_pthread_create(pthread_t *new_thread,
  35                                  const pthread_attr_t *attr,
  36                                  void * (*thread_execp)(void *), void *arg);
  37   extern int GC_pthread_join(pthread_t wait_for, void **status);
  38 # define pthread_join GC_pthread_join
  39 # define pthread_create GC_pthread_create
  40 #endif
  41 
  42 #if defined(GC_SOLARIS_PTHREADS) || defined(GC_SOLARIS_THREADS)
  43 # define dlopen GC_dlopen
  44 #endif /* SOLARIS_THREADS || SOLARIS_PTHREADS */
  45 
  46 
  47 #if !defined(GC_USE_LD_WRAP) && defined(GC_PTHREADS) && !defined(GC_SOLARIS_PTHREADS)
  48 /* We treat these similarly. */
  49 # include <pthread.h>
  50 # include <signal.h>
  51 
  52   int GC_pthread_create(pthread_t *new_thread,
  53                         const pthread_attr_t *attr,
  54                         void *(*start_routine)(void *), void *arg);
  55 #ifndef GC_DARWIN_THREADS
  56   int GC_pthread_sigmask(int how, const sigset_t *set, sigset_t *oset);
  57 #endif
  58   int GC_pthread_join(pthread_t thread, void **retval);
  59   int GC_pthread_detach(pthread_t thread);
  60 
  61 #if defined(GC_OSF1_THREADS) \
  62     && defined(_PTHREAD_USE_MANGLED_NAMES_) && !defined(_PTHREAD_USE_PTDNAM_)
  63 /* Unless the compiler supports #pragma extern_prefix, the Tru64 UNIX
  64    <pthread.h> redefines some POSIX thread functions to use mangled names.
  65    If so, undef them before redefining. */
  66 # undef pthread_create
  67 # undef pthread_join
  68 # undef pthread_detach
  69 #endif
  70 
  71 # define pthread_create GC_pthread_create
  72 # define pthread_join GC_pthread_join
  73 # define pthread_detach GC_pthread_detach
  74 
  75 #ifndef GC_DARWIN_THREADS
  76 # define pthread_sigmask GC_pthread_sigmask
  77 # define dlopen GC_dlopen
  78 #endif
  79 
  80 #endif /* GC_xxxxx_THREADS */
  81 
  82 #endif /* GC_PTHREAD_REDIRECTS_H */

/* [<][>][^][v][top][bottom][index][help] */