1(*===-- llvm_executionengine.ml - LLVM OCaml Interface --------*- OCaml -*-===* 2 * 3 * The LLVM Compiler Infrastructure 4 * 5 * This file is distributed under the University of Illinois Open Source 6 * License. See LICENSE.TXT for details. 7 * 8 *===----------------------------------------------------------------------===*) 9 10exception Error of string 11 12let () = Callback.register_exception "Llvm_executionengine.Error" (Error "") 13 14external initialize : unit -> bool 15 = "llvm_ee_initialize" 16 17type llexecutionengine 18 19type llcompileroptions = { 20 opt_level: int; 21 code_model: Llvm_target.CodeModel.t; 22 no_framepointer_elim: bool; 23 enable_fast_isel: bool; 24} 25 26let default_compiler_options = { 27 opt_level = 0; 28 code_model = Llvm_target.CodeModel.JITDefault; 29 no_framepointer_elim = false; 30 enable_fast_isel = false } 31 32external create : ?options:llcompileroptions -> Llvm.llmodule -> llexecutionengine 33 = "llvm_ee_create" 34external dispose : llexecutionengine -> unit 35 = "llvm_ee_dispose" 36external add_module : Llvm.llmodule -> llexecutionengine -> unit 37 = "llvm_ee_add_module" 38external remove_module : Llvm.llmodule -> llexecutionengine -> unit 39 = "llvm_ee_remove_module" 40external run_static_ctors : llexecutionengine -> unit 41 = "llvm_ee_run_static_ctors" 42external run_static_dtors : llexecutionengine -> unit 43 = "llvm_ee_run_static_dtors" 44external data_layout : llexecutionengine -> Llvm_target.DataLayout.t 45 = "llvm_ee_get_data_layout" 46external add_global_mapping_ : Llvm.llvalue -> int64 -> llexecutionengine -> unit 47 = "llvm_ee_add_global_mapping" 48external get_pointer_to_global_ : Llvm.llvalue -> llexecutionengine -> int64 49 = "llvm_ee_get_pointer_to_global" 50 51let add_global_mapping llval ptr ee = 52 add_global_mapping_ llval (Ctypes.raw_address_of_ptr (Ctypes.to_voidp ptr)) ee 53 54let get_pointer_to_global llval typ ee = 55 Ctypes.coerce (let open Ctypes in ptr void) typ 56 (Ctypes.ptr_of_raw_address (get_pointer_to_global_ llval ee)) 57 58(* The following are not bound. Patches are welcome. 59target_machine : llexecutionengine -> Llvm_target.TargetMachine.t 60 *) 61