//===- bitreader.go - Bindings for bitreader ------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines bindings for the bitreader component. // //===----------------------------------------------------------------------===// package llvm /* #include "llvm-c/BitReader.h" #include "llvm-c/Core.h" #include */ import "C" import ( "errors" "unsafe" ) // ParseBitcodeFile parses the LLVM IR (bitcode) in the file with the // specified name, and returns a new LLVM module. func ParseBitcodeFile(name string) (Module, error) { var buf C.LLVMMemoryBufferRef var errmsg *C.char var cfilename *C.char = C.CString(name) defer C.free(unsafe.Pointer(cfilename)) result := C.LLVMCreateMemoryBufferWithContentsOfFile(cfilename, &buf, &errmsg) if result != 0 { err := errors.New(C.GoString(errmsg)) C.free(unsafe.Pointer(errmsg)) return Module{}, err } defer C.LLVMDisposeMemoryBuffer(buf) var m Module if C.LLVMParseBitcode2(buf, &m.C) == 0 { return m, nil } err := errors.New(C.GoString(errmsg)) C.free(unsafe.Pointer(errmsg)) return Module{}, err }