summaryrefslogtreecommitdiff
path: root/src/vm/appdomain.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vm/appdomain.hpp')
-rw-r--r--src/vm/appdomain.hpp227
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;