internal static byte[] SerializeModuleAsBitcode(this Module module) { LLVMMemoryBufferRef bufferRef = module.WriteBitcodeToMemoryBuffer(); byte[] serialized = CopyBytesFromMemoryBufferRef(bufferRef); LLVMSharp.LLVM.DisposeMemoryBuffer(bufferRef); return(serialized); }
private static byte[] CopyBytesFromMemoryBufferRef(LLVMMemoryBufferRef bufferRef) { IntPtr start = LLVMSharp.LLVM.GetBufferStart(bufferRef); var size = LLVMSharp.LLVM.GetBufferSize(bufferRef); byte[] copy = new byte[size]; Marshal.Copy(start, copy, 0, size); return(copy); }
internal static Module DeserializeModuleAsBitcode(this byte[] moduleBytes, LLVMContextRef contextRef) { LLVMMemoryBufferRef bufferRef = CreateMemoryBufferRefFromBytes(moduleBytes); LLVMModuleRef moduleRef; try { if (LLVMSharp.LLVM.ParseBitcodeInContext2(contextRef, bufferRef, out moduleRef) != false) { throw new ArgumentException("Failed to load bitcode module", nameof(moduleBytes)); } return(moduleRef.ModuleFromModuleRef()); } finally { LLVMSharp.LLVM.DisposeMemoryBuffer(bufferRef); } }
public static extern int ParseBitcode(LLVMMemoryBufferRef* MemBuf, ref LLVMModuleRef * OutModule, [MarshalAs(UnmanagedType.LPStr)] ref StringBuilder OutMessage);
public static extern LLVMObjectFileRef* CreateObjectFile(LLVMMemoryBufferRef* MemBuf);
public static extern void DisposeMemoryBuffer(LLVMMemoryBufferRef* MemBuf);
public static extern int CreateMemoryBufferWithSTDIN(ref LLVMMemoryBufferRef * OutMemBuf, [MarshalAs(UnmanagedType.LPStr)] ref StringBuilder OutMessage);
public static extern int CreateMemoryBufferWithContentsOfFile([In][MarshalAs(UnmanagedType.LPStr)] string Path, ref LLVMMemoryBufferRef * OutMemBuf, [MarshalAs(UnmanagedType.LPStr)] ref StringBuilder OutMessage);
public DisposableBuffer(LLVMMemoryBufferRef buffer) => this.buffer = buffer;
internal MemoryBuffer(LLVMMemoryBufferRef memoryBuffer) => _memoryBuffer = memoryBuffer;
internal MemoryBuffer(LLVMMemoryBufferRef bufferHandle) { bufferHandle.ValidateNotDefault(nameof(bufferHandle)); BufferHandle_ = bufferHandle; }
internal MemoryBuffer(LLVMMemoryBufferRef bufferHandle) { BufferHandle_ = bufferHandle; }
internal void Release() => _memoryBuffer = new LLVMMemoryBufferRef();
public static extern int GetBitcodeModuleInContext(LLVMContextRef* ContextRef, LLVMMemoryBufferRef* MemBuf, ref LLVMModuleRef * OutM, [MarshalAs(UnmanagedType.LPStr)] ref StringBuilder OutMessage);
/// <summary>Initializes a new instance of the <see cref="MemoryBuffer"/> class from a byte array</summary> /// <param name="memoryBufferRef">An instance of the LLVMMemoryBufferRef type that will be tracked by this object.</param> public MemoryBuffer(LLVMMemoryBufferRef memoryBufferRef) { BufferHandle = memoryBufferRef; }
public static extern int GetBitcodeModuleProvider(LLVMMemoryBufferRef* MemBuf, ref LLVMModuleProviderRef * OutMP, [MarshalAs(UnmanagedType.LPStr)] ref StringBuilder OutMessage);
private static extern LLVMSharedObjectBufferRef LLVMOrcMakeSharedObjectBuffer(LLVMMemoryBufferRef ObjBuffer);