-#ifdef __MACH__
-#include <mach-o/dyld.h>
-#endif
-
-typedef void (*MonoLLVMVoidFunc)(void);
-typedef void (*MonoLLVMCFGFunc)(MonoCompile *cfg);
-typedef void (*MonoLLVMEmitCallFunc)(MonoCompile *cfg, MonoCallInst *call);
-typedef void (*MonoLLVMCreateAotFunc)(MonoAssembly *assembly, const char *global_prefix, gboolean emit_dwarf, gboolean static_link);
-typedef void (*MonoLLVMEmitAotFunc)(const char *filename, const char *cu_name);
-typedef void (*MonoLLVMEmitAotInfoFunc)(MonoAotFileInfo *info, gboolean has_jitted_code);
-typedef void (*MonoLLVMEmitAotDataFunc)(const char *symbol, guint8 *data, int data_len);
-typedef void (*MonoLLVMFreeDomainFunc)(MonoDomain *domain);
-
-static MonoLLVMVoidFunc mono_llvm_init_fptr;
-static MonoLLVMVoidFunc mono_llvm_cleanup_fptr;
-static MonoLLVMCFGFunc mono_llvm_emit_method_fptr;
-static MonoLLVMEmitCallFunc mono_llvm_emit_call_fptr;
-static MonoLLVMCreateAotFunc mono_llvm_create_aot_module_fptr;
-static MonoLLVMEmitAotFunc mono_llvm_emit_aot_module_fptr;
-static MonoLLVMCFGFunc mono_llvm_check_method_supported_fptr;
-static MonoLLVMEmitAotInfoFunc mono_llvm_emit_aot_file_info_fptr;
-static MonoLLVMEmitAotDataFunc mono_llvm_emit_aot_data_fptr;
-static MonoLLVMFreeDomainFunc mono_llvm_free_domain_info_fptr;
+typedef struct {
+ void (*init)(void);
+ void (*cleanup)(void);
+ void (*emit_method)(MonoCompile *cfg);
+ void (*emit_call)(MonoCompile *cfg, MonoCallInst *call);
+ void (*create_aot_module)(MonoAssembly *assembly, const char *global_prefix, int initial_got_size, gboolean emit_dwarf, gboolean static_link, gboolean llvm_only);
+ void (*emit_aot_module)(const char *filename, const char *cu_name);
+ void (*check_method_supported)(MonoCompile *cfg);
+ void (*emit_aot_file_info)(MonoAotFileInfo *info, gboolean has_jitted_code);
+ void (*emit_aot_data)(const char *symbol, guint8 *data, int data_len);
+ void (*free_domain_info)(MonoDomain *domain);
+ void (*create_vars)(MonoCompile *cfg);
+} LoadedBackend;
+
+static LoadedBackend backend;