2 * checked-build.h: Expensive asserts used when mono is built with --with-checked-build=yes
5 * Rodrigo Kumpera (kumpera@gmail.com)
10 #ifndef __CHECKED_BUILD_H__
11 #define __CHECKED_BUILD_H__
18 GC runtime modes rules:
22 Call into foreigh functions.
23 Call GC Safe or Neutral modes functions.
24 Read from pinned managed memory.
27 Touch managed memory (read/write).
35 Touch managed memory (read/write).
36 Call GC Unsafe or Neutral modes functions.
39 Call foreign native code (embedder callbacks, pinvokes, etc)
40 Call into any Blocking functions/syscalls (mutexes, IO, etc)
44 Poking into managed memory.
48 Call other GC Neutral mode functions.
52 Call foreign native code (embedder callbacks, pinvokes, etc)
53 Call into any Blocking functions/syscalls (mutexes, IO, etc)
57 Functions that can be called from both coop or preept modes.
61 #define MONO_REQ_GC_SAFE_MODE do { \
62 assert_gc_safe_mode (); \
65 #define MONO_REQ_GC_UNSAFE_MODE do { \
66 assert_gc_unsafe_mode (); \
69 #define MONO_REQ_GC_NEUTRAL_MODE do { \
70 assert_gc_neutral_mode (); \
74 This can be called by embedders
76 #define MONO_REQ_API_ENTRYPOINT
79 The JIT will generate code that will land on this function
81 #define MONO_REQ_RUNTIME_ENTRYPOINT
83 #define CHECKED_MONO_INIT() do { checked_build_init (); } while (0)
85 #define CHECKED_BUILD_THREAD_TRANSITION(transition, info, from_state, suspend_count, next_state, suspend_count_delta) do { \
86 checked_build_thread_transition (transition, info, from_state, suspend_count, next_state, suspend_count_delta); \
89 void assert_gc_safe_mode (void);
90 void assert_gc_unsafe_mode (void);
91 void assert_gc_neutral_mode (void);
93 void checked_build_init (void);
94 void checked_build_thread_transition(const char *transition, void *info, int from_state, int suspend_count, int next_state, int suspend_count_delta);
98 #define MONO_REQ_GC_SAFE_MODE
99 #define MONO_REQ_GC_UNSAFE_MODE
100 #define MONO_REQ_GC_NEUTRAL_MODE
101 #define MONO_REQ_API_ENTRYPOINT
102 #define MONO_REQ_RUNTIME_ENTRYPOINT
104 #define CHECKED_MONO_INIT()
105 #define CHECKED_BUILD_THREAD_TRANSITION(transition, info, from_state, suspend_count, next_state, suspend_count_delta)
107 #endif /* CHECKED_BUILD */