diff --git a/src/coreclr/debug/daccess/dacimpl.h b/src/coreclr/debug/daccess/dacimpl.h index 0d3ab3ad7bd18..cec666bc02bc1 100644 --- a/src/coreclr/debug/daccess/dacimpl.h +++ b/src/coreclr/debug/daccess/dacimpl.h @@ -1061,7 +1061,7 @@ class ClrDataAccess virtual HRESULT STDMETHODCALLTYPE GetAppDomainData(CLRDATA_ADDRESS addr, struct DacpAppDomainData *data); virtual HRESULT STDMETHODCALLTYPE GetAppDomainName(CLRDATA_ADDRESS addr, unsigned int count, _Inout_updates_z_(count) WCHAR *name, unsigned int *pNeeded); virtual HRESULT STDMETHODCALLTYPE GetAssemblyList(CLRDATA_ADDRESS appDomain, int count, CLRDATA_ADDRESS values[], int *fetched); - virtual HRESULT STDMETHODCALLTYPE GetAssemblyData(CLRDATA_ADDRESS baseDomainPtr, CLRDATA_ADDRESS assembly, struct DacpAssemblyData *data); + virtual HRESULT STDMETHODCALLTYPE GetAssemblyData(CLRDATA_ADDRESS domainPtr, CLRDATA_ADDRESS assembly, struct DacpAssemblyData *data); virtual HRESULT STDMETHODCALLTYPE GetAssemblyName(CLRDATA_ADDRESS assembly, unsigned int count, _Inout_updates_z_(count) WCHAR *name, unsigned int *pNeeded); virtual HRESULT STDMETHODCALLTYPE GetThreadData(CLRDATA_ADDRESS thread, struct DacpThreadData *data); virtual HRESULT STDMETHODCALLTYPE GetThreadFromThinlockID(UINT thinLockId, CLRDATA_ADDRESS *pThread); diff --git a/src/coreclr/debug/daccess/request.cpp b/src/coreclr/debug/daccess/request.cpp index 2be13b91e98aa..5e73d02325112 100644 --- a/src/coreclr/debug/daccess/request.cpp +++ b/src/coreclr/debug/daccess/request.cpp @@ -2834,19 +2834,17 @@ ClrDataAccess::GetAppDomainData(CLRDATA_ADDRESS addr, struct DacpAppDomainData * } else { - PTR_BaseDomain pBaseDomain = PTR_BaseDomain(TO_TADDR(addr)); - ZeroMemory(appdomainData, sizeof(DacpAppDomainData)); - appdomainData->AppDomainPtr = PTR_CDADDR(pBaseDomain); + appdomainData->AppDomainPtr = addr; PTR_LoaderAllocator pLoaderAllocator = SystemDomain::GetGlobalLoaderAllocator(); appdomainData->pHighFrequencyHeap = HOST_CDADDR(pLoaderAllocator->GetHighFrequencyHeap()); appdomainData->pLowFrequencyHeap = HOST_CDADDR(pLoaderAllocator->GetLowFrequencyHeap()); appdomainData->pStubHeap = HOST_CDADDR(pLoaderAllocator->GetStubHeap()); appdomainData->appDomainStage = STAGE_OPEN; - if (pBaseDomain->IsAppDomain()) + if (addr != HOST_CDADDR(SystemDomain::System())) { - AppDomain * pAppDomain = pBaseDomain->AsAppDomain(); + PTR_AppDomain pAppDomain = PTR_AppDomain(TO_TADDR(addr)); appdomainData->DomainLocalBlock = 0; appdomainData->pDomainLocalModules = 0; @@ -2963,15 +2961,19 @@ ClrDataAccess::GetAssemblyList(CLRDATA_ADDRESS addr, int count, CLRDATA_ADDRESS SOSDacEnter(); - BaseDomain* pBaseDomain = PTR_BaseDomain(TO_TADDR(addr)); - - int n=0; - if (pBaseDomain->IsAppDomain()) + if (addr == HOST_CDADDR(SystemDomain::System())) + { + // We shouldn't be asking for the assemblies in SystemDomain + hr = E_INVALIDARG; + } + else { - AppDomain::AssemblyIterator i = pBaseDomain->AsAppDomain()->IterateAssembliesEx( + PTR_AppDomain pAppDomain = PTR_AppDomain(TO_TADDR(addr)); + AppDomain::AssemblyIterator i = pAppDomain->IterateAssembliesEx( (AssemblyIterationFlags)(kIncludeLoading | kIncludeLoaded | kIncludeExecution)); CollectibleAssemblyHolder pDomainAssembly; + int n = 0; if (values) { while (i.Next(pDomainAssembly.This()) && (n < count)) @@ -2994,13 +2996,6 @@ ClrDataAccess::GetAssemblyList(CLRDATA_ADDRESS addr, int count, CLRDATA_ADDRESS if (pNeeded) *pNeeded = n; } - else - { - // The only other type of BaseDomain is the SystemDomain, and we shouldn't be asking - // for the assemblies in it. - _ASSERTE(false); - hr = E_INVALIDARG; - } SOSDacLeave(); return hr; @@ -3040,10 +3035,9 @@ ClrDataAccess::GetAppDomainName(CLRDATA_ADDRESS addr, unsigned int count, _Inout { SOSDacEnter(); - PTR_BaseDomain pBaseDomain = PTR_BaseDomain(TO_TADDR(addr)); - if (!pBaseDomain->IsAppDomain()) + if (addr == HOST_CDADDR(SystemDomain::System())) { - // Shared domain and SystemDomain don't have this field. + // SystemDomain doesn't have this field. if (pNeeded) *pNeeded = 1; if (name) @@ -3051,8 +3045,7 @@ ClrDataAccess::GetAppDomainName(CLRDATA_ADDRESS addr, unsigned int count, _Inout } else { - AppDomain* pAppDomain = pBaseDomain->AsAppDomain(); - + PTR_AppDomain pAppDomain = PTR_AppDomain(TO_TADDR(addr)); if (!pAppDomain->m_friendlyName.IsEmpty()) { if (!pAppDomain->m_friendlyName.DacGetUnicode(count, name, pNeeded)) @@ -3103,9 +3096,9 @@ ClrDataAccess::GetAppDomainConfigFile(CLRDATA_ADDRESS appDomain, int count, } HRESULT -ClrDataAccess::GetAssemblyData(CLRDATA_ADDRESS cdBaseDomainPtr, CLRDATA_ADDRESS assembly, struct DacpAssemblyData *assemblyData) +ClrDataAccess::GetAssemblyData(CLRDATA_ADDRESS domain, CLRDATA_ADDRESS assembly, struct DacpAssemblyData *assemblyData) { - if (assembly == (CLRDATA_ADDRESS)NULL && cdBaseDomainPtr == (CLRDATA_ADDRESS)NULL) + if (assembly == (CLRDATA_ADDRESS)NULL && domain == (CLRDATA_ADDRESS)NULL) { return E_INVALIDARG; } @@ -3117,14 +3110,9 @@ ClrDataAccess::GetAssemblyData(CLRDATA_ADDRESS cdBaseDomainPtr, CLRDATA_ADDRESS // Make sure conditionally-assigned fields like AssemblySecDesc, LoadContext, etc. are zeroed ZeroMemory(assemblyData, sizeof(DacpAssemblyData)); - // If the specified BaseDomain is an AppDomain, get a pointer to it - AppDomain * pDomain = NULL; - if (cdBaseDomainPtr != (CLRDATA_ADDRESS)NULL) + if (domain != (CLRDATA_ADDRESS)NULL) { - assemblyData->BaseDomainPtr = cdBaseDomainPtr; - PTR_BaseDomain baseDomain = PTR_BaseDomain(TO_TADDR(cdBaseDomainPtr)); - if( baseDomain->IsAppDomain() ) - pDomain = baseDomain->AsAppDomain(); + assemblyData->DomainPtr = domain; } assemblyData->AssemblyPtr = HOST_CDADDR(pAssembly); diff --git a/src/coreclr/inc/dacprivate.h b/src/coreclr/inc/dacprivate.h index 305029634406c..62821f71395af 100644 --- a/src/coreclr/inc/dacprivate.h +++ b/src/coreclr/inc/dacprivate.h @@ -425,11 +425,11 @@ enum DacpAppDomainDataStage { STAGE_CLOSED }; -// Information about a BaseDomain (AppDomain, SharedDomain or SystemDomain). +// Information about an AppDomain or SystemDomain. // For types other than AppDomain, some fields (like dwID, DomainLocalBlock, etc.) will be 0/null. struct MSLAYOUT DacpAppDomainData { - // The pointer to the BaseDomain (not necessarily an AppDomain). + // The pointer to the AppDomain or SystemDomain. // It's useful to keep this around in the structure CLRDATA_ADDRESS AppDomainPtr = 0; CLRDATA_ADDRESS AppSecDesc = 0; @@ -455,7 +455,7 @@ struct MSLAYOUT DacpAssemblyData CLRDATA_ADDRESS AssemblyPtr = 0; //useful to have CLRDATA_ADDRESS ClassLoader = 0; CLRDATA_ADDRESS ParentDomain = 0; - CLRDATA_ADDRESS BaseDomainPtr = 0; + CLRDATA_ADDRESS DomainPtr = 0; CLRDATA_ADDRESS AssemblySecDesc = 0; BOOL isDynamic = FALSE; UINT ModuleCount = FALSE; @@ -463,9 +463,9 @@ struct MSLAYOUT DacpAssemblyData BOOL isDomainNeutral = FALSE; // Always false, preserved for backward compatibility DWORD dwLocationFlags = 0; - HRESULT Request(ISOSDacInterface *sos, CLRDATA_ADDRESS addr, CLRDATA_ADDRESS baseDomainPtr) + HRESULT Request(ISOSDacInterface *sos, CLRDATA_ADDRESS addr, CLRDATA_ADDRESS domainPtr) { - return sos->GetAssemblyData(baseDomainPtr, addr, this); + return sos->GetAssemblyData(domainPtr, addr, this); } HRESULT Request(ISOSDacInterface *sos, CLRDATA_ADDRESS addr) diff --git a/src/coreclr/vm/appdomain.cpp b/src/coreclr/vm/appdomain.cpp index 4478a450df9d5..287823cac17f6 100644 --- a/src/coreclr/vm/appdomain.cpp +++ b/src/coreclr/vm/appdomain.cpp @@ -1546,15 +1546,15 @@ void SystemDomain::NotifyProfilerStartup() { BEGIN_PROFILER_CALLBACK(CORProfilerTrackAppDomainLoads()); - _ASSERTE(System()->DefaultDomain()); - (&g_profControlBlock)->AppDomainCreationStarted((AppDomainID) System()->DefaultDomain()); + _ASSERTE(AppDomain::GetCurrentDomain()); + (&g_profControlBlock)->AppDomainCreationStarted((AppDomainID) AppDomain::GetCurrentDomain()); END_PROFILER_CALLBACK(); } { BEGIN_PROFILER_CALLBACK(CORProfilerTrackAppDomainLoads()); - _ASSERTE(System()->DefaultDomain()); - (&g_profControlBlock)->AppDomainCreationFinished((AppDomainID) System()->DefaultDomain(), S_OK); + _ASSERTE(AppDomain::GetCurrentDomain()); + (&g_profControlBlock)->AppDomainCreationFinished((AppDomainID) AppDomain::GetCurrentDomain(), S_OK); END_PROFILER_CALLBACK(); } } @@ -1585,15 +1585,15 @@ HRESULT SystemDomain::NotifyProfilerShutdown() { BEGIN_PROFILER_CALLBACK(CORProfilerTrackAppDomainLoads()); - _ASSERTE(System()->DefaultDomain()); - (&g_profControlBlock)->AppDomainShutdownStarted((AppDomainID) System()->DefaultDomain()); + _ASSERTE(AppDomain::GetCurrentDomain()); + (&g_profControlBlock)->AppDomainShutdownStarted((AppDomainID) AppDomain::GetCurrentDomain()); END_PROFILER_CALLBACK(); } { BEGIN_PROFILER_CALLBACK(CORProfilerTrackAppDomainLoads()); - _ASSERTE(System()->DefaultDomain()); - (&g_profControlBlock)->AppDomainShutdownFinished((AppDomainID) System()->DefaultDomain(), S_OK); + _ASSERTE(AppDomain::GetCurrentDomain()); + (&g_profControlBlock)->AppDomainShutdownFinished((AppDomainID) AppDomain::GetCurrentDomain(), S_OK); END_PROFILER_CALLBACK(); } return (S_OK); diff --git a/src/coreclr/vm/proftoeeinterfaceimpl.cpp b/src/coreclr/vm/proftoeeinterfaceimpl.cpp index e99273beb5d13..614a6036fdf8a 100644 --- a/src/coreclr/vm/proftoeeinterfaceimpl.cpp +++ b/src/coreclr/vm/proftoeeinterfaceimpl.cpp @@ -3148,9 +3148,9 @@ HRESULT ProfToEEInterfaceImpl::GetAppDomainStaticAddress(ClassID classId, return E_INVALIDARG; } - // Some domains, like the system domain, aren't APP domains, and thus don't contain any + // The system domain isn't an APP domain and thus doesn't contain any // statics. See if the profiler is trying to be naughty. - if (!((BaseDomain*) appDomainId)->IsAppDomain()) + if (appDomainId == (AppDomainID)SystemDomain::System()) { return E_INVALIDARG; } @@ -3382,9 +3382,9 @@ HRESULT ProfToEEInterfaceImpl::GetThreadStaticAddress2(ClassID classId, return E_INVALIDARG; } - // Some domains, like the system domain, aren't APP domains, and thus don't contain any + // The system domain isn't an APP domain and thus doesn't contain any // statics. See if the profiler is trying to be naughty. - if (!((BaseDomain*) appDomainId)->IsAppDomain()) + if (appDomainId == (AppDomainID)SystemDomain::System()) { return E_INVALIDARG; } @@ -5479,25 +5479,8 @@ HRESULT ProfToEEInterfaceImpl::GetAppDomainInfo(AppDomainID appDomainId, return E_INVALIDARG; } - BaseDomain *pDomain; // Internal data structure. HRESULT hr = S_OK; - // @todo: - // Right now, this ID is not a true AppDomain, since we use the old - // AppDomain/SystemDomain model in the profiling API. This means that - // the profiler exposes the SharedDomain and the SystemDomain to the - // outside world. It's not clear whether this is actually the right thing - // to do or not. - seantrow - // - // Postponed to V2. - // - - pDomain = (BaseDomain *) appDomainId; - - // Make sure they've passed in a valid appDomainId - if (pDomain == NULL) - return (E_INVALIDARG); - // Pick sensible defaults. if (pcchName) *pcchName = 0; @@ -5507,10 +5490,10 @@ HRESULT ProfToEEInterfaceImpl::GetAppDomainInfo(AppDomainID appDomainId, *pProcessId = 0; LPCWSTR szFriendlyName; - if (pDomain == SystemDomain::System()) + if (appDomainId == (AppDomainID)SystemDomain::System()) szFriendlyName = g_pwBaseLibrary; else - szFriendlyName = ((AppDomain*)pDomain)->GetFriendlyNameForDebugger(); + szFriendlyName = ((AppDomain*)appDomainId)->GetFriendlyNameForDebugger(); if (szFriendlyName != NULL) {