diff --git a/src/coreclr/debug/daccess/dacfn.cpp b/src/coreclr/debug/daccess/dacfn.cpp index 8077463c8e2347..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 @@ -45,6 +37,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) @@ -1134,22 +1133,17 @@ DacGetTargetAddrForHostInteriorAddr(LPCVOID ptr, bool throwEx) #endif // !_PREFIX_ } -PWSTR DacGetVtNameW(TADDR targetVtable) +PWSTR DacGetFrameNameW(TADDR frameIdentifier) { 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; - } + FrameIdentifier frameId = static_cast(frameIdentifier); - targ++; + if (!(frameId == FrameIdentifier::None || frameId >= FrameIdentifier::CountPlusOne)) + { + pszRet = (PWSTR) g_dacFrameStrings[(int)frameId - 1]; } + return pszRet; } 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..2228a49e31226c 100644 --- a/src/coreclr/inc/daccess.h +++ b/src/coreclr/inc/daccess.h @@ -699,7 +699,7 @@ 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 bool DacEnumMemoryRegion(TADDR addr, TSIZE_T size, bool fExpectSuccess = true);