137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines(*===-- llvm_executionengine.ml - LLVM OCaml Interface --------*- OCaml -*-===* 22e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen * 32e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen * The LLVM Compiler Infrastructure 42e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen * 5234d529e582963ad4b5d83b911cd057fe99d1435Chris Lattner * This file is distributed under the University of Illinois Open Source 6234d529e582963ad4b5d83b911cd057fe99d1435Chris Lattner * License. See LICENSE.TXT for details. 72e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen * 82e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen *===----------------------------------------------------------------------===*) 92e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 102e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenexception Error of string 112e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 1237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hineslet () = Callback.register_exception "Llvm_executionengine.Error" (Error "") 1337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 1437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal initialize : unit -> bool 1537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines = "llvm_ee_initialize" 1637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 1737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinestype llexecutionengine 1837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 1937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinestype llcompileroptions = { 2037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines opt_level: int; 2137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines code_model: Llvm_target.CodeModel.t; 2237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines no_framepointer_elim: bool; 2337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines enable_fast_isel: bool; 2437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} 2537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 2637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hineslet default_compiler_options = { 2737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines opt_level = 0; 2837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines code_model = Llvm_target.CodeModel.JITDefault; 2937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines no_framepointer_elim = false; 3037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines enable_fast_isel = false } 3137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 3237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal create : ?options:llcompileroptions -> Llvm.llmodule -> llexecutionengine 3337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines = "llvm_ee_create" 3437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal dispose : llexecutionengine -> unit 3537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines = "llvm_ee_dispose" 3637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal add_module : Llvm.llmodule -> llexecutionengine -> unit 3737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines = "llvm_ee_add_module" 3837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal remove_module : Llvm.llmodule -> llexecutionengine -> unit 3937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines = "llvm_ee_remove_module" 4037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal run_static_ctors : llexecutionengine -> unit 4137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines = "llvm_ee_run_static_ctors" 4237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal run_static_dtors : llexecutionengine -> unit 4337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines = "llvm_ee_run_static_dtors" 4437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal data_layout : llexecutionengine -> Llvm_target.DataLayout.t 4537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines = "llvm_ee_get_data_layout" 46f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarexternal add_global_mapping_ : Llvm.llvalue -> nativeint -> llexecutionengine -> unit 4737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines = "llvm_ee_add_global_mapping" 48f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarexternal get_global_value_address_ : string -> llexecutionengine -> nativeint 49ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines = "llvm_ee_get_global_value_address" 50f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarexternal get_function_address_ : string -> llexecutionengine -> nativeint 51ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines = "llvm_ee_get_function_address" 5237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 5337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hineslet add_global_mapping llval ptr ee = 5437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines add_global_mapping_ llval (Ctypes.raw_address_of_ptr (Ctypes.to_voidp ptr)) ee 5537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 56ebe69fe11e48d322045d5949c83283927a0d790bStephen Hineslet get_global_value_address name typ ee = 57ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines let vptr = get_global_value_address_ name ee in 58f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar if Nativeint.to_int vptr <> 0 then 59ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines let open Ctypes in !@ (coerce (ptr void) (ptr typ) (ptr_of_raw_address vptr)) 60ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines else 61ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines raise (Error ("Value " ^ name ^ " not found")) 62ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 63ebe69fe11e48d322045d5949c83283927a0d790bStephen Hineslet get_function_address name typ ee = 64ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines let fptr = get_function_address_ name ee in 65f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar if Nativeint.to_int fptr <> 0 then 66ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines let open Ctypes in coerce (ptr void) typ (ptr_of_raw_address fptr) 67ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines else 68ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines raise (Error ("Function " ^ name ^ " not found")) 6937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 7037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines(* The following are not bound. Patches are welcome. 7137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinestarget_machine : llexecutionengine -> Llvm_target.TargetMachine.t 7237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines *) 73