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)(const char *got_symbol, gboolean external_symbols, gboolean emit_dwarf);
18 typedef void (*MonoLLVMEmitAotFunc)(const char *filename, const char *cu_name);
19 typedef void (*MonoLLVMFreeDomainFunc)(MonoDomain *domain);
21 static MonoLLVMVoidFunc mono_llvm_init_fptr;
22 static MonoLLVMVoidFunc mono_llvm_cleanup_fptr;
23 static MonoLLVMCFGFunc mono_llvm_emit_method_fptr;
24 static MonoLLVMEmitCallFunc mono_llvm_emit_call_fptr;
25 static MonoLLVMCreateAotFunc mono_llvm_create_aot_module_fptr;
26 static MonoLLVMEmitAotFunc mono_llvm_emit_aot_module_fptr;
27 static MonoLLVMCFGFunc mono_llvm_check_method_supported_fptr;
28 static MonoLLVMFreeDomainFunc mono_llvm_free_domain_info_fptr;
33 mono_llvm_init_fptr ();
37 mono_llvm_cleanup (void)
39 mono_llvm_cleanup_fptr ();
43 mono_llvm_emit_method (MonoCompile *cfg)
45 mono_llvm_emit_method_fptr (cfg);
49 mono_llvm_emit_call (MonoCompile *cfg, MonoCallInst *call)
51 mono_llvm_emit_call_fptr (cfg, call);
55 mono_llvm_create_aot_module (const char *got_symbol, gboolean external_symbols, gboolean emit_dwarf)
57 g_assert (mono_llvm_create_aot_module_fptr);
58 mono_llvm_create_aot_module_fptr (got_symbol, external_symbols, emit_dwarf);
62 mono_llvm_emit_aot_module (const char *filename, const char *cu_name)
64 g_assert (mono_llvm_emit_aot_module_fptr);
65 mono_llvm_emit_aot_module_fptr (filename, cu_name);
69 mono_llvm_check_method_supported (MonoCompile *cfg)
71 mono_llvm_check_method_supported_fptr (cfg);
75 mono_llvm_free_domain_info (MonoDomain *domain)
77 if (mono_llvm_free_domain_info_fptr)
78 mono_llvm_free_domain_info_fptr (domain);
82 mono_llvm_load (const char* bpath)
85 MonoDl *llvm_lib = mono_dl_open_runtime_lib ("mono-llvm", MONO_DL_LAZY, &err);
88 g_warning ("llvm load failed: %s\n", err);
93 err = mono_dl_symbol (llvm_lib, "mono_llvm_init", (void**)&mono_llvm_init_fptr);
94 if (err) goto symbol_error;
95 err = mono_dl_symbol (llvm_lib, "mono_llvm_cleanup", (void**)&mono_llvm_cleanup_fptr);
96 if (err) goto symbol_error;
97 err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_method", (void**)&mono_llvm_emit_method_fptr);
98 if (err) goto symbol_error;
99 err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_call", (void**)&mono_llvm_emit_call_fptr);
100 if (err) goto symbol_error;
101 err = mono_dl_symbol (llvm_lib, "mono_llvm_create_aot_module", (void**)&mono_llvm_create_aot_module_fptr);
102 if (err) goto symbol_error;
103 err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_aot_module", (void**)&mono_llvm_emit_aot_module_fptr);
104 if (err) goto symbol_error;
105 err = mono_dl_symbol (llvm_lib, "mono_llvm_check_method_supported", (void**)&mono_llvm_check_method_supported_fptr);
106 if (err) goto symbol_error;
107 err = mono_dl_symbol (llvm_lib, "mono_llvm_free_domain_info", (void**)&mono_llvm_free_domain_info_fptr);
108 if (err) goto symbol_error;
111 g_warning ("llvm symbol load failed: %s\n", err);
119 mono_llvm_load (const char* bpath)
124 #endif /* MONO_LLVM_LOADED */