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
, gboolean emit_dwarf
, gboolean static_link
, gboolean llvm_only
);
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
);
27 static LoadedBackend backend
;
36 mono_llvm_cleanup (void)
42 mono_llvm_emit_method (MonoCompile
*cfg
)
44 backend
.emit_method (cfg
);
48 mono_llvm_emit_call (MonoCompile
*cfg
, MonoCallInst
*call
)
50 backend
.emit_call (cfg
, call
);
54 mono_llvm_create_aot_module (MonoAssembly
*assembly
, const char *global_prefix
, int initial_got_size
, gboolean emit_dwarf
, gboolean static_link
, gboolean llvm_only
)
56 backend
.create_aot_module (assembly
, global_prefix
, initial_got_size
, emit_dwarf
, static_link
, llvm_only
);
60 mono_llvm_emit_aot_module (const char *filename
, const char *cu_name
)
62 backend
.emit_aot_module (filename
, cu_name
);
66 mono_llvm_fixup_aot_module (void)
68 backend
.fixup_aot_module ();
72 mono_llvm_check_method_supported (MonoCompile
*cfg
)
74 backend
.check_method_supported (cfg
);
78 mono_llvm_free_domain_info (MonoDomain
*domain
)
80 /* This is called even when llvm is not enabled */
81 if (backend
.free_domain_info
)
82 backend
.free_domain_info (domain
);
86 mono_llvm_emit_aot_file_info (MonoAotFileInfo
*info
, gboolean has_jitted_code
)
88 backend
.emit_aot_file_info (info
, has_jitted_code
);
92 mono_llvm_emit_aot_data (const char *symbol
, guint8
*data
, int data_len
)
94 backend
.emit_aot_data (symbol
, data
, data_len
);
98 mono_llvm_create_vars (MonoCompile
*cfg
)
100 backend
.create_vars (cfg
);
104 mono_llvm_load (const char* bpath
)
107 MonoDl
*llvm_lib
= mono_dl_open_runtime_lib ("mono-llvm", MONO_DL_LAZY
, &err
);
110 g_warning ("llvm load failed: %s\n", err
);
115 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_init", (void**)&backend
.init
);
116 if (err
) goto symbol_error
;
117 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_cleanup", (void**)&backend
.cleanup
);
118 if (err
) goto symbol_error
;
119 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_emit_method", (void**)&backend
.emit_method
);
120 if (err
) goto symbol_error
;
121 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_emit_call", (void**)&backend
.emit_call
);
122 if (err
) goto symbol_error
;
123 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_create_aot_module", (void**)&backend
.create_aot_module
);
124 if (err
) goto symbol_error
;
125 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_emit_aot_module", (void**)&backend
.emit_aot_module
);
126 if (err
) goto symbol_error
;
127 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_fixup_aot_module", (void**)&backend
.fixup_aot_module
);
128 if (err
) goto symbol_error
;
129 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_check_method_supported", (void**)&backend
.check_method_supported
);
130 if (err
) goto symbol_error
;
131 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_free_domain_info", (void**)&backend
.free_domain_info
);
132 if (err
) goto symbol_error
;
133 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_emit_aot_file_info", (void**)&backend
.emit_aot_file_info
);
134 if (err
) goto symbol_error
;
135 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_emit_aot_data", (void**)&backend
.emit_aot_data
);
136 if (err
) goto symbol_error
;
137 err
= mono_dl_symbol (llvm_lib
, "mono_llvm_create_vars", (void**)&backend
.create_vars
);
138 if (err
) goto symbol_error
;
141 g_warning ("llvm symbol load failed: %s\n", err
);
149 mono_llvm_load (const char* bpath
)
154 #endif /* MONO_LLVM_LOADED */