Merge pull request #5504 from ntherning/wait-for-native-thread-to-die-in-Thread-Join
[mono.git] / mono / mini / interp / interp.h
1 /**
2  * \file
3  */
4
5 #ifndef __MONO_MINI_INTERPRETER_H__
6 #define __MONO_MINI_INTERPRETER_H__
7 #include <mono/mini/mini.h>
8
9 #ifdef TARGET_WASM
10 #define INTERP_ICALL_TRAMP_IARGS 12
11 #define INTERP_ICALL_TRAMP_FARGS 12
12 #else
13 #define INTERP_ICALL_TRAMP_IARGS 12
14 #define INTERP_ICALL_TRAMP_FARGS 4
15 #endif
16
17 struct _InterpMethodArguments {
18         size_t ilen;
19         gpointer *iargs;
20         size_t flen;
21         double *fargs;
22         gpointer *retval;
23         size_t is_float_ret;
24 #ifdef TARGET_WASM
25         MonoMethodSignature *sig;
26 #endif
27 };
28
29 typedef struct _InterpMethodArguments InterpMethodArguments;
30
31
32 typedef struct _MonoInterpStackIter MonoInterpStackIter;
33
34 /* Needed for stack allocation */
35 struct _MonoInterpStackIter {
36         gpointer dummy [8];
37 };
38
39 typedef gpointer MonoInterpFrameHandle;
40
41 int
42 mono_interp_regression_list (int verbose, int count, char *images []);
43
44 void
45 mono_interp_init (void);
46
47 gpointer
48 mono_interp_create_method_pointer (MonoMethod *method, MonoError *error);
49
50 MonoObject*
51 mono_interp_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoObject **exc, MonoError *error);
52
53 void
54 mono_interp_init_delegate (MonoDelegate *del);
55
56 gpointer
57 mono_interp_create_trampoline (MonoDomain *domain, MonoMethod *method, MonoError *error);
58
59 void
60 mono_interp_parse_options (const char *options);
61
62 void
63 interp_walk_stack_with_ctx (MonoInternalStackWalk func, MonoContext *ctx, MonoUnwindOptions options, void *user_data);
64
65 void
66 mono_interp_set_resume_state (MonoJitTlsData *jit_tls, MonoException *ex, MonoInterpFrameHandle interp_frame, gpointer handler_ip);
67
68 void
69 mono_interp_run_finally (StackFrameInfo *frame, int clause_index, gpointer handler_ip);
70
71 void
72 mono_interp_frame_iter_init (MonoInterpStackIter *iter, gpointer interp_exit_data);
73
74 gboolean
75 mono_interp_frame_iter_next (MonoInterpStackIter *iter, StackFrameInfo *frame);
76
77 MonoJitInfo*
78 mono_interp_find_jit_info (MonoDomain *domain, MonoMethod *method);
79
80 void
81 mono_interp_set_breakpoint (MonoJitInfo *jinfo, gpointer ip);
82
83 void
84 mono_interp_clear_breakpoint (MonoJitInfo *jinfo, gpointer ip);
85
86 MonoJitInfo*
87 mono_interp_frame_get_jit_info (MonoInterpFrameHandle frame);
88
89 gpointer
90 mono_interp_frame_get_ip (MonoInterpFrameHandle frame);
91
92 gpointer
93 mono_interp_frame_get_arg (MonoInterpFrameHandle frame, int pos);
94
95 gpointer
96 mono_interp_frame_get_local (MonoInterpFrameHandle frame, int pos);
97
98 gpointer
99 mono_interp_frame_get_this (MonoInterpFrameHandle frame);
100
101 void
102 mono_interp_start_single_stepping (void);
103
104 void
105 mono_interp_stop_single_stepping (void);
106
107 #endif /* __MONO_MINI_INTERPRETER_H__ */