2 * Handle the differences between the llvm backend beeing embedded
3 * or loaded at runtime.
8 #ifdef MONO_LLVM_LOADED
11 #include <mach-o/dyld.h>
14 typedef void (*MonoLLVMVoidFunc)(void);
15 typedef void (*MonoLLVMCFGFunc)(MonoCompile *cfg);
16 typedef void (*MonoLLVMEmitCallFunc)(MonoCompile *cfg, MonoCallInst *call);
17 typedef void (*MonoLLVMCreateAotFunc)(MonoAssembly *assembly, const char *global_prefix, gboolean emit_dwarf, gboolean static_link, gboolean llvm_only);
18 typedef void (*MonoLLVMEmitAotFunc)(const char *filename, const char *cu_name);
19 typedef void (*MonoLLVMEmitAotInfoFunc)(MonoAotFileInfo *info, gboolean has_jitted_code);
20 typedef void (*MonoLLVMEmitAotDataFunc)(const char *symbol, guint8 *data, int data_len);
21 typedef void (*MonoLLVMFreeDomainFunc)(MonoDomain *domain);
23 static MonoLLVMVoidFunc mono_llvm_init_fptr;
24 static MonoLLVMVoidFunc mono_llvm_cleanup_fptr;
25 static MonoLLVMCFGFunc mono_llvm_emit_method_fptr;
26 static MonoLLVMEmitCallFunc mono_llvm_emit_call_fptr;
27 static MonoLLVMCreateAotFunc mono_llvm_create_aot_module_fptr;
28 static MonoLLVMEmitAotFunc mono_llvm_emit_aot_module_fptr;
29 static MonoLLVMCFGFunc mono_llvm_check_method_supported_fptr;
30 static MonoLLVMEmitAotInfoFunc mono_llvm_emit_aot_file_info_fptr;
31 static MonoLLVMEmitAotDataFunc mono_llvm_emit_aot_data_fptr;
32 static MonoLLVMFreeDomainFunc mono_llvm_free_domain_info_fptr;
37 mono_llvm_init_fptr ();
41 mono_llvm_cleanup (void)
43 mono_llvm_cleanup_fptr ();
47 mono_llvm_emit_method (MonoCompile *cfg)
49 mono_llvm_emit_method_fptr (cfg);
53 mono_llvm_emit_call (MonoCompile *cfg, MonoCallInst *call)
55 mono_llvm_emit_call_fptr (cfg, call);
59 mono_llvm_create_aot_module (MonoAssembly *assembly, const char *global_prefix, gboolean emit_dwarf, gboolean static_link, gboolean llvm_only)
61 g_assert (mono_llvm_create_aot_module_fptr);
62 mono_llvm_create_aot_module_fptr (assembly, global_prefix, emit_dwarf, static_link, llvm_only);
66 mono_llvm_emit_aot_module (const char *filename, const char *cu_name)
68 g_assert (mono_llvm_emit_aot_module_fptr);
69 mono_llvm_emit_aot_module_fptr (filename, cu_name);
73 mono_llvm_check_method_supported (MonoCompile *cfg)
75 mono_llvm_check_method_supported_fptr (cfg);
79 mono_llvm_free_domain_info (MonoDomain *domain)
81 if (mono_llvm_free_domain_info_fptr)
82 mono_llvm_free_domain_info_fptr (domain);
86 mono_llvm_emit_aot_file_info (MonoAotFileInfo *info, gboolean has_jitted_code)
88 if (mono_llvm_emit_aot_file_info_fptr)
89 mono_llvm_emit_aot_file_info_fptr (info, has_jitted_code);
93 mono_llvm_emit_aot_data (const char *symbol, guint8 *data, int data_len)
95 if (mono_llvm_emit_aot_data_fptr)
96 mono_llvm_emit_aot_data_fptr (symbol, data, data_len);
100 mono_llvm_load (const char* bpath)
103 MonoDl *llvm_lib = mono_dl_open_runtime_lib ("mono-llvm", MONO_DL_LAZY, &err);
106 g_warning ("llvm load failed: %s\n", err);
111 err = mono_dl_symbol (llvm_lib, "mono_llvm_init", (void**)&mono_llvm_init_fptr);
112 if (err) goto symbol_error;
113 err = mono_dl_symbol (llvm_lib, "mono_llvm_cleanup", (void**)&mono_llvm_cleanup_fptr);
114 if (err) goto symbol_error;
115 err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_method", (void**)&mono_llvm_emit_method_fptr);
116 if (err) goto symbol_error;
117 err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_call", (void**)&mono_llvm_emit_call_fptr);
118 if (err) goto symbol_error;
119 err = mono_dl_symbol (llvm_lib, "mono_llvm_create_aot_module", (void**)&mono_llvm_create_aot_module_fptr);
120 if (err) goto symbol_error;
121 err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_aot_module", (void**)&mono_llvm_emit_aot_module_fptr);
122 if (err) goto symbol_error;
123 err = mono_dl_symbol (llvm_lib, "mono_llvm_check_method_supported", (void**)&mono_llvm_check_method_supported_fptr);
124 if (err) goto symbol_error;
125 err = mono_dl_symbol (llvm_lib, "mono_llvm_free_domain_info", (void**)&mono_llvm_free_domain_info_fptr);
126 if (err) goto symbol_error;
127 err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_aot_file_info", (void**)&mono_llvm_emit_aot_file_info_fptr);
128 if (err) goto symbol_error;
129 err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_aot_data", (void**)&mono_llvm_emit_aot_data_fptr);
130 if (err) goto symbol_error;
133 g_warning ("llvm symbol load failed: %s\n", err);
141 mono_llvm_load (const char* bpath)
146 #endif /* MONO_LLVM_LOADED */