From 0414d77f4796baf246bce548d8e4bfd9b9daa482 Mon Sep 17 00:00:00 2001 From: Sasha Semennikov Date: Tue, 2 Aug 2016 16:45:21 -0700 Subject: For helper method frame DAC doesn't read register pointers. So set them to NULL to not user "wrong" data. Moved context pointers NULL assignment to gmsamd64.cpp Squash commits --- src/debug/di/divalue.cpp | 7 +++++-- src/vm/amd64/cgenamd64.cpp | 6 ++++++ src/vm/amd64/gmsamd64.cpp | 5 +++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/debug/di/divalue.cpp b/src/debug/di/divalue.cpp index b5ec8ac3f5..50ecd68aa9 100644 --- a/src/debug/di/divalue.cpp +++ b/src/debug/di/divalue.cpp @@ -1324,8 +1324,11 @@ HRESULT CordbReferenceValue::BuildFromGCHandle( NULL, // EnregisteredValueHome * pRemoteRegAddr, &pRefValue); - pRefValue->QueryInterface(__uuidof(ICorDebugReferenceValue), (void**)pOutRef); - + if (SUCCEEDED(hr)) + { + pRefValue->QueryInterface(__uuidof(ICorDebugReferenceValue), (void**)pOutRef); + } + return hr; } diff --git a/src/vm/amd64/cgenamd64.cpp b/src/vm/amd64/cgenamd64.cpp index d5698005be..91af0864f8 100644 --- a/src/vm/amd64/cgenamd64.cpp +++ b/src/vm/amd64/cgenamd64.cpp @@ -193,6 +193,12 @@ void HelperMethodFrame::UpdateRegDisplay(const PREGDISPLAY pRD) ENUM_CALLEE_SAVED_REGISTERS(); #undef CALLEE_SAVED_REGISTER +#define CALLEE_SAVED_REGISTER(regname) pRD->pCurrentContextPointers->regname = pUnwoundState->m_Ptrs.p##regname; + ENUM_CALLEE_SAVED_REGISTERS(); +#undef CALLEE_SAVED_REGISTER + + ClearRegDisplayArgumentAndScratchRegisters(pRD); + return; } #endif // DACCESS_COMPILE diff --git a/src/vm/amd64/gmsamd64.cpp b/src/vm/amd64/gmsamd64.cpp index b6e596e7cf..222ee7381c 100644 --- a/src/vm/amd64/gmsamd64.cpp +++ b/src/vm/amd64/gmsamd64.cpp @@ -124,6 +124,11 @@ void LazyMachState::unwindLazyState(LazyMachState* baseState, ENUM_CALLEE_SAVED_REGISTERS(); #undef CALLEE_SAVED_REGISTER + // Since we don't have context pointers in this case, just assing them to NULL. +#define CALLEE_SAVED_REGISTER(regname) unwoundState->m_Ptrs.p##regname = NULL; + ENUM_CALLEE_SAVED_REGISTERS(); +#undef CALLEE_SAVED_REGISTER + #else // !DACCESS_COMPILE #define CALLEE_SAVED_REGISTER(regname) unwoundState->m_Ptrs.p##regname = PTR_ULONG64(nonVolRegPtrs.regname); -- cgit v1.2.3