void AutoSystemInfo::Initialize() { Assert(!initialized); #ifndef _WIN32 PAL_InitializeDLL(); majorVersion = CHAKRA_CORE_MAJOR_VERSION; minorVersion = CHAKRA_CORE_MINOR_VERSION; #endif processHandle = GetCurrentProcess(); GetSystemInfo(this); // Make the page size constant so calculation are faster. Assert(this->dwPageSize == AutoSystemInfo::PageSize); #if defined(_M_IX86) || defined(_M_X64) get_cpuid(CPUInfo, 1); isAtom = CheckForAtom(); #endif #if defined(_M_ARM32_OR_ARM64) armDivAvailable = IsProcessorFeaturePresent(PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE) ? true : false; #endif allocationGranularityPageCount = dwAllocationGranularity / dwPageSize; isWindows8OrGreater = IsWindows8OrGreater(); binaryName[0] = _u('\0'); #if SYSINFO_IMAGE_BASE_AVAILABLE dllLoadAddress = (UINT_PTR)&__ImageBase; dllHighAddress = (UINT_PTR)&__ImageBase + ((PIMAGE_NT_HEADERS)(((char *)&__ImageBase) + __ImageBase.e_lfanew))->OptionalHeader.SizeOfImage; #endif InitPhysicalProcessorCount(); #if DBG initialized = true; #endif WCHAR DisableDebugScopeCaptureFlag[MAX_PATH]; if (::GetEnvironmentVariable(_u("JS_DEBUG_SCOPE"), DisableDebugScopeCaptureFlag, _countof(DisableDebugScopeCaptureFlag)) != 0) { disableDebugScopeCapture = true; } else { disableDebugScopeCapture = false; } this->shouldQCMoreFrequently = false; this->supportsOnlyMultiThreadedCOM = false; this->isLowMemoryDevice = false; // 0 indicates we haven't retrieved the available commit. We get it lazily. this->availableCommit = 0; ChakraBinaryAutoSystemInfoInit(this); }
extern "C" BOOL #ifndef FEATURE_PAL APIENTRY #endif // !FEATURE_PAL DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: #ifdef FEATURE_PAL if (0 != PAL_InitializeDLL()) { fprintf(stderr, "Error: Fail to PAL_InitializeDLL\n"); exit(1); } #endif // FEATURE_PAL Logger::Initialize(); SetLogFilePath(); Logger::OpenLogFile(g_logFilePath); break; case DLL_PROCESS_DETACH: Logger::Shutdown(); delete[] g_logFilePath; g_logFilePath = nullptr; break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: break; } return TRUE; }
int InitializeDllTest1() { return PAL_InitializeDLL(); }
int InitializeDllTest2() { PAL_SetInitializeDLLFlags(PAL_INITIALIZE_DLL | PAL_INITIALIZE_REGISTER_SIGNALS); return PAL_InitializeDLL(); }
//***************************************************************************** // The main dll entry point for this module. This routine is called by the // OS when the dll gets loaded. Control is simply deferred to the main code. //***************************************************************************** BOOL WINAPI DbgDllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) { // Save off the instance handle for later use. switch (dwReason) { case DLL_PROCESS_ATTACH: { #ifndef FEATURE_PAL g_hInst = hInstance; #else int err = PAL_InitializeDLL(); if(err != 0) { return FALSE; } #endif #if defined(_DEBUG) static int BreakOnDILoad = -1; if (BreakOnDILoad == -1) BreakOnDILoad = CLRConfig::GetConfigValue(CLRConfig::INTERNAL_BreakOnDILoad); if (BreakOnDILoad) { _ASSERTE(!"DI Loaded"); } #endif #if defined(LOGGING) { PathString rcFile; WszGetModuleFileName(hInstance, rcFile); LOG((LF_CORDB, LL_INFO10000, "DI::DbgDllMain: load right side support from file '%s'\n", rcFile.GetUnicode())); } #endif #ifdef RSCONTRACTS // alloc a TLS slot DbgRSThread::s_TlsSlot = TlsAlloc(); _ASSERTE(DbgRSThread::s_TlsSlot != TLS_OUT_OF_INDEXES); #endif #if defined(FEATURE_DBGIPC_TRANSPORT_DI) g_pDbgTransportTarget = new (nothrow) DbgTransportTarget(); if (g_pDbgTransportTarget == NULL) return FALSE; if (FAILED(g_pDbgTransportTarget->Init())) return FALSE; #endif // FEATURE_DBGIPC_TRANSPORT_DI } break; case DLL_THREAD_DETACH: { #ifdef STRESS_LOG StressLog::ThreadDetach((ThreadStressLog*) ClrFlsGetValue(TlsIdx_StressLog)); #endif #ifdef RSCONTRACTS // DbgRSThread are lazily created when we call GetThread(), // So we don't need to do anything in DLL_THREAD_ATTACH, // But this is our only chance to destroy the thread object. DbgRSThread * p = DbgRSThread::GetThread(); p->Destroy(); #endif } break; case DLL_PROCESS_DETACH: { #if defined(FEATURE_DBGIPC_TRANSPORT_DI) if (g_pDbgTransportTarget != NULL) { g_pDbgTransportTarget->Shutdown(); delete g_pDbgTransportTarget; g_pDbgTransportTarget = NULL; } #endif // FEATURE_DBGIPC_TRANSPORT_DI #ifdef RSCONTRACTS TlsFree(DbgRSThread::s_TlsSlot); DbgRSThread::s_TlsSlot = TLS_OUT_OF_INDEXES; #endif } break; } return TRUE; }