summaryrefslogtreecommitdiffstats
path: root/llvm/bindings/ocaml/executionengine/llvm_executionengine.ml
diff options
context:
space:
mode:
authorPeter Zotov <whitequark@whitequark.org>2014-12-24 01:52:51 +0000
committerPeter Zotov <whitequark@whitequark.org>2014-12-24 01:52:51 +0000
commitaf6535bf12eea3f6c704a12fbf7a198fbc26ec1b (patch)
treed2d4891b0a3196c49930ccf0e70c116068891178 /llvm/bindings/ocaml/executionengine/llvm_executionengine.ml
parentffb7ce56a6e1b4477b656d8e2313ba7c1ac4c83f (diff)
downloadbcm5719-llvm-af6535bf12eea3f6c704a12fbf7a198fbc26ec1b.tar.gz
bcm5719-llvm-af6535bf12eea3f6c704a12fbf7a198fbc26ec1b.zip
[OCaml] Expose Llvm_executionengine.get_{global_value,function}_address.
Patch by Ramkumar Ramachandra <artagnon@gmail.com>. Also remove Llvm_executionengine.get_pointer_to_global, as it is actually deprecated and didn't appear in a stable release. llvm-svn: 224801
Diffstat (limited to 'llvm/bindings/ocaml/executionengine/llvm_executionengine.ml')
-rw-r--r--llvm/bindings/ocaml/executionengine/llvm_executionengine.ml22
1 files changed, 17 insertions, 5 deletions
diff --git a/llvm/bindings/ocaml/executionengine/llvm_executionengine.ml b/llvm/bindings/ocaml/executionengine/llvm_executionengine.ml
index c0ff3308dd0..34031bed603 100644
--- a/llvm/bindings/ocaml/executionengine/llvm_executionengine.ml
+++ b/llvm/bindings/ocaml/executionengine/llvm_executionengine.ml
@@ -45,15 +45,27 @@ external data_layout : llexecutionengine -> Llvm_target.DataLayout.t
= "llvm_ee_get_data_layout"
external add_global_mapping_ : Llvm.llvalue -> int64 -> llexecutionengine -> unit
= "llvm_ee_add_global_mapping"
-external get_pointer_to_global_ : Llvm.llvalue -> llexecutionengine -> int64
- = "llvm_ee_get_pointer_to_global"
+external get_global_value_address_ : string -> llexecutionengine -> int64
+ = "llvm_ee_get_global_value_address"
+external get_function_address_ : string -> llexecutionengine -> int64
+ = "llvm_ee_get_function_address"
let add_global_mapping llval ptr ee =
add_global_mapping_ llval (Ctypes.raw_address_of_ptr (Ctypes.to_voidp ptr)) ee
-let get_pointer_to_global llval typ ee =
- Ctypes.coerce (let open Ctypes in ptr void) typ
- (Ctypes.ptr_of_raw_address (get_pointer_to_global_ llval ee))
+let get_global_value_address name typ ee =
+ let vptr = get_global_value_address_ name ee in
+ if Int64.to_int vptr <> 0 then
+ let open Ctypes in !@ (coerce (ptr void) (ptr typ) (ptr_of_raw_address vptr))
+ else
+ raise (Error ("Value " ^ name ^ " not found"))
+
+let get_function_address name typ ee =
+ let fptr = get_function_address_ name ee in
+ if Int64.to_int fptr <> 0 then
+ let open Ctypes in coerce (ptr void) typ (ptr_of_raw_address fptr)
+ else
+ raise (Error ("Function " ^ name ^ " not found"))
(* The following are not bound. Patches are welcome.
target_machine : llexecutionengine -> Llvm_target.TargetMachine.t
OpenPOWER on IntegriCloud