// Exported via def file extern "C" void __stdcall jitStartup(ICorJitHost* host) { SetDefaultPaths(); SetLibName(); // Load Library if (g_hRealJit == 0) { g_hRealJit = ::LoadLibraryW(g_realJitPath); if (g_hRealJit == 0) { LogError("jitStartup() - LoadLibrary failed to load '%ws' (0x%08x)", g_realJitPath, ::GetLastError()); return; } } // Get the required entrypoint PjitStartup pnjitStartup = (PjitStartup)::GetProcAddress(g_hRealJit, "jitStartup"); if (pnjitStartup == nullptr) { // This portion of the interface is not used by the JIT under test. return; } g_globalContext = new MethodContext(); g_ourJitHost = new JitHost(host, g_globalContext); pnjitStartup(g_ourJitHost); }
// Exported via def file extern "C" ICorJitCompiler* __stdcall getJit() { DWORD dwRetVal = 0; PgetJit pngetJit; interceptor_ICJC* pJitInstance = nullptr; ICorJitCompiler* tICJI = nullptr; SetDefaultPaths(); SetLibName(); SetLogPath(); SetLogPathName(); // Load Library if (g_hRealJit == 0) { g_hRealJit = ::LoadLibraryW(g_realJitPath); if (g_hRealJit == 0) { LogError("getJit() - LoadLibrary failed to load '%ws' (0x%08x)", g_realJitPath, ::GetLastError()); return nullptr; } } // get the required entrypoints pngetJit = (PgetJit)::GetProcAddress(g_hRealJit, "getJit"); if (pngetJit == 0) { LogError("getJit() - GetProcAddress 'getJit' failed (0x%08x)", ::GetLastError()); return nullptr; } tICJI = pngetJit(); if (tICJI == nullptr) { LogError("getJit() - pngetJit gave us null"); return nullptr; } pJitInstance = new interceptor_ICJC(); pJitInstance->original_ICorJitCompiler = tICJI; // create our datafile pJitInstance->hFile = CreateFileW(g_dataFileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL); if (pJitInstance->hFile == INVALID_HANDLE_VALUE) { LogError("Couldn't open file '%ws': error %d", g_dataFileName, GetLastError()); } return pJitInstance; }
ICorJitCompiler* __stdcall getJit() { DWORD dwRetVal = 0; PgetJit pngetJit; interceptor_ICJC *pJitInstance = nullptr; ICorJitCompiler *tICJI = nullptr; SetDefaultPaths(); SetLibName(); SetLogPath(); //Load Library if(g_hRealJit == 0) { g_hRealJit = ::LoadLibraryW(g_realJitPath); if(g_hRealJit == 0) { LogError("getJit() - LoadLibrary failed to load '%ws' (0x%08x)", g_realJitPath, ::GetLastError()); return nullptr; } } //get the required entrypoints pngetJit = (PgetJit)::GetProcAddress(g_hRealJit, "getJit"); if(pngetJit == 0) { LogError("getJit() - GetProcAddress 'getJit' failed (0x%08x)", ::GetLastError()); return nullptr; } tICJI = pngetJit(); if(tICJI == nullptr) { LogError("getJit() - pngetJit gave us null"); return nullptr; } pJitInstance = new interceptor_ICJC(); pJitInstance->original_ICorJitCompiler = tICJI; pJitInstance->mcs = new MethodCallSummarizer(g_logPath); if (g_ourJitHost != nullptr) { g_ourJitHost->setMethodCallSummarizer(pJitInstance->mcs); } return pJitInstance; }
// Exported via def file extern "C" void __stdcall sxsJitStartup(CoreClrCallbacks const& original_cccallbacks) { PsxsJitStartup pnsxsJitStartup; SetDefaultPaths(); SetLibName(); // Load Library if (g_hRealJit == 0) { g_hRealJit = ::LoadLibraryW(g_realJitPath); if (g_hRealJit == 0) { LogError("sxsJitStartup() - LoadLibrary failed to load '%ws' (0x%08x)", g_realJitPath, ::GetLastError()); return; } } // get entry point pnsxsJitStartup = (PsxsJitStartup)::GetProcAddress(g_hRealJit, "sxsJitStartup"); if (pnsxsJitStartup == 0) { LogError("sxsJitStartup() - GetProcAddress 'sxsJitStartup' failed (0x%08x)", ::GetLastError()); return; } // Setup CoreClrCallbacks and call sxsJitStartup original_CoreClrCallbacks = new CoreClrCallbacks(); original_CoreClrCallbacks->m_hmodCoreCLR = original_cccallbacks.m_hmodCoreCLR; original_CoreClrCallbacks->m_pfnIEE = original_cccallbacks.m_pfnIEE; original_CoreClrCallbacks->m_pfnGetCORSystemDirectory = original_cccallbacks.m_pfnGetCORSystemDirectory; original_CoreClrCallbacks->m_pfnGetCLRFunction = original_cccallbacks.m_pfnGetCLRFunction; CoreClrCallbacks* temp = new CoreClrCallbacks(); temp->m_hmodCoreCLR = original_cccallbacks.m_hmodCoreCLR; temp->m_pfnIEE = IEE_t; temp->m_pfnGetCORSystemDirectory = original_cccallbacks.m_pfnGetCORSystemDirectory; temp->m_pfnGetCLRFunction = GetCLRFunction; pnsxsJitStartup(*temp); }