diff --git a/bindings/ocaml/llvm/llvm.ml b/bindings/ocaml/llvm/llvm.ml index f3ff600bde4..587972429f3 100644 --- a/bindings/ocaml/llvm/llvm.ml +++ b/bindings/ocaml/llvm/llvm.ml @@ -710,7 +710,7 @@ external define_qualified_global : string -> llvalue -> int -> llmodule -> external lookup_global : string -> llmodule -> llvalue option = "llvm_lookup_global" external delete_global : llvalue -> unit = "llvm_delete_global" -external global_initializer : llvalue -> llvalue = "LLVMGetInitializer" +external global_initializer : llvalue -> llvalue option = "llvm_global_initializer" external set_initializer : llvalue -> llvalue -> unit = "llvm_set_initializer" external remove_initializer : llvalue -> unit = "llvm_remove_initializer" external is_thread_local : llvalue -> bool = "llvm_is_thread_local" diff --git a/bindings/ocaml/llvm/llvm.mli b/bindings/ocaml/llvm/llvm.mli index 6e145fa44f0..5fedd57971d 100644 --- a/bindings/ocaml/llvm/llvm.mli +++ b/bindings/ocaml/llvm/llvm.mli @@ -1454,9 +1454,9 @@ val is_global_constant : llvalue -> bool See the method [llvm::GlobalVariable::setConstant]. *) val set_global_constant : bool -> llvalue -> unit -(** [global_initializer gv] returns the initializer for the global variable - [gv]. See the method [llvm::GlobalVariable::getInitializer]. *) -val global_initializer : llvalue -> llvalue +(** [global_initializer gv] If global variable [gv] has an initializer it is returned, + otherwise returns [None]. See the method [llvm::GlobalVariable::getInitializer]. *) +val global_initializer : llvalue -> llvalue option (** [set_initializer c gv] sets the initializer for the global variable [gv] to the constant [c]. diff --git a/bindings/ocaml/llvm/llvm_ocaml.c b/bindings/ocaml/llvm/llvm_ocaml.c index 6af34bd9c17..abff3ee04a0 100644 --- a/bindings/ocaml/llvm/llvm_ocaml.c +++ b/bindings/ocaml/llvm/llvm_ocaml.c @@ -1261,6 +1261,18 @@ CAMLprim value llvm_delete_global(LLVMValueRef GlobalVar) { return Val_unit; } +/* llvalue -> llvalue option */ +CAMLprim value llvm_global_initializer(LLVMValueRef GlobalVar) { + CAMLparam0(); + LLVMValueRef Init; + if ((Init = LLVMGetInitializer(GlobalVar))) { + value Option = alloc(1, 0); + Field(Option, 0) = (value) Init; + CAMLreturn(Option); + } + CAMLreturn(Val_int(0)); +} + /* llvalue -> llvalue -> unit */ CAMLprim value llvm_set_initializer(LLVMValueRef ConstantVal, LLVMValueRef GlobalVar) {