summaryrefslogtreecommitdiff
path: root/bindings
diff options
context:
space:
mode:
authorGordon Henriksen <gordonhenriksen@mac.com>2007-10-06 21:00:36 +0000
committerGordon Henriksen <gordonhenriksen@mac.com>2007-10-06 21:00:36 +0000
commitc0491ac8b6c24a7d0db8c0a60f76cfb1d66f84ab (patch)
tree2335af26193323e95020758c3a2c667bf63d207a /bindings
parentd8be2154b38ea623f2320b26c9e1a40be0d0206b (diff)
downloadllvm-c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84ab.tar.gz
llvm-c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84ab.tar.bz2
llvm-c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84ab.tar.xz
Bindings for the verifier.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42707 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'bindings')
-rw-r--r--bindings/ocaml/Makefile2
-rw-r--r--bindings/ocaml/Makefile.ocaml7
-rw-r--r--bindings/ocaml/analysis/Makefile20
-rw-r--r--bindings/ocaml/analysis/analysis_ocaml.c60
-rw-r--r--bindings/ocaml/analysis/llvm_analysis.ml24
-rw-r--r--bindings/ocaml/analysis/llvm_analysis.mli24
-rw-r--r--bindings/ocaml/bitwriter/Makefile12
-rw-r--r--bindings/ocaml/llvm/Makefile10
8 files changed, 141 insertions, 18 deletions
diff --git a/bindings/ocaml/Makefile b/bindings/ocaml/Makefile
index 0fc6b1b6ee..a3bbae0094 100644
--- a/bindings/ocaml/Makefile
+++ b/bindings/ocaml/Makefile
@@ -8,6 +8,6 @@
##===----------------------------------------------------------------------===##
LEVEL := ../..
-DIRS = llvm bitwriter
+DIRS = llvm bitwriter analysis
include $(LEVEL)/Makefile.common
diff --git a/bindings/ocaml/Makefile.ocaml b/bindings/ocaml/Makefile.ocaml
index 278b31ea32..fb03b1a3e2 100644
--- a/bindings/ocaml/Makefile.ocaml
+++ b/bindings/ocaml/Makefile.ocaml
@@ -10,6 +10,11 @@
# An ocaml library is a unique project type in the context of LLVM, so rules are
# here rather than in Makefile.rules.
#
+# Reference materials on installing ocaml libraries:
+#
+# https://fedoraproject.org/wiki/Packaging/OCaml
+# http://pkg-ocaml-maint.alioth.debian.org/ocaml_packaging_policy.txt
+#
##===----------------------------------------------------------------------===##
include $(LEVEL)/Makefile.config
@@ -188,7 +193,6 @@ install-cma:: $(OutputCMA)
$(Verb) $(MKDIR) $(PROJ_libocamldir)
$(Verb) $(DataInstall) $(OutputCMA) "$(DestCMA)"
$(Verb) for i in $(UsedLibNames); do \
- $(EchoCmd) "Installing $(BuildMode) $(PROJ_libocamldir)/$$i"; \
ln -sf "$(PROJ_libdir)/$$i" "$(PROJ_libocamldir)/$$i"; \
done
@@ -196,7 +200,6 @@ uninstall-cma::
$(Echo) "Uninstalling $(DestCMA)"
-$(Verb) $(RM) -f $(DestCMA)
$(Verb) for i in $(UsedLibNames); do \
- $(EchoCmd) "Uninstalling $(PROJ_libocamldir)/$$i"; \
$(RM) -f "$(PROJ_libocamldir)/$$i"; \
done
diff --git a/bindings/ocaml/analysis/Makefile b/bindings/ocaml/analysis/Makefile
new file mode 100644
index 0000000000..e910043f53
--- /dev/null
+++ b/bindings/ocaml/analysis/Makefile
@@ -0,0 +1,20 @@
+##===- bindings/ocaml/analysis/Makefile --------------------*- Makefile -*-===##
+#
+# The LLVM Compiler Infrastructure
+#
+# This file was developed by Gordon Henriksen and is distributed under the
+# University of Illinois Open Source License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+#
+# This is the makefile for the Objective Caml Llvm_analysis interface.
+#
+##===----------------------------------------------------------------------===##
+
+LEVEL := ../../..
+LIBRARYNAME := llvm_analysis
+DONT_BUILD_RELINKED := 1
+UsedComponents := analysis
+UsedOcamlInterfaces := llvm
+
+include ../Makefile.ocaml
diff --git a/bindings/ocaml/analysis/analysis_ocaml.c b/bindings/ocaml/analysis/analysis_ocaml.c
new file mode 100644
index 0000000000..cc1098a374
--- /dev/null
+++ b/bindings/ocaml/analysis/analysis_ocaml.c
@@ -0,0 +1,60 @@
+/*===-- analysis_ocaml.c - LLVM Ocaml Glue ----------------------*- C++ -*-===*\
+|* *|
+|* The LLVM Compiler Infrastructure *|
+|* *|
+|* This file was developed by Gordon Henriksen and is distributed under the *|
+|* University of Illinois Open Source License. See LICENSE.TXT for details. *|
+|* *|
+|*===----------------------------------------------------------------------===*|
+|* *|
+|* This file glues LLVM's ocaml interface to its C interface. These functions *|
+|* are by and large transparent wrappers to the corresponding C functions. *|
+|* *|
+|* Note that these functions intentionally take liberties with the CAMLparamX *|
+|* macros, since most of the parameters are not GC heap objects. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#include "llvm-c/Analysis.h"
+#include "caml/alloc.h"
+#include "caml/mlvalues.h"
+#include "caml/memory.h"
+
+
+/* Llvm.llmodule -> string option */
+CAMLprim value llvm_verify_module(LLVMModuleRef M) {
+ CAMLparam0();
+ CAMLlocal2(String, Option);
+
+ char *Message;
+ int Result = LLVMVerifyModule(M, LLVMReturnStatusAction, &Message);
+
+ if (0 == Result) {
+ Option = Val_int(0);
+ } else {
+ Option = alloc(1, 1);
+ String = copy_string(Message);
+ Store_field(Option, 0, String);
+ }
+
+ LLVMDisposeVerifierMessage(Message);
+
+ CAMLreturn(Option);
+}
+
+/* Llvm.llvalue -> bool */
+CAMLprim value llvm_verify_function(LLVMValueRef Fn) {
+ return Val_bool(LLVMVerifyFunction(Fn, LLVMReturnStatusAction) == 0);
+}
+
+/* Llvm.llmodule -> unit */
+CAMLprim value llvm_assert_valid_module(LLVMModuleRef M) {
+ LLVMVerifyModule(M, LLVMAbortProcessAction, 0);
+ return Val_unit;
+}
+
+/* Llvm.llvalue -> unit */
+CAMLprim value llvm_assert_valid_function(LLVMValueRef Fn) {
+ LLVMVerifyFunction(Fn, LLVMAbortProcessAction);
+ return Val_unit;
+}
diff --git a/bindings/ocaml/analysis/llvm_analysis.ml b/bindings/ocaml/analysis/llvm_analysis.ml
new file mode 100644
index 0000000000..a972aa0856
--- /dev/null
+++ b/bindings/ocaml/analysis/llvm_analysis.ml
@@ -0,0 +1,24 @@
+(*===-- llvm_analysis.ml - LLVM Ocaml Interface -----------------*- C++ -*-===*
+ *
+ * The LLVM Compiler Infrastructure
+ *
+ * This file was developed by Gordon Henriksen and is distributed under the
+ * University of Illinois Open Source License. See LICENSE.TXT for details.
+ *
+ *===----------------------------------------------------------------------===
+ *
+ * This interface provides an ocaml API for LLVM IR analyses, the classes in
+ * the Analysis library.
+ *
+ *===----------------------------------------------------------------------===*)
+
+
+external verify_module : Llvm.llmodule -> string option = "llvm_verify_module"
+
+external verify_function : Llvm.llvalue -> bool = "llvm_verify_function"
+
+external assert_valid_module : Llvm.llmodule -> unit
+ = "llvm_assert_valid_module"
+
+external assert_valid_function : Llvm.llvalue -> unit
+ = "llvm_assert_valid_function"
diff --git a/bindings/ocaml/analysis/llvm_analysis.mli b/bindings/ocaml/analysis/llvm_analysis.mli
new file mode 100644
index 0000000000..59ff6c661c
--- /dev/null
+++ b/bindings/ocaml/analysis/llvm_analysis.mli
@@ -0,0 +1,24 @@
+(*===-- llvm_analysis.mli - LLVM Ocaml Interface ----------------*- C++ -*-===*
+ *
+ * The LLVM Compiler Infrastructure
+ *
+ * This file was developed by Gordon Henriksen and is distributed under the
+ * University of Illinois Open Source License. See LICENSE.TXT for details.
+ *
+ *===----------------------------------------------------------------------===
+ *
+ * This interface provides an ocaml API for LLVM IR analyses, the classes in
+ * the Analysis library.
+ *
+ *===----------------------------------------------------------------------===*)
+
+
+external verify_module : Llvm.llmodule -> string option = "llvm_verify_module"
+
+external verify_function : Llvm.llvalue -> bool = "llvm_verify_function"
+
+external assert_valid_module : Llvm.llmodule -> unit
+ = "llvm_assert_valid_module"
+
+external assert_valid_function : Llvm.llvalue -> unit
+ = "llvm_assert_valid_function"
diff --git a/bindings/ocaml/bitwriter/Makefile b/bindings/ocaml/bitwriter/Makefile
index 953ab4c082..e7d2f7fcf5 100644
--- a/bindings/ocaml/bitwriter/Makefile
+++ b/bindings/ocaml/bitwriter/Makefile
@@ -1,17 +1,13 @@
-##===- bindings/ocaml/llvm/Makefile ------------------------*- Makefile -*-===##
+##===- bindings/ocaml/bitwriter/Makefile -------------------*- Makefile -*-===##
#
# The LLVM Compiler Infrastructure
#
-# This file was developed by the LLVM research group and is distributed under
-# the University of Illinois Open Source License. See LICENSE.TXT for details.
+# This file was developed by Gordon Henriksen and is distributed under the
+# University of Illinois Open Source License. See LICENSE.TXT for details.
#
##===----------------------------------------------------------------------===##
#
-# This is the makefile for the llvm-ml interface. Reference materials on
-# installing ocaml libraries:
-#
-# https://fedoraproject.org/wiki/Packaging/OCaml
-# http://pkg-ocaml-maint.alioth.debian.org/ocaml_packaging_policy.txt
+# This is the makefile for the Objective Caml Llvm_bitwriter interface.
#
##===----------------------------------------------------------------------===##
diff --git a/bindings/ocaml/llvm/Makefile b/bindings/ocaml/llvm/Makefile
index cbfb75ca15..2437468084 100644
--- a/bindings/ocaml/llvm/Makefile
+++ b/bindings/ocaml/llvm/Makefile
@@ -2,16 +2,12 @@
#
# The LLVM Compiler Infrastructure
#
-# This file was developed by the LLVM research group and is distributed under
-# the University of Illinois Open Source License. See LICENSE.TXT for details.
+# This file was developed by Gordon Henriksen and is distributed under the
+# University of Illinois Open Source License. See LICENSE.TXT for details.
#
##===----------------------------------------------------------------------===##
#
-# This is the makefile for the llvm-ml interface. Reference materials on
-# installing ocaml libraries:
-#
-# https://fedoraproject.org/wiki/Packaging/OCaml
-# http://pkg-ocaml-maint.alioth.debian.org/ocaml_packaging_policy.txt
+# This is the makefile for the Objective Caml Llvm interface.
#
##===----------------------------------------------------------------------===##