Merge pull request #1826 from alexanderkyte/remove_all_processes_callback_test
[mono.git] / mono / mini / jit.h
1 /*
2  * Author:
3  *   Dietmar Maurer (dietmar@ximian.com)
4  *
5  * (C) 2001, 2002, 2003 Ximian, Inc.
6  */
7
8 #ifndef _MONO_JIT_JIT_H_
9 #define _MONO_JIT_JIT_H_
10
11 #include <mono/metadata/appdomain.h>
12
13 MONO_BEGIN_DECLS
14
15 MONO_API MonoDomain * 
16 mono_jit_init              (const char *file);
17
18 MONO_API MonoDomain * 
19 mono_jit_init_version      (const char *root_domain_name, const char *runtime_version);
20
21 MONO_API int
22 mono_jit_exec              (MonoDomain *domain, MonoAssembly *assembly, 
23                             int argc, char *argv[]);
24 MONO_API void        
25 mono_jit_cleanup           (MonoDomain *domain);
26
27 MONO_API mono_bool
28 mono_jit_set_trace_options (const char* options);
29
30 MONO_API void
31 mono_set_signal_chaining   (mono_bool chain_signals);
32
33 MONO_API void
34 mono_set_crash_chaining   (mono_bool chain_signals);
35
36 /**
37  * This function is deprecated, use mono_jit_set_aot_mode instead.
38  */
39 MONO_API void
40 mono_jit_set_aot_only      (mono_bool aot_only);
41
42 /**
43  * Allows control over our AOT (Ahead-of-time) compilation mode.
44  */
45 typedef enum {
46         /* Disables AOT mode */
47         MONO_AOT_MODE_NONE,
48         /* Enables normal AOT mode, equivalent to mono_jit_set_aot_only (false) */
49         MONO_AOT_MODE_NORMAL,
50         /* Enables hyrbid AOT mode, JIT can still be used for wrappers */
51         MONO_AOT_MODE_HYBRID,
52         /* Enables full AOT mode, JIT is disabled and not allowed,
53          * equivalent to mono_jit_set_aot_only (true) */
54         MONO_AOT_MODE_FULL
55 } MonoAotMode;
56
57 MONO_API void
58 mono_jit_set_aot_mode      (MonoAotMode mode);
59
60 /* Allow embedders to decide wherther to actually obey breakpoint instructions
61  * in specific methods (works for both break IL instructions and Debugger.Break ()
62  * method calls).
63  */
64 typedef enum {
65         /* the default is to always obey the breakpoint */
66         MONO_BREAK_POLICY_ALWAYS,
67         /* a nop is inserted instead of a breakpoint */
68         MONO_BREAK_POLICY_NEVER,
69         /* the breakpoint is executed only if the program has ben started under
70          * the debugger (that is if a debugger was attached at the time the method
71          * was compiled).
72          */
73         MONO_BREAK_POLICY_ON_DBG
74 } MonoBreakPolicy;
75
76 typedef MonoBreakPolicy (*MonoBreakPolicyFunc) (MonoMethod *method);
77 MONO_API void mono_set_break_policy (MonoBreakPolicyFunc policy_callback);
78
79 MONO_API void
80 mono_jit_parse_options     (int argc, char * argv[]);
81
82 MONO_API char*       mono_get_runtime_build_info    (void);
83
84 /* The following APIs are not stable. Avoid if possible. */
85
86 MONO_API MonoJitInfo *
87 mono_get_jit_info_from_method (MonoDomain *domain, MonoMethod *method);
88
89 MONO_API void *
90 mono_aot_get_method (MonoDomain *domain, MonoMethod *method);
91
92 MONO_END_DECLS
93
94 #endif
95