Skip to content

Commit 95964c1

Browse files
authored
Make DAC return Module instead of PEAssembly for ModuleData::PEAssembly (#103821)
1 parent 03f58cb commit 95964c1

File tree

4 files changed

+20
-14
lines changed

4 files changed

+20
-14
lines changed

src/coreclr/debug/daccess/dacimpl.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,8 +1088,8 @@ class ClrDataAccess
10881088
virtual HRESULT STDMETHODCALLTYPE GetModuleData(CLRDATA_ADDRESS moduleAddr, struct DacpModuleData *data);
10891089
virtual HRESULT STDMETHODCALLTYPE TraverseModuleMap(ModuleMapType mmt, CLRDATA_ADDRESS moduleAddr, MODULEMAPTRAVERSE pCallback, LPVOID token);
10901090
virtual HRESULT STDMETHODCALLTYPE GetMethodDescFromToken(CLRDATA_ADDRESS moduleAddr, mdToken token, CLRDATA_ADDRESS *methodDesc);
1091-
virtual HRESULT STDMETHODCALLTYPE GetPEFileBase(CLRDATA_ADDRESS addr, CLRDATA_ADDRESS *base);
1092-
virtual HRESULT STDMETHODCALLTYPE GetPEFileName(CLRDATA_ADDRESS addr, unsigned int count, _Inout_updates_z_(count) WCHAR *fileName, unsigned int *pNeeded);
1091+
virtual HRESULT STDMETHODCALLTYPE GetPEFileBase(CLRDATA_ADDRESS moduleAddr, CLRDATA_ADDRESS *base);
1092+
virtual HRESULT STDMETHODCALLTYPE GetPEFileName(CLRDATA_ADDRESS moduleAddr, unsigned int count, _Inout_updates_z_(count) WCHAR *fileName, unsigned int *pNeeded);
10931093
virtual HRESULT STDMETHODCALLTYPE GetAssemblyModuleList(CLRDATA_ADDRESS assembly, unsigned int count, CLRDATA_ADDRESS modules[], unsigned int *pNeeded);
10941094
virtual HRESULT STDMETHODCALLTYPE GetGCHeapData(struct DacpGcHeapData *data);
10951095
virtual HRESULT STDMETHODCALLTYPE GetGCHeapList(unsigned int count, CLRDATA_ADDRESS heaps[], unsigned int *pNeeded);

src/coreclr/debug/daccess/request.cpp

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1722,11 +1722,11 @@ ClrDataAccess::GetModuleData(CLRDATA_ADDRESS addr, struct DacpModuleData *Module
17221722

17231723
ZeroMemory(ModuleData,sizeof(DacpModuleData));
17241724
ModuleData->Address = addr;
1725-
ModuleData->PEAssembly = HOST_CDADDR(pModule->GetPEAssembly());
1725+
ModuleData->PEAssembly = addr; // Module address in .NET 9+ - correspondingly, SOS-DAC APIs for PE assemblies expect a module address
17261726
COUNT_T metadataSize = 0;
17271727
if (!pModule->GetPEAssembly()->IsDynamic())
17281728
{
1729-
ModuleData->ilBase = (CLRDATA_ADDRESS)(ULONG_PTR) pModule->GetPEAssembly()->GetIJWBase();
1729+
ModuleData->ilBase = TO_CDADDR(dac_cast<TADDR>(pModule->GetPEAssembly()->GetLoadedLayout()->GetBase()));
17301730
}
17311731

17321732
ModuleData->metadataStart = (CLRDATA_ADDRESS)dac_cast<TADDR>(pModule->GetPEAssembly()->GetLoadedMetadata(&metadataSize));
@@ -2125,13 +2125,14 @@ ClrDataAccess::GetFrameName(CLRDATA_ADDRESS vtable, unsigned int count, _Inout_u
21252125
}
21262126

21272127
HRESULT
2128-
ClrDataAccess::GetPEFileName(CLRDATA_ADDRESS addr, unsigned int count, _Inout_updates_z_(count) WCHAR *fileName, unsigned int *pNeeded)
2128+
ClrDataAccess::GetPEFileName(CLRDATA_ADDRESS moduleAddr, unsigned int count, _Inout_updates_z_(count) WCHAR *fileName, unsigned int *pNeeded)
21292129
{
2130-
if (addr == 0 || (fileName == NULL && pNeeded == NULL) || (fileName != NULL && count == 0))
2130+
if (moduleAddr == 0 || (fileName == NULL && pNeeded == NULL) || (fileName != NULL && count == 0))
21312131
return E_INVALIDARG;
21322132

21332133
SOSDacEnter();
2134-
PEAssembly* pPEAssembly = PTR_PEAssembly(TO_TADDR(addr));
2134+
PTR_Module pModule = PTR_Module(TO_TADDR(moduleAddr));
2135+
PEAssembly* pPEAssembly = pModule->GetPEAssembly();
21352136

21362137
// Turn from bytes to wide characters
21372138
if (!pPEAssembly->GetPath().IsEmpty())
@@ -2182,20 +2183,25 @@ ClrDataAccess::GetPEFileName(CLRDATA_ADDRESS addr, unsigned int count, _Inout_up
21822183
}
21832184

21842185
HRESULT
2185-
ClrDataAccess::GetPEFileBase(CLRDATA_ADDRESS addr, CLRDATA_ADDRESS *base)
2186+
ClrDataAccess::GetPEFileBase(CLRDATA_ADDRESS moduleAddr, CLRDATA_ADDRESS *base)
21862187
{
2187-
if (addr == 0 || base == NULL)
2188+
if (moduleAddr == 0 || base == NULL)
21882189
return E_INVALIDARG;
21892190

21902191
SOSDacEnter();
21912192

2192-
PEAssembly* pPEAssembly = PTR_PEAssembly(TO_TADDR(addr));
2193+
PTR_Module pModule = PTR_Module(TO_TADDR(moduleAddr));
2194+
PEAssembly* pPEAssembly = pModule->GetPEAssembly();
21932195

21942196
// More fields later?
21952197
if (!pPEAssembly->IsDynamic())
2196-
*base = TO_CDADDR(pPEAssembly->GetIJWBase());
2198+
{
2199+
*base = TO_CDADDR(dac_cast<TADDR>(pPEAssembly->GetLoadedLayout()->GetBase()));
2200+
}
21972201
else
2202+
{
21982203
*base = (CLRDATA_ADDRESS)NULL;
2204+
}
21992205

22002206
SOSDacLeave();
22012207
return hr;

src/coreclr/debug/daccess/task.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2705,7 +2705,7 @@ ClrDataModule::RequestGetModuleData(
27052705
Module* pModule = GetModule();
27062706
PEAssembly *pPEAssembly = pModule->GetPEAssembly();
27072707

2708-
outGMD->PEAssembly = TO_CDADDR(PTR_HOST_TO_TADDR(pPEAssembly));
2708+
outGMD->PEAssembly = TO_CDADDR(PTR_HOST_TO_TADDR(pModule));
27092709
outGMD->IsDynamic = pModule->IsReflection();
27102710

27112711
if (pPEAssembly != NULL)

src/coreclr/inc/dacprivate.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ struct MSLAYOUT DacpThreadLocalModuleData
230230
struct MSLAYOUT DacpModuleData
231231
{
232232
CLRDATA_ADDRESS Address = 0;
233-
CLRDATA_ADDRESS PEAssembly = 0; // A PEAssembly addr
233+
CLRDATA_ADDRESS PEAssembly = 0; // Actually the module address in .NET 9+
234234
CLRDATA_ADDRESS ilBase = 0;
235235
CLRDATA_ADDRESS metadataStart = 0;
236236
ULONG64 metadataSize = 0;
@@ -986,7 +986,7 @@ struct MSLAYOUT DacpGetModuleData
986986
BOOL IsDynamic = FALSE;
987987
BOOL IsInMemory = FALSE;
988988
BOOL IsFileLayout = FALSE;
989-
CLRDATA_ADDRESS PEAssembly = 0;
989+
CLRDATA_ADDRESS PEAssembly = 0; // Actually the module address in .NET 9+
990990
CLRDATA_ADDRESS LoadedPEAddress = 0;
991991
ULONG64 LoadedPESize = 0;
992992
CLRDATA_ADDRESS InMemoryPdbAddress = 0;

0 commit comments

Comments
 (0)