diff options
Diffstat (limited to 'src/vm/appdomain.hpp')
-rw-r--r-- | src/vm/appdomain.hpp | 227 |
1 files changed, 67 insertions, 160 deletions
diff --git a/src/vm/appdomain.hpp b/src/vm/appdomain.hpp index 670f685fdc..898e50f1c2 100644 --- a/src/vm/appdomain.hpp +++ b/src/vm/appdomain.hpp @@ -19,9 +19,6 @@ #include "assembly.hpp" #include "clsload.hpp" #include "eehash.h" -#ifdef FEATURE_FUSION -#include "fusion.h" -#endif #include "arraylist.h" #include "comreflectioncache.hpp" #include "comutilnative.h" @@ -31,9 +28,8 @@ #include "ilstubcache.h" #include "testhookmgr.h" #include "gcheaputilities.h" -#ifdef FEATURE_VERSIONING +#include "gchandletableutilities.h" #include "../binder/inc/applicationcontext.hpp" -#endif // FEATURE_VERSIONING #include "rejit.h" #ifdef FEATURE_MULTICOREJIT @@ -42,16 +38,17 @@ #ifdef FEATURE_COMINTEROP #include "clrprivbinderwinrt.h" -#ifndef FEATURE_CORECLR -#include "clrprivbinderreflectiononlywinrt.h" -#include "clrprivtypecachereflectiononlywinrt.h" -#endif #include "..\md\winmd\inc\adapter.h" #include "winrttypenameconverter.h" #endif // FEATURE_COMINTEROP #include "appxutil.h" +#ifdef FEATURE_TIERED_COMPILATION +#include "tieredcompilation.h" +#include "callcounter.h" +#endif + class BaseDomain; class SystemDomain; class SharedDomain; @@ -1243,61 +1240,70 @@ public: //**************************************************************************************** // Handles -#if !defined(DACCESS_COMPILE) && !defined(CROSSGEN_COMPILE) // needs GetCurrentThreadHomeHeapNumber +#if !defined(DACCESS_COMPILE) && !defined(CROSSGEN_COMPILE) OBJECTHANDLE CreateTypedHandle(OBJECTREF object, int type) { WRAPPER_NO_CONTRACT; - return ::CreateTypedHandle(m_hHandleTableBucket->pTable[GetCurrentThreadHomeHeapNumber()], object, type); + + IGCHandleTable *pHandleTable = GCHandleTableUtilities::GetGCHandleTable(); + return pHandleTable->CreateHandleOfType(m_handleStore, OBJECTREFToObject(object), type); } OBJECTHANDLE CreateHandle(OBJECTREF object) { WRAPPER_NO_CONTRACT; CONDITIONAL_CONTRACT_VIOLATION(ModeViolation, object == NULL) - return ::CreateHandle(m_hHandleTableBucket->pTable[GetCurrentThreadHomeHeapNumber()], object); + return ::CreateHandle(m_handleStore, object); } OBJECTHANDLE CreateWeakHandle(OBJECTREF object) { WRAPPER_NO_CONTRACT; - return ::CreateWeakHandle(m_hHandleTableBucket->pTable[GetCurrentThreadHomeHeapNumber()], object); + return ::CreateWeakHandle(m_handleStore, object); } OBJECTHANDLE CreateShortWeakHandle(OBJECTREF object) { WRAPPER_NO_CONTRACT; - return ::CreateShortWeakHandle(m_hHandleTableBucket->pTable[GetCurrentThreadHomeHeapNumber()], object); + return ::CreateShortWeakHandle(m_handleStore, object); } OBJECTHANDLE CreateLongWeakHandle(OBJECTREF object) { WRAPPER_NO_CONTRACT; CONDITIONAL_CONTRACT_VIOLATION(ModeViolation, object == NULL) - return ::CreateLongWeakHandle(m_hHandleTableBucket->pTable[GetCurrentThreadHomeHeapNumber()], object); + return ::CreateLongWeakHandle(m_handleStore, object); } OBJECTHANDLE CreateStrongHandle(OBJECTREF object) { WRAPPER_NO_CONTRACT; - return ::CreateStrongHandle(m_hHandleTableBucket->pTable[GetCurrentThreadHomeHeapNumber()], object); + return ::CreateStrongHandle(m_handleStore, object); } OBJECTHANDLE CreatePinningHandle(OBJECTREF object) { WRAPPER_NO_CONTRACT; -#if CHECK_APP_DOMAIN_LEAKS +#if CHECK_APP_DOMAIN_LEAKS if(IsAppDomain()) object->TryAssignAppDomain((AppDomain*)this,TRUE); #endif - return ::CreatePinningHandle(m_hHandleTableBucket->pTable[GetCurrentThreadHomeHeapNumber()], object); + return ::CreatePinningHandle(m_handleStore, object); } OBJECTHANDLE CreateSizedRefHandle(OBJECTREF object) { WRAPPER_NO_CONTRACT; - OBJECTHANDLE h = ::CreateSizedRefHandle( - m_hHandleTableBucket->pTable[GCHeapUtilities::IsServerHeap() ? (m_dwSizedRefHandles % m_iNumberOfProcessors) : GetCurrentThreadHomeHeapNumber()], - object); + OBJECTHANDLE h; + if (GCHeapUtilities::IsServerHeap()) + { + h = ::CreateSizedRefHandle(m_handleStore, object, m_dwSizedRefHandles % m_iNumberOfProcessors); + } + else + { + h = ::CreateSizedRefHandle(m_handleStore, object); + } + InterlockedIncrement((LONG*)&m_dwSizedRefHandles); return h; } @@ -1306,7 +1312,7 @@ public: OBJECTHANDLE CreateRefcountedHandle(OBJECTREF object) { WRAPPER_NO_CONTRACT; - return ::CreateRefcountedHandle(m_hHandleTableBucket->pTable[GetCurrentThreadHomeHeapNumber()], object); + return ::CreateRefcountedHandle(m_handleStore, object); } OBJECTHANDLE CreateWinRTWeakHandle(OBJECTREF object, IWeakReference* pWinRTWeakReference) @@ -1319,35 +1325,35 @@ public: } CONTRACTL_END; - return ::CreateWinRTWeakHandle(m_hHandleTableBucket->pTable[GetCurrentThreadHomeHeapNumber()], object, pWinRTWeakReference); + return ::CreateWinRTWeakHandle(m_handleStore, object, pWinRTWeakReference); } #endif // FEATURE_COMINTEROP OBJECTHANDLE CreateVariableHandle(OBJECTREF object, UINT type) { WRAPPER_NO_CONTRACT; - return ::CreateVariableHandle(m_hHandleTableBucket->pTable[GetCurrentThreadHomeHeapNumber()], object, type); + return ::CreateVariableHandle(m_handleStore, object, type); } OBJECTHANDLE CreateDependentHandle(OBJECTREF primary, OBJECTREF secondary) { - WRAPPER_NO_CONTRACT; - return ::CreateDependentHandle(m_hHandleTableBucket->pTable[GetCurrentThreadHomeHeapNumber()], primary, secondary); + CONTRACTL + { + THROWS; + GC_NOTRIGGER; + MODE_COOPERATIVE; + } + CONTRACTL_END; + + IGCHandleTable *pHandleTable = GCHandleTableUtilities::GetGCHandleTable(); + return pHandleTable->CreateDependentHandle(m_handleStore, OBJECTREFToObject(primary), OBJECTREFToObject(secondary)); } #endif // DACCESS_COMPILE && !CROSSGEN_COMPILE - BOOL ContainsOBJECTHANDLE(OBJECTHANDLE handle); - -#ifdef FEATURE_FUSION - IApplicationContext *GetFusionContext() {LIMITED_METHOD_CONTRACT; return m_pFusionContext; } -#else IUnknown *GetFusionContext() {LIMITED_METHOD_CONTRACT; return m_pFusionContext; } -#if defined(FEATURE_HOST_ASSEMBLY_RESOLVER) CLRPrivBinderCoreCLR *GetTPABinderContext() {LIMITED_METHOD_CONTRACT; return m_pTPABinderContext; } -#endif // defined(FEATURE_HOST_ASSEMBLY_RESOLVER) -#endif CrstExplicitInit * GetLoaderAllocatorReferencesLock() { @@ -1392,18 +1398,11 @@ protected: // Fusion context, used for adding assemblies to the is domain. It defines // fusion properties for finding assemblyies such as SharedBinPath, // PrivateBinPath, Application Directory, etc. -#ifdef FEATURE_FUSION - IApplicationContext* m_pFusionContext; // Binding context for the domain -#else IUnknown *m_pFusionContext; // Current binding context for the domain -#if defined(FEATURE_HOST_ASSEMBLY_RESOLVER) CLRPrivBinderCoreCLR *m_pTPABinderContext; // Reference to the binding context that holds TPA list details -#endif // defined(FEATURE_HOST_ASSEMBLY_RESOLVER) -#endif - - HandleTableBucket *m_hHandleTableBucket; + void* m_handleStore; // The large heap handle table. LargeHeapHandleTable *m_pLargeHeapHandleTable; @@ -1417,7 +1416,7 @@ protected: // Information regarding the managed standard interfaces. MngStdInterfacesInfo *m_pMngStdInterfacesInfo; - // WinRT binder (only in classic = non-AppX; AppX has the WinRT binder inside code:CLRPrivBinderAppX) + // WinRT binder PTR_CLRPrivBinderWinRT m_pWinRtBinder; #endif // FEATURE_COMINTEROP @@ -1793,9 +1792,7 @@ public: protected: DWORD m_type; LPVOID m_value; -#if FEATURE_VERSIONING ULONG m_uIdentityHash; -#endif }; #endif // FEATURE_LOADER_OPTIMIZATION @@ -1805,9 +1802,6 @@ protected: struct FailedAssembly { SString displayName; SString location; -#ifdef FEATURE_FUSION - LOADCTX_TYPE context; -#endif HRESULT error; void Initialize(AssemblySpec *pSpec, Exception *ex) @@ -1830,9 +1824,6 @@ struct FailedAssembly { // If the parent hasn't been set but the code base has, use LoadFrom. // Otherwise, use the default. // -#ifdef FEATURE_FUSION - context = pSpec->GetParentIAssembly() ? pSpec->GetParentIAssembly()->GetFusionLoadContext() : LOADCTX_TYPE_LOADFROM; -#endif // FEATURE_FUSION } }; @@ -1988,15 +1979,10 @@ public: inline LPCWSTR GetAppDomainManagerType(); inline EInitializeNewDomainFlags GetAppDomainManagerInitializeNewDomainFlags(); -#ifndef FEATURE_CORECLR - inline BOOL AppDomainManagerSetFromConfig(); - Assembly *GetAppDomainManagerEntryAssembly(); - void ComputeTargetFrameworkName(); -#endif // FEATURE_CORECLR -#if defined(FEATURE_CORECLR) && defined(FEATURE_COMINTEROP) +#if defined(FEATURE_COMINTEROP) HRESULT SetWinrtApplicationContext(SString &appLocalWinMD); -#endif // FEATURE_CORECLR && FEATURE_COMINTEROP +#endif // FEATURE_COMINTEROP BOOL CanReversePInvokeEnter(); void SetReversePInvokeCannotEnter(); @@ -2032,10 +2018,6 @@ public: virtual BOOL IsAppDomain() { LIMITED_METHOD_DAC_CONTRACT; return TRUE; } virtual PTR_AppDomain AsAppDomain() { LIMITED_METHOD_CONTRACT; return dac_cast<PTR_AppDomain>(this); } -#ifndef FEATURE_CORECLR - void InitializeSorting(OBJECTREF* ppAppdomainSetup); - void InitializeHashing(OBJECTREF* ppAppdomainSetup); -#endif OBJECTREF DoSetup(OBJECTREF* setupInfo); @@ -2290,7 +2272,6 @@ public: return AssemblyIterator::Create(this, assemblyIterationFlags); } -#ifdef FEATURE_CORECLR private: struct NativeImageDependenciesEntry { @@ -2346,7 +2327,6 @@ public: void SetNativeDllSearchDirectories(LPCWSTR paths); BOOL HasNativeDllSearchDirectories(); void ShutdownNativeDllSearchDirectories(); -#endif // FEATURE_CORECLR public: SIZE_T GetAssemblyCount() @@ -2374,12 +2354,6 @@ public: DomainAssembly * FindAssembly(PEAssembly * pFile, FindAssemblyOptions options = FindAssemblyOptions_None) DAC_EMPTY_RET(NULL); -#ifdef FEATURE_MIXEDMODE - // Finds only loaded modules, elevates level if needed - Module* GetIJWModule(HMODULE hMod) DAC_EMPTY_RET(NULL); - // Finds loading modules - DomainFile* FindIJWDomainFile(HMODULE hMod, const SString &path) DAC_EMPTY_RET(NULL); -#endif // FEATURE_MIXEDMODE Assembly *LoadAssembly(AssemblySpec* pIdentity, PEAssembly *pFile, @@ -2402,23 +2376,12 @@ public: FileLoadLevel targetLevel, AssemblyLoadSecurity *pLoadSecurity = NULL); -#ifdef FEATURE_MULTIMODULE_ASSEMBLIES - DomainModule *LoadDomainModule(DomainAssembly *pAssembly, - PEModule *pFile, - FileLoadLevel targetLevel); -#endif CHECK CheckValidModule(Module *pModule); #ifdef FEATURE_LOADER_OPTIMIZATION DomainFile *LoadDomainNeutralModuleDependency(Module *pModule, FileLoadLevel targetLevel); #endif -#ifdef FEATURE_FUSION - PEAssembly *BindExplicitAssembly(HMODULE hMod, BOOL bindable); - Assembly *LoadExplicitAssembly(HMODULE hMod, BOOL bindable); - void GetFileFromFusion(IAssembly *pIAssembly, LPCWSTR wszModuleName, - SString &path); -#endif // private: void LoadSystemAssemblies(); @@ -2485,10 +2448,6 @@ public: //**************************************************************************************** // Determines if the image is to be loaded into the shared assembly or an individual // appdomains. -#ifndef FEATURE_CORECLR - BOOL ApplySharePolicy(DomainAssembly *pFile); - BOOL ApplySharePolicyFlag(DomainAssembly *pFile); -#endif #endif // FEATURE_LOADER_OPTIMIZATION BOOL HasSetSecurityPolicy(); @@ -2546,9 +2505,6 @@ public: PEAssembly ** ppAssembly, BOOL fIsIntrospectionOnly = FALSE) DAC_EMPTY_RET(S_OK); -#ifdef FEATURE_REFLECTION_ONLY_LOAD - virtual DomainAssembly *BindAssemblySpecForIntrospectionDependencies(AssemblySpec *pSpec) DAC_EMPTY_RET(NULL); -#endif PEAssembly *TryResolveAssembly(AssemblySpec *pSpec, BOOL fPreBind); @@ -2577,19 +2533,11 @@ public: //**************************************************************************************** // -#ifdef FEATURE_FUSION - static BOOL SetContextProperty(IApplicationContext* pFusionContext, - LPCWSTR pProperty, - OBJECTREF* obj); -#endif //**************************************************************************************** // // Uses the first assembly to add an application base to the Context. This is done // in a lazy fashion so executables do not take the perf hit unless the load other // assemblies -#ifdef FEATURE_FUSION - LPWSTR GetDynamicDir(); -#endif #ifndef DACCESS_COMPILE void OnAssemblyLoad(Assembly *assem); void OnAssemblyLoadUnlocked(Assembly *assem); @@ -2764,9 +2712,6 @@ public: //**************************************************************************************** // Get the proxy for this app domain -#ifdef FEATURE_REMOTING - OBJECTREF GetAppDomainProxy(); -#endif ADIndex GetIndex() { @@ -2784,15 +2729,8 @@ public: void InitializeDomainContext(BOOL allowRedirects, LPCWSTR pwszPath, LPCWSTR pwszConfig); -#ifdef FEATURE_FUSION - IApplicationContext *CreateFusionContext(); - void SetupLoaderOptimization(DWORD optimization); -#endif -#ifdef FEATURE_VERSIONING IUnknown *CreateFusionContext(); -#endif // FEATURE_VERSIONING -#if defined(FEATURE_HOST_ASSEMBLY_RESOLVER) void OverrideDefaultContextBinder(IUnknown *pOverrideBinder) { LIMITED_METHOD_CONTRACT; @@ -2803,7 +2741,6 @@ public: m_pFusionContext = pOverrideBinder; } -#endif // defined(FEATURE_HOST_ASSEMBLY_RESOLVER) #ifdef FEATURE_PREJIT CorCompileConfigFlags GetNativeConfigFlags(); @@ -2822,9 +2759,6 @@ public: //**************************************************************************************** // Manage a pool of asyncrhonous objects used to fetch assemblies. When a sink is released // it places itself back on the pool list. Only one object is kept in the pool. -#ifdef FEATURE_FUSION - AssemblySink* AllocateAssemblySink(AssemblySpec* pSpec); -#endif void SetIsUserCreatedDomain() { LIMITED_METHOD_CONTRACT; @@ -3421,15 +3355,9 @@ private: void InitializeDefaultDomainManager (); -#ifdef FEATURE_CLICKONCE - void InitializeDefaultClickOnceDomain(); -#endif // FEATURE_CLICKONCE void InitializeDefaultDomainSecurity(); public: -#ifdef FEATURE_CLICKONCE - BOOL IsClickOnceAppDomain(); -#endif // FEATURE_CLICKONCE protected: BOOL PostBindResolveAssembly(AssemblySpec *pPrePolicySpec, @@ -3480,9 +3408,6 @@ private: BOOL isTerminating; BOOL *pResult; }; - #ifndef FEATURE_CORECLR - static void RaiseUnhandledExceptionEvent_Wrapper(LPVOID /* RaiseUnhandled_Args * */); - #endif static void AllowThreadEntrance(AppDomain *pApp); @@ -3802,19 +3727,14 @@ private: // Stub caches for Method stubs //--------------------------------------------------------- -#ifdef FEATURE_FUSION - void TurnOnBindingRedirects(); -#endif public: -#if defined(FEATURE_HOST_ASSEMBLY_RESOLVER) private: Volatile<BOOL> m_fIsBindingModelLocked; public: BOOL IsHostAssemblyResolverInUse(); BOOL IsBindingModelLocked(); BOOL LockBindingModel(); -#endif // defined(FEATURE_HOST_ASSEMBLY_RESOLVER) UMEntryThunkCache *GetUMEntryThunkCache(); @@ -3843,11 +3763,9 @@ public: ILLEGAL_VERIFICATION_DOMAIN = 0x8000, // This can't be a verification domain IGNORE_UNHANDLED_EXCEPTIONS = 0x10000, // AppDomain was created using the APPDOMAIN_IGNORE_UNHANDLED_EXCEPTIONS flag ENABLE_PINVOKE_AND_CLASSIC_COMINTEROP = 0x20000, // AppDomain was created using the APPDOMAIN_ENABLE_PINVOKE_AND_CLASSIC_COMINTEROP flag -#ifdef FEATURE_CORECLR ENABLE_SKIP_PLAT_CHECKS = 0x200000, // Skip various assembly checks (like platform check) ENABLE_ASSEMBLY_LOADFILE = 0x400000, // Allow Assembly.LoadFile in CoreCLR DISABLE_TRANSPARENCY_ENFORCEMENT= 0x800000, // Disable enforcement of security transparency rules -#endif }; SecurityContext *m_pSecContext; @@ -3861,9 +3779,7 @@ public: BOOL m_fAppDomainManagerSetInConfig; EInitializeNewDomainFlags m_dwAppDomainManagerInitializeDomainFlags; -#ifdef FEATURE_CORECLR ArrayList m_NativeDllSearchDirectories; -#endif BOOL m_ReversePInvokeCanEnter; bool m_ForceTrivialWaitOperations; // Section to support AD unload due to escalation @@ -3891,10 +3807,8 @@ public: return (m_Stage == STAGE_UNLOAD_REQUESTED); } -#ifdef FEATURE_CORECLR BOOL IsImageFromTrustedPath(PEImage* pImage); BOOL IsImageFullyTrusted(PEImage* pImage); -#endif #ifdef FEATURE_TYPEEQUIVALENCE private: @@ -3929,27 +3843,36 @@ public: #endif +#if defined(FEATURE_TIERED_COMPILATION) + +public: + TieredCompilationManager * GetTieredCompilationManager() + { + LIMITED_METHOD_CONTRACT; + return &m_tieredCompilationManager; + } + +private: + TieredCompilationManager m_tieredCompilationManager; + +public: + CallCounter * GetCallCounter() + { + LIMITED_METHOD_CONTRACT; + return &m_callCounter; + } + +private: + CallCounter m_callCounter; +#endif + #ifdef FEATURE_COMINTEROP private: -#ifdef FEATURE_REFLECTION_ONLY_LOAD - // ReflectionOnly WinRT binder and its TypeCache (only in classic = non-AppX; the scenario is not supported in AppX) - CLRPrivBinderReflectionOnlyWinRT * m_pReflectionOnlyWinRtBinder; - CLRPrivTypeCacheReflectionOnlyWinRT * m_pReflectionOnlyWinRtTypeCache; -#endif // FEATURE_REFLECTION_ONLY_LOAD #endif //FEATURE_COMINTEROP public: -#ifndef FEATURE_CORECLR - BOOL m_bUseOsSorting; - DWORD m_sortVersion; - COMNlsCustomSortLibrary *m_pCustomSortLibrary; -#if _DEBUG - BOOL m_bSortingInitialized; -#endif // _DEBUG - COMNlsHashProvider *m_pNlsHashProvider; -#endif // !FEATURE_CORECLR private: // This is the root-level default load context root binder. If null, then @@ -4367,9 +4290,6 @@ public: } #endif // DACCESS_COMPILE -#ifndef FEATURE_CORECLR - static void ExecuteMainMethod(HMODULE hMod, __in_opt LPWSTR path = NULL); -#endif static void ActivateApplication(int *pReturnValue); static void InitializeDefaultDomain(BOOL allowRedirects, ICLRPrivBinder * pBinder = NULL); @@ -4382,9 +4302,6 @@ public: #endif static BOOL SetGlobalSharePolicyUsingAttribute(IMDInternalImport* pScope, mdMethodDef mdMethod); -#ifdef FEATURE_MIXEDMODE - static HRESULT RunDllMain(HINSTANCE hInst, DWORD dwReason, LPVOID lpReserved); -#endif // FEATURE_MIXEDMODE //**************************************************************************************** // @@ -4446,9 +4363,6 @@ public: //**************************************************************************************** // return the dev path -#ifdef FEATURE_FUSION - void GetDevpathW(__out_ecount_opt(1) LPWSTR* pPath, DWORD* pSize); -#endif #ifndef DACCESS_COMPILE void IncrementNumAppDomains () @@ -4751,15 +4665,8 @@ private: InlineSString<100> m_BaseLibrary; -#ifdef FEATURE_VERSIONING - InlineSString<100> m_SystemDirectory; -#else - - LPCWSTR m_SystemDirectory; - -#endif LPWSTR m_pwDevpath; DWORD m_dwDevpath; |