3 * Handle the differences between the llvm backend beeing embedded
4 * or loaded at runtime.
10 #ifdef MONO_LLVM_LOADED
14 void (*cleanup
)(void);
15 void (*emit_method
)(MonoCompile
*cfg
);
16 void (*emit_call
)(MonoCompile
*cfg
, MonoCallInst
*call
);
17 void (*create_aot_module
)(MonoAssembly
*assembly
, const char *global_prefix
, int initial_got_size
, LLVMModuleFlags flags
);
18 void (*fixup_aot_module
)(void);
19 void (*emit_aot_module
)(const char *filename
, const char *cu_name
);
20 void (*check_method_supported
)(MonoCompile
*cfg
);
21 void (*emit_aot_file_info
)(MonoAotFileInfo
*info
, gboolean has_jitted_code
);
22 void (*emit_aot_data
)(const char *symbol
, guint8
*data
, int data_len
);
23 void (*free_domain_info
)(MonoDomain
*domain
);
24 void (*create_vars
)(MonoCompile
*cfg
);
25 MonoCPUFeatures (*get_cpu_features
)(void);
28 static LoadedBackend backend
;
37 mono_llvm_cleanup (void)
43 mono_llvm_emit_method (MonoCompile
*cfg
)
45 backend
.emit_method (cfg
);
49 mono_llvm_emit_call (MonoCompile
*cfg
, MonoCallInst
*call
)
51 backend
.emit_call (cfg
, call
);
55 mono_llvm_create_aot_module (MonoAssembly
*assembly
, const char *global_prefix
, int initial_got_size
, LLVMModuleFlags flags
)
57 backend
.create_aot_module (assembly
, global_prefix
, initial_got_size
, flags
);
61 mono_llvm_emit_aot_module (const char *filename
, const char *cu_name
)
63 backend
.emit_aot_module (filename
, cu_name
);
67 mono_llvm_fixup_aot_module (void)
69 backend
.fixup_aot_module ();
73 mono_llvm_check_method_supported (MonoCompile
*cfg
)
75 backend
.check_method_supported (cfg
);
79 mono_llvm_free_domain_info (MonoDomain
*domain
)
81 /* This is called even when llvm is not enabled */
82 if (backend
.free_domain_info
)
83 backend
.free_domain_info (domain
);
87 mono_llvm_emit_aot_file_info (MonoAotFileInfo
*info
, gboolean has_jitted_code
)
89 backend
.emit_aot_file_info (info
, has_jitted_code
);
93 mono_llvm_emit_aot_data (const char *symbol
, guint8
*data
, int data_len
)
95 backend
.emit_aot_data (symbol
, data
, data_len
);
99 mono_llvm_create_vars (MonoCompile
*cfg
)
101 backend
.create_vars (cfg
);
105 mono_llvm_load (const char* bpath
)
108 MonoDl
*llvm_lib
= mono_dl_open_runtime_lib ("mono-llvm", MONO_DL_LAZY
, &err
);
111 g_warning ("llvm load failed: %s\n", err
);
116 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_init", (void**)&backend
.init
);
117 if (err
) goto symbol_error
;
118 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_cleanup", (void**)&backend
.cleanup
);
119 if (err
) goto symbol_error
;
120 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_emit_method", (void**)&backend
.emit_method
);
121 if (err
) goto symbol_error
;
122 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_emit_call", (void**)&backend
.emit_call
);
123 if (err
) goto symbol_error
;
124 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_create_aot_module", (void**)&backend
.create_aot_module
);
125 if (err
) goto symbol_error
;
126 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_emit_aot_module", (void**)&backend
.emit_aot_module
);
127 if (err
) goto symbol_error
;
128 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_fixup_aot_module", (void**)&backend
.fixup_aot_module
);
129 if (err
) goto symbol_error
;
130 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_check_method_supported", (void**)&backend
.check_method_supported
);
131 if (err
) goto symbol_error
;
132 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_free_domain_info", (void**)&backend
.free_domain_info
);
133 if (err
) goto symbol_error
;
134 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_emit_aot_file_info", (void**)&backend
.emit_aot_file_info
);
135 if (err
) goto symbol_error
;
136 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_emit_aot_data", (void**)&backend
.emit_aot_data
);
137 if (err
) goto symbol_error
;
138 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_create_vars", (void**)&backend
.create_vars
);
139 if (err
) goto symbol_error
;
140 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_get_cpu_features", (void**)&backend
.get_cpu_features
);
141 if (err
) goto symbol_error
;
144 g_warning ("llvm symbol load failed: %s\n", err
);
149 MonoCPUFeatures
mono_llvm_get_cpu_features (void)
151 return backend
.get_cpu_features ();
157 mono_llvm_load (const char* bpath
)
162 #endif /* MONO_LLVM_LOADED */