예제 #1
0
        internal static byte[] SerializeModuleAsBitcode(this Module module)
        {
            LLVMMemoryBufferRef bufferRef = module.WriteBitcodeToMemoryBuffer();

            byte[] serialized = CopyBytesFromMemoryBufferRef(bufferRef);
            LLVMSharp.LLVM.DisposeMemoryBuffer(bufferRef);
            return(serialized);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
            }
        }
예제 #4
0
 public static extern int ParseBitcode(LLVMMemoryBufferRef* MemBuf, ref LLVMModuleRef * OutModule, [MarshalAs(UnmanagedType.LPStr)] ref StringBuilder OutMessage);
예제 #5
0
 public static extern LLVMObjectFileRef* CreateObjectFile(LLVMMemoryBufferRef* MemBuf);
예제 #6
0
 public static extern void DisposeMemoryBuffer(LLVMMemoryBufferRef* MemBuf);
예제 #7
0
 public static extern int CreateMemoryBufferWithSTDIN(ref LLVMMemoryBufferRef * OutMemBuf, [MarshalAs(UnmanagedType.LPStr)] ref StringBuilder OutMessage);
예제 #8
0
 public static extern int CreateMemoryBufferWithContentsOfFile([In][MarshalAs(UnmanagedType.LPStr)] string Path, ref LLVMMemoryBufferRef * OutMemBuf, [MarshalAs(UnmanagedType.LPStr)] ref StringBuilder OutMessage);
예제 #9
0
파일: CodeGeneration.cs 프로젝트: irpbc/mj
 public DisposableBuffer(LLVMMemoryBufferRef buffer) => this.buffer = buffer;
예제 #10
0
 internal MemoryBuffer(LLVMMemoryBufferRef memoryBuffer) => _memoryBuffer = memoryBuffer;
예제 #11
0
        internal MemoryBuffer(LLVMMemoryBufferRef bufferHandle)
        {
            bufferHandle.ValidateNotDefault(nameof(bufferHandle));

            BufferHandle_ = bufferHandle;
        }
예제 #12
0
 internal MemoryBuffer(LLVMMemoryBufferRef bufferHandle)
 {
     BufferHandle_ = bufferHandle;
 }
예제 #13
0
 internal void Release() => _memoryBuffer = new LLVMMemoryBufferRef();
예제 #14
0
 public static extern int GetBitcodeModuleInContext(LLVMContextRef* ContextRef, LLVMMemoryBufferRef* MemBuf, ref LLVMModuleRef * OutM, [MarshalAs(UnmanagedType.LPStr)] ref StringBuilder OutMessage);
예제 #15
0
 /// <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;
 }
예제 #16
0
 public static extern int GetBitcodeModuleProvider(LLVMMemoryBufferRef* MemBuf, ref LLVMModuleProviderRef * OutMP, [MarshalAs(UnmanagedType.LPStr)] ref StringBuilder OutMessage);
예제 #17
0
파일: OrcJit.cs 프로젝트: nbsn2/Llvm.NET
 private static extern LLVMSharedObjectBufferRef LLVMOrcMakeSharedObjectBuffer(LLVMMemoryBufferRef ObjBuffer);