2010-06-21 Rodrigo Kumpera <rkumpera@novell.com>
[mono.git] / mono / utils / gc_wrapper.h
blob591b6ef480282f33e01b3a00fd7e1271d6bb8991
1 #ifndef __MONO_OS_GC_WRAPPER_H__
2 #define __MONO_OS_GC_WRAPPER_H__
4 #include <config.h>
5 #include <stdlib.h>
7 #ifdef HAVE_BOEHM_GC
9 # ifdef _MSC_VER
10 # include <winsock2.h>
11 # else
12 /* libgc specifies this on the command line,
13 * so we must define it ourselfs
15 # define GC_GCJ_SUPPORT
16 # endif
19 * Local allocation is only beneficial if we have __thread
20 * We had to fix a bug with include order in libgc, so only do
21 * it if it is the included one.
24 # if defined(HAVE_KW_THREAD) && defined(USE_INCLUDED_LIBGC) && !defined(__powerpc__)
25 /* The local alloc stuff is in pthread_support.c, but solaris uses solaris_threads.c */
26 /* It is also disabled on solaris/x86 by libgc/configure.in */
27 /*
28 * ARM has no definition for some atomic functions in gc_locks.h and
29 * support is also disabled in libgc/configure.in.
31 # if !defined(__sparc__) && !defined(__sun) && !defined(__arm__) && !defined(__mips__)
32 # define GC_REDIRECT_TO_LOCAL
33 # endif
34 # endif
36 # ifdef HAVE_GC_GC_H
37 # include <gc/gc.h>
38 # include <gc/gc_typed.h>
39 # include <gc/gc_mark.h>
40 # include <gc/gc_gcj.h>
41 # elif defined(HAVE_GC_H) || defined(USE_INCLUDED_LIBGC)
42 # include <gc.h>
43 # include <gc_typed.h>
44 # include <gc_mark.h>
45 # include <gc_gcj.h>
46 # else
47 # error have boehm GC without headers, you probably need to install them by hand
48 # endif
50 #if defined(HOST_WIN32)
51 #define CreateThread GC_CreateThread
52 #endif
54 #elif defined(HAVE_SGEN_GC)
56 #if defined(HOST_WIN32)
57 #define CreateThread mono_gc_CreateThread
58 #else
59 /* pthread function wrappers */
60 #include <pthread.h>
61 #include <signal.h>
63 int mono_gc_pthread_create (pthread_t *new_thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
64 int mono_gc_pthread_join (pthread_t thread, void **retval);
65 int mono_gc_pthread_detach (pthread_t thread);
67 #define pthread_create mono_gc_pthread_create
68 #define pthread_join mono_gc_pthread_join
69 #define pthread_detach mono_gc_pthread_detach
71 #endif
73 #else /* not Boehm and not sgen GC */
74 #endif
76 #endif