From 7dc77c053988fcc2a98fd17659d79bb59f2431ef Mon Sep 17 00:00:00 2001 From: Max Charlamb Date: Wed, 12 Feb 2025 11:34:13 -0500 Subject: [PATCH 1/3] fix ClrDataAccess::GetFrameName for FrameIdentifier change --- src/coreclr/debug/daccess/dacfn.cpp | 21 +++++++++++++++++++++ src/coreclr/debug/daccess/request.cpp | 4 ++-- src/coreclr/inc/daccess.h | 1 + 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/coreclr/debug/daccess/dacfn.cpp b/src/coreclr/debug/daccess/dacfn.cpp index 8077463c8e2347..d2d69a4bc543bf 100644 --- a/src/coreclr/debug/daccess/dacfn.cpp +++ b/src/coreclr/debug/daccess/dacfn.cpp @@ -32,6 +32,13 @@ const WCHAR *g_dacVtStrings[] = #undef VPTR_CLASS }; +const WCHAR *g_dacFrameStrings[] = +{ +#define FRAME_TYPE_NAME(name) W(#name), +#include "FrameTypes.h" +#undef FRAME_TYPE_NAME +}; + DacHostVtPtrs g_dacHostVtPtrs; HRESULT @@ -1153,6 +1160,20 @@ PWSTR DacGetVtNameW(TADDR targetVtable) return pszRet; } +PWSTR DacGetFrameNameW(TADDR frameIdentifier) +{ + PWSTR pszRet = NULL; + + FrameIdentifier frameId = static_cast(frameIdentifier); + + if (!(frameId == FrameIdentifier::None || frameId >= FrameIdentifier::CountPlusOne)) + { + pszRet = (PWSTR) g_dacFrameStrings[(int)frameId - 1]; + } + + return pszRet; +} + TADDR DacGetTargetVtForHostVt(LPCVOID vtHost, bool throwEx) { diff --git a/src/coreclr/debug/daccess/request.cpp b/src/coreclr/debug/daccess/request.cpp index 9c6669b0810f76..3f600235058f58 100644 --- a/src/coreclr/debug/daccess/request.cpp +++ b/src/coreclr/debug/daccess/request.cpp @@ -2143,7 +2143,7 @@ ClrDataAccess::GetFrameName(CLRDATA_ADDRESS vtable, unsigned int count, _Inout_u SOSDacEnter(); - PWSTR pszName = DacGetVtNameW(CLRDATA_ADDRESS_TO_TADDR(vtable)); + PWSTR pszName = DacGetFrameNameW(CLRDATA_ADDRESS_TO_TADDR(vtable)); if (pszName == NULL) { hr = E_INVALIDARG; @@ -2921,7 +2921,7 @@ ClrDataAccess::GetGCDynamicAdaptationMode(int* pDynamicAdaptationMode) { *pDynamicAdaptationMode = -1; hr = S_FALSE; - } + } SOSDacLeave(); return hr; } diff --git a/src/coreclr/inc/daccess.h b/src/coreclr/inc/daccess.h index ca3cb5c004c327..acc62cfdaff020 100644 --- a/src/coreclr/inc/daccess.h +++ b/src/coreclr/inc/daccess.h @@ -700,6 +700,7 @@ TADDR DacGetTargetAddrForHostAddr(LPCVOID ptr, bool throwEx); TADDR DacGetTargetAddrForHostInteriorAddr(LPCVOID ptr, bool throwEx); TADDR DacGetTargetVtForHostVt(LPCVOID vtHost, bool throwEx); PWSTR DacGetVtNameW(TADDR targetVtable); +PWSTR DacGetFrameNameW(TADDR frameIdentifier); // Report a region of memory to the debugger bool DacEnumMemoryRegion(TADDR addr, TSIZE_T size, bool fExpectSuccess = true); From 7e2c0980f196284f9b28a75ffded72edc3ad7053 Mon Sep 17 00:00:00 2001 From: Max Charlamb Date: Wed, 12 Feb 2025 11:49:29 -0500 Subject: [PATCH 2/3] change layout --- src/coreclr/debug/daccess/dacfn.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/coreclr/debug/daccess/dacfn.cpp b/src/coreclr/debug/daccess/dacfn.cpp index d2d69a4bc543bf..57152474e202bf 100644 --- a/src/coreclr/debug/daccess/dacfn.cpp +++ b/src/coreclr/debug/daccess/dacfn.cpp @@ -32,13 +32,6 @@ const WCHAR *g_dacVtStrings[] = #undef VPTR_CLASS }; -const WCHAR *g_dacFrameStrings[] = -{ -#define FRAME_TYPE_NAME(name) W(#name), -#include "FrameTypes.h" -#undef FRAME_TYPE_NAME -}; - DacHostVtPtrs g_dacHostVtPtrs; HRESULT @@ -52,6 +45,13 @@ DacGetHostVtPtrs(void) return S_OK; } +const WCHAR *g_dacFrameStrings[] = +{ +#define FRAME_TYPE_NAME(name) W(#name), +#include "FrameTypes.h" +#undef FRAME_TYPE_NAME +}; + bool DacExceptionFilter(Exception* ex, ClrDataAccess* access, HRESULT* status) From b1570a6d459a5535f2b8aadd99b3db1e6ceb82e9 Mon Sep 17 00:00:00 2001 From: Max Charlamb Date: Wed, 12 Feb 2025 16:33:29 -0500 Subject: [PATCH 3/3] remove g_dacVtStrings and DacGetVtNameW which are no longer used --- src/coreclr/debug/daccess/dacfn.cpp | 27 --------------------------- src/coreclr/inc/daccess.h | 1 - 2 files changed, 28 deletions(-) diff --git a/src/coreclr/debug/daccess/dacfn.cpp b/src/coreclr/debug/daccess/dacfn.cpp index 57152474e202bf..a5177ef3ca4f09 100644 --- a/src/coreclr/debug/daccess/dacfn.cpp +++ b/src/coreclr/debug/daccess/dacfn.cpp @@ -24,14 +24,6 @@ struct DacHostVtPtrs #undef VPTR_CLASS }; - -const WCHAR *g_dacVtStrings[] = -{ -#define VPTR_CLASS(name) W(#name), -#include -#undef VPTR_CLASS -}; - DacHostVtPtrs g_dacHostVtPtrs; HRESULT @@ -1141,25 +1133,6 @@ DacGetTargetAddrForHostInteriorAddr(LPCVOID ptr, bool throwEx) #endif // !_PREFIX_ } -PWSTR DacGetVtNameW(TADDR targetVtable) -{ - PWSTR pszRet = NULL; - - TADDR *targ = &DacGlobalValues()->EEJitManager__vtAddr; - TADDR *targStart = targ; - for (ULONG i = 0; i < sizeof(g_dacHostVtPtrs) / sizeof(PVOID); i++) - { - if (targetVtable == (*targ)) - { - pszRet = (PWSTR) *(g_dacVtStrings + (targ - targStart)); - break; - } - - targ++; - } - return pszRet; -} - PWSTR DacGetFrameNameW(TADDR frameIdentifier) { PWSTR pszRet = NULL; diff --git a/src/coreclr/inc/daccess.h b/src/coreclr/inc/daccess.h index acc62cfdaff020..2228a49e31226c 100644 --- a/src/coreclr/inc/daccess.h +++ b/src/coreclr/inc/daccess.h @@ -699,7 +699,6 @@ PWSTR DacInstantiateStringW(TADDR addr, ULONG32 maxChars, bool throwEx); TADDR DacGetTargetAddrForHostAddr(LPCVOID ptr, bool throwEx); TADDR DacGetTargetAddrForHostInteriorAddr(LPCVOID ptr, bool throwEx); TADDR DacGetTargetVtForHostVt(LPCVOID vtHost, bool throwEx); -PWSTR DacGetVtNameW(TADDR targetVtable); PWSTR DacGetFrameNameW(TADDR frameIdentifier); // Report a region of memory to the debugger