Esempio n. 1
0
 public void TestLazyIRCompilation( )
 {
     using (Library.InitializeLLVM( ))
     {
         Library.RegisterNative( );
         using (LLVMContextRef context = LLVMContextCreate( ))
         {
             string nativeTriple = LLVMGetDefaultTargetTriple();
             Assert.IsFalse(string.IsNullOrWhiteSpace(nativeTriple));
             Assert.IsTrue(LLVMGetTargetFromTriple(nativeTriple, out LLVMTargetRef targetHandle, out string errorMessag).Succeeded);
             LLVMTargetMachineRef machine = LLVMCreateTargetMachine(
                 targetHandle,
                 nativeTriple,
                 string.Empty,
                 string.Empty,
                 LLVMCodeGenOptLevel.LLVMCodeGenLevelDefault,
                 LLVMRelocMode.LLVMRelocDefault,
                 LLVMCodeModel.LLVMCodeModelJITDefault);
             using ( machine )
             {
                 LLVMOrcJITStackRef orcJit = LLVMOrcCreateInstance(machine);
                 using ( orcJit )
                 {
                     // try several different modules with the same function name replacing the previous
                     AddAndExecuteTestModule(orcJit, context, machine, 42);
                     AddAndExecuteTestModule(orcJit, context, machine, 12345678);
                     AddAndExecuteTestModule(orcJit, context, machine, 87654321);
                 }
             }
         }
     }
 }
Esempio n. 2
0
        private static void AddAndExecuteTestModule(LLVMOrcJITStackRef orcJit, LLVMContextRef context, LLVMTargetMachineRef machine, int expectedResult)
        {
            LLVMModuleRef module = CreateModule(context, machine, expectedResult);
            LLVMErrorRef  err    = LLVMOrcAddEagerlyCompiledIR(orcJit, out ulong jitHandle, module, SymbolResolver, IntPtr.Zero);

            Assert.IsTrue(err.IsInvalid);

            // ORC now owns the module, so it must never be released
            module.SetHandleAsInvalid();
            LLVMOrcGetMangledSymbol(orcJit, out string mangledName, "main");
            err = LibLLVMOrcGetSymbolAddress(orcJit, out ulong funcAddress, mangledName, false);
            Assert.IsTrue(err.IsInvalid);
            Assert.AreNotEqual(0ul, funcAddress);
            var callableMain = Marshal.GetDelegateForFunctionPointer <TestMain>(( IntPtr )funcAddress);

            Assert.AreEqual(expectedResult, callableMain( ));

            LLVMOrcRemoveModule(orcJit, jitHandle);
        }
Esempio n. 3
0
 private static extern LLVMOrcErrorCode LLVMOrcDisposeInstance(LLVMOrcJITStackRef @JITStack);
Esempio n. 4
0
 private static extern LLVMOrcErrorCode LLVMOrcRemoveModule(LLVMOrcJITStackRef @JITStack, LLVMOrcModuleHandle @H);
Esempio n. 5
0
 private static extern LLVMOrcErrorCode LLVMOrcGetSymbolAddress(LLVMOrcJITStackRef @JITStack, out LLVMOrcTargetAddress retAddr, [MarshalAs(UnmanagedType.LPStr)] string @SymbolName);
Esempio n. 6
0
 private static extern LLVMOrcErrorCode LLVMOrcAddLazilyCompiledIR(LLVMOrcJITStackRef @JITStack, out LLVMOrcModuleHandle retHandle, LLVMSharedModuleRef @Mod, SymbolResolver @SymbolResolver, IntPtr @SymbolResolverCtx);
Esempio n. 7
0
 private static extern LLVMOrcErrorCode LLVMOrcAddObjectFile(LLVMOrcJITStackRef @JITStack, out LLVMOrcModuleHandle retHandle, LLVMSharedObjectBufferRef @Obj, SymbolResolver @SymbolResolver, IntPtr @SymbolResolverCtx);
Esempio n. 8
0
 private static extern LLVMOrcErrorCode LLVMOrcSetIndirectStubPointer(LLVMOrcJITStackRef @JITStack, [MarshalAs(UnmanagedType.LPStr)] string @StubName, LLVMOrcTargetAddress @NewAddr);
Esempio n. 9
0
 private static extern LLVMOrcErrorCode LLVMOrcCreateIndirectStub(LLVMOrcJITStackRef @JITStack, [MarshalAs(UnmanagedType.LPStr)] string @StubName, LLVMOrcTargetAddress @InitAddr);
Esempio n. 10
0
 private static extern LLVMOrcErrorCode LLVMOrcCreateLazyCompileCallback(LLVMOrcJITStackRef @JITStack, out LLVMOrcTargetAddress retAddr, LLVMOrcLazyCompileCallbackFn @Callback, IntPtr @CallbackCtx);
Esempio n. 11
0
 private static extern void LLVMOrcGetMangledSymbol(LLVMOrcJITStackRef @JITStack, out IntPtr @MangledSymbol, [MarshalAs(UnmanagedType.LPStr)] string @Symbol);
Esempio n. 12
0
 private static extern string LLVMOrcGetErrorMsg(LLVMOrcJITStackRef @JITStack);