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