1 (*===-- llvm_executionengine.ml - LLVM OCaml Interface --------*- OCaml -*-===*
3 * The LLVM Compiler Infrastructure
5 * This file is distributed under the University of Illinois Open Source
6 * License. See LICENSE.TXT for details.
8 *===----------------------------------------------------------------------===*)
10 exception Error of string
12 let () = Callback.register_exception "Llvm_executionengine.Error" (Error "")
14 module CodeModel = struct
24 module GenericValue = struct
27 external of_float: Llvm.lltype -> float -> t
28 = "llvm_genericvalue_of_float"
29 external of_pointer: 'a -> t
30 = "llvm_genericvalue_of_pointer"
31 external of_int32: Llvm.lltype -> int32 -> t
32 = "llvm_genericvalue_of_int32"
33 external of_int: Llvm.lltype -> int -> t
34 = "llvm_genericvalue_of_int"
35 external of_nativeint: Llvm.lltype -> nativeint -> t
36 = "llvm_genericvalue_of_nativeint"
37 external of_int64: Llvm.lltype -> int64 -> t
38 = "llvm_genericvalue_of_int64"
40 external as_float: Llvm.lltype -> t -> float
41 = "llvm_genericvalue_as_float"
42 external as_pointer: t -> 'a
43 = "llvm_genericvalue_as_pointer"
44 external as_int32: t -> int32
45 = "llvm_genericvalue_as_int32"
46 external as_int: t -> int
47 = "llvm_genericvalue_as_int"
48 external as_nativeint: t -> nativeint
49 = "llvm_genericvalue_as_nativeint"
50 external as_int64: t -> int64
51 = "llvm_genericvalue_as_int64"
55 module ExecutionEngine = struct
58 type compileroptions = {
60 code_model: CodeModel.t;
61 no_framepointer_elim: bool;
62 enable_fast_isel: bool;
65 let default_compiler_options = {
67 code_model = CodeModel.JIT_default;
68 no_framepointer_elim = false;
69 enable_fast_isel = false }
71 external create: Llvm.llmodule -> t
73 external create_interpreter: Llvm.llmodule -> t
74 = "llvm_ee_create_interpreter"
75 external create_jit: Llvm.llmodule -> int -> t
76 = "llvm_ee_create_jit"
77 external create_mcjit: Llvm.llmodule -> compileroptions -> t
78 = "llvm_ee_create_mcjit"
79 external dispose: t -> unit
81 external add_module: Llvm.llmodule -> t -> unit
82 = "llvm_ee_add_module"
83 external remove_module: Llvm.llmodule -> t -> Llvm.llmodule
84 = "llvm_ee_remove_module"
85 external find_function: string -> t -> Llvm.llvalue option
86 = "llvm_ee_find_function"
87 external run_function: Llvm.llvalue -> GenericValue.t array -> t ->
89 = "llvm_ee_run_function"
90 external run_static_ctors: t -> unit
91 = "llvm_ee_run_static_ctors"
92 external run_static_dtors: t -> unit
93 = "llvm_ee_run_static_dtors"
94 external run_function_as_main: Llvm.llvalue -> string array ->
95 (string * string) array -> t -> int
96 = "llvm_ee_run_function_as_main"
97 external free_machine_code: Llvm.llvalue -> t -> unit
98 = "llvm_ee_free_machine_code"
100 external data_layout : t -> Llvm_target.DataLayout.t
101 = "llvm_ee_get_data_layout"
103 (* The following are not bound. Patches are welcome.
105 add_global_mapping: llvalue -> llgenericvalue -> t -> unit
106 clear_all_global_mappings: t -> unit
107 update_global_mapping: llvalue -> llgenericvalue -> t -> unit
108 get_pointer_to_global_if_available: llvalue -> t -> llgenericvalue
109 get_pointer_to_global: llvalue -> t -> llgenericvalue
110 get_pointer_to_function: llvalue -> t -> llgenericvalue
111 get_pointer_to_function_or_stub: llvalue -> t -> llgenericvalue
112 get_global_value_at_address: llgenericvalue -> t -> llvalue option
113 store_value_to_memory: llgenericvalue -> llgenericvalue -> lltype -> unit
114 initialize_memory: llvalue -> llgenericvalue -> t -> unit
115 recompile_and_relink_function: llvalue -> t -> llgenericvalue
116 get_or_emit_global_variable: llvalue -> t -> llgenericvalue
117 disable_lazy_compilation: t -> unit
118 lazy_compilation_enabled: t -> bool
119 install_lazy_function_creator: (string -> llgenericvalue) -> t -> unit
124 external initialize_native_target : unit -> bool
125 = "llvm_initialize_native_target"