Sylvestre Ledru | 493cd8c | 2013-11-01 00:26:01 +0000 | [diff] [blame] | 1 | /*===-- bitwriter_ocaml.c - LLVM OCaml Glue ---------------------*- C++ -*-===*\ |
Gordon Henriksen | 2b0eed2 | 2007-12-11 00:20:48 +0000 | [diff] [blame] | 2 | |* *| |
| 3 | |* The LLVM Compiler Infrastructure *| |
| 4 | |* *| |
Chris Lattner | 6787a45 | 2007-12-29 22:59:10 +0000 | [diff] [blame] | 5 | |* This file is distributed under the University of Illinois Open Source *| |
| 6 | |* License. See LICENSE.TXT for details. *| |
Gordon Henriksen | 2b0eed2 | 2007-12-11 00:20:48 +0000 | [diff] [blame] | 7 | |* *| |
| 8 | |*===----------------------------------------------------------------------===*| |
| 9 | |* *| |
Sylvestre Ledru | 493cd8c | 2013-11-01 00:26:01 +0000 | [diff] [blame] | 10 | |* This file glues LLVM's OCaml interface to its C interface. These functions *| |
Gordon Henriksen | 2b0eed2 | 2007-12-11 00:20:48 +0000 | [diff] [blame] | 11 | |* are by and large transparent wrappers to the corresponding C functions. *| |
| 12 | |* *| |
| 13 | \*===----------------------------------------------------------------------===*/ |
| 14 | |
| 15 | #include "llvm-c/BitReader.h" |
Jeroen Ketema | b7f633b | 2016-04-01 07:56:17 +0000 | [diff] [blame] | 16 | #include "llvm-c/Core.h" |
Gordon Henriksen | 2b0eed2 | 2007-12-11 00:20:48 +0000 | [diff] [blame] | 17 | #include "caml/alloc.h" |
Gordon Henriksen | 2a8cd89 | 2007-12-23 16:59:28 +0000 | [diff] [blame] | 18 | #include "caml/fail.h" |
Gordon Henriksen | 2b0eed2 | 2007-12-11 00:20:48 +0000 | [diff] [blame] | 19 | #include "caml/memory.h" |
Peter Zotov | 662538a | 2014-10-29 08:15:54 +0000 | [diff] [blame] | 20 | #include "caml/callback.h" |
Gordon Henriksen | 34eb6d8 | 2007-12-19 22:30:40 +0000 | [diff] [blame] | 21 | |
Peter Zotov | 1b254f9 | 2014-10-30 08:29:29 +0000 | [diff] [blame] | 22 | void llvm_raise(value Prototype, char *Message); |
Gordon Henriksen | 2b0eed2 | 2007-12-11 00:20:48 +0000 | [diff] [blame] | 23 | |
Erick Tryzelaar | 5c35b5c | 2009-08-19 06:40:29 +0000 | [diff] [blame] | 24 | /* Llvm.llcontext -> Llvm.llmemorybuffer -> Llvm.llmodule */ |
Peter Zotov | 662538a | 2014-10-29 08:15:54 +0000 | [diff] [blame] | 25 | CAMLprim LLVMModuleRef llvm_get_module(LLVMContextRef C, LLVMMemoryBufferRef MemBuf) { |
| 26 | LLVMModuleRef M; |
Peter Zotov | 110f629 | 2014-10-28 06:15:18 +0000 | [diff] [blame] | 27 | |
Rafael Espindola | 2339ffe | 2015-12-18 23:46:42 +0000 | [diff] [blame] | 28 | if (LLVMGetBitcodeModuleInContext2(C, MemBuf, &M)) |
Jeroen Ketema | b7f633b | 2016-04-01 07:56:17 +0000 | [diff] [blame] | 29 | llvm_raise(*caml_named_value("Llvm_bitreader.Error"), LLVMCreateMessage("")); |
Peter Zotov | 110f629 | 2014-10-28 06:15:18 +0000 | [diff] [blame] | 30 | |
Peter Zotov | 662538a | 2014-10-29 08:15:54 +0000 | [diff] [blame] | 31 | return M; |
Gordon Henriksen | 34eb6d8 | 2007-12-19 22:30:40 +0000 | [diff] [blame] | 32 | } |
Gordon Henriksen | 2b0eed2 | 2007-12-11 00:20:48 +0000 | [diff] [blame] | 33 | |
Erick Tryzelaar | 5c35b5c | 2009-08-19 06:40:29 +0000 | [diff] [blame] | 34 | /* Llvm.llcontext -> Llvm.llmemorybuffer -> Llvm.llmodule */ |
Peter Zotov | 662538a | 2014-10-29 08:15:54 +0000 | [diff] [blame] | 35 | CAMLprim LLVMModuleRef llvm_parse_bitcode(LLVMContextRef C, LLVMMemoryBufferRef MemBuf) { |
Gordon Henriksen | 2b0eed2 | 2007-12-11 00:20:48 +0000 | [diff] [blame] | 36 | LLVMModuleRef M; |
Peter Zotov | 110f629 | 2014-10-28 06:15:18 +0000 | [diff] [blame] | 37 | |
Rafael Espindola | 2339ffe | 2015-12-18 23:46:42 +0000 | [diff] [blame] | 38 | if (LLVMParseBitcodeInContext2(C, MemBuf, &M)) |
Jeroen Ketema | b7f633b | 2016-04-01 07:56:17 +0000 | [diff] [blame] | 39 | llvm_raise(*caml_named_value("Llvm_bitreader.Error"), LLVMCreateMessage("")); |
Peter Zotov | 110f629 | 2014-10-28 06:15:18 +0000 | [diff] [blame] | 40 | |
Peter Zotov | 662538a | 2014-10-29 08:15:54 +0000 | [diff] [blame] | 41 | return M; |
Gordon Henriksen | 2b0eed2 | 2007-12-11 00:20:48 +0000 | [diff] [blame] | 42 | } |