From efa4d1c76cf4357f6bad564be777a3da721e7249 Mon Sep 17 00:00:00 2001 From: Juan Sebastian Hoyos Ayala Date: Fri, 24 Aug 2018 00:50:32 -0700 Subject: [PATCH 1/5] Port PR #17617 from 3.0 --- src/inc/daccess.h | 2 +- src/vm/codeman.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/inc/daccess.h b/src/inc/daccess.h index 50a3b92bc9df..01ed65dc76c4 100644 --- a/src/inc/daccess.h +++ b/src/inc/daccess.h @@ -2414,7 +2414,7 @@ typedef DPTR(RUNTIME_FUNCTION) PTR_RUNTIME_FUNCTION; //---------------------------------------------------------------------------- // // A PCODE is a valid PC/IP value -- a pointer to an instruction, possibly including some processor mode bits. -// (On ARM, for example, a PCODE value should should have the low-order THUMB_CODE bit set if the code should +// (On ARM, for example, a PCODE value should have the low-order THUMB_CODE bit set if the code should // be executed in that mode.) // typedef TADDR PCODE; diff --git a/src/vm/codeman.cpp b/src/vm/codeman.cpp index aa3c1fa1edf5..94e849fd44f4 100644 --- a/src/vm/codeman.cpp +++ b/src/vm/codeman.cpp @@ -4166,7 +4166,7 @@ PCODE ExecutionManager::GetCodeStartAddress(PCODE currentPC) EECodeInfo codeInfo(currentPC); if (!codeInfo.IsValid()) return NULL; - return (PCODE)codeInfo.GetStartAddress(); + return PINSTRToPCODE(codeInfo.GetStartAddress()); } //************************************************************************** From 12e530cb303515d0dd69f62d465dfcdffe0fc013 Mon Sep 17 00:00:00 2001 From: Juan Sebastian Hoyos Ayala Date: Fri, 24 Aug 2018 00:55:55 -0700 Subject: [PATCH 2/5] Port PR #17879 from 3.0 --- src/vm/comdelegate.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/vm/comdelegate.cpp b/src/vm/comdelegate.cpp index 173a8fe6d155..b8b34053decc 100644 --- a/src/vm/comdelegate.cpp +++ b/src/vm/comdelegate.cpp @@ -2448,6 +2448,12 @@ FCIMPL1(PCODE, COMDelegate::GetMulticastInvoke, Object* refThisIn) //Label_nextDelegate: pCode->EmitLabel(nextDelegate); +#ifdef DEBUGGING_SUPPORTED + pCode->EmitLoadThis(); + pCode->EmitLDLOC(dwLoopCounterNum); + pCode->EmitCALL(METHOD__STUBHELPERS__MULTICAST_DEBUGGER_TRACE_HELPER, 2, 0); +#endif // DEBUGGING_SUPPORTED + // compare LoopCounter with InvocationCount. If equal then branch to Label_endOfMethod pCode->EmitLDLOC(dwLoopCounterNum); pCode->EmitLDLOC(dwInvocationCountNum); @@ -2477,11 +2483,6 @@ FCIMPL1(PCODE, COMDelegate::GetMulticastInvoke, Object* refThisIn) pCode->EmitADD(); pCode->EmitSTLOC(dwLoopCounterNum); -#ifdef DEBUGGING_SUPPORTED - pCode->EmitLoadThis(); - pCode->EmitLDLOC(dwLoopCounterNum); - pCode->EmitCALL(METHOD__STUBHELPERS__MULTICAST_DEBUGGER_TRACE_HELPER, 2, 0); -#endif // DEBUGGING_SUPPORTED // branch to next delegate pCode->EmitBR(nextDelegate); From 6b1ba127e65dac461dc7cb61f6c4b402d0dcbebd Mon Sep 17 00:00:00 2001 From: Juan Sebastian Hoyos Ayala Date: Fri, 24 Aug 2018 01:05:02 -0700 Subject: [PATCH 3/5] Port PR #17990 from 3.0 --- src/debug/ee/controller.cpp | 6 +++--- src/debug/ee/frameinfo.cpp | 2 +- src/vm/stubmgr.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/debug/ee/controller.cpp b/src/debug/ee/controller.cpp index b6c20fd4d640..76c76996e0ae 100644 --- a/src/debug/ee/controller.cpp +++ b/src/debug/ee/controller.cpp @@ -6319,8 +6319,8 @@ void DebuggerStepper::TrapStepOut(ControllerStackInfo *info, bool fForceTraditio _ASSERTE(IsCloserToLeaf(dbgLastFP, info->m_activeFrame.fp)); #endif -#ifdef FEATURE_STUBS_AS_IL - if (info->m_activeFrame.md->IsILStub() && info->m_activeFrame.md->AsDynamicMethodDesc()->IsMulticastStub()) +#ifdef FEATURE_MULTICASTSTUB_AS_IL + if (info->m_activeFrame.md != nullptr && info->m_activeFrame.md->IsILStub() && info->m_activeFrame.md->AsDynamicMethodDesc()->IsMulticastStub()) { LOG((LF_CORDB, LL_INFO10000, "DS::TSO: multicast frame.\n")); @@ -6347,7 +6347,7 @@ void DebuggerStepper::TrapStepOut(ControllerStackInfo *info, bool fForceTraditio break; } else -#endif // FEATURE_STUBS_AS_IL +#endif // FEATURE_MULTICASTSTUB_AS_IL if (info->m_activeFrame.managed) { LOG((LF_CORDB, LL_INFO10000, diff --git a/src/debug/ee/frameinfo.cpp b/src/debug/ee/frameinfo.cpp index fb9ea886bfbe..0387ca921701 100644 --- a/src/debug/ee/frameinfo.cpp +++ b/src/debug/ee/frameinfo.cpp @@ -1563,7 +1563,7 @@ StackWalkAction DebuggerWalkStackProc(CrawlFrame *pCF, void *data) // The only exception is dynamic methods. We want to report them when SIS is turned on. if ((md != NULL) && md->IsILStub() && pCF->IsFrameless()) { -#ifdef FEATURE_STUBS_AS_IL +#ifdef FEATURE_MULTICASTSTUB_AS_IL if(md->AsDynamicMethodDesc()->IsMulticastStub()) { use = true; diff --git a/src/vm/stubmgr.h b/src/vm/stubmgr.h index b18520a1d165..9685307403ea 100644 --- a/src/vm/stubmgr.h +++ b/src/vm/stubmgr.h @@ -976,7 +976,7 @@ class StubManagerHelpers Thread::VirtualUnwindCallFrame(&context); Thread::VirtualUnwindCallFrame(&context); - return pContext->Rip; + return context.Rip; #elif defined(_TARGET_ARM_) return *((PCODE *)pContext->R11 + 1); #elif defined(_TARGET_ARM64_) From 6bd7a4100cb1ff9dacb72816700da92f37d6d522 Mon Sep 17 00:00:00 2001 From: Juan Sebastian Hoyos Ayala Date: Fri, 24 Aug 2018 01:10:05 -0700 Subject: [PATCH 4/5] Port PR #18129 from 3.0 --- src/debug/ee/debugger.cpp | 7 ++----- src/debug/ee/functioninfo.cpp | 3 ++- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/debug/ee/debugger.cpp b/src/debug/ee/debugger.cpp index 1e69d2b1a9dd..25c047d65657 100644 --- a/src/debug/ee/debugger.cpp +++ b/src/debug/ee/debugger.cpp @@ -3221,10 +3221,7 @@ CodeRegionInfo CodeRegionInfo::GetCodeRegionInfo(DebuggerJitInfo *dji, MethodDes if (addr) { - PCODE pCode = (PCODE)dac_cast(addr); -#ifdef _TARGET_ARM_ - pCode |= THUMB_CODE; -#endif + PCODE pCode = PINSTRToPCODE(dac_cast(addr)); codeRegionInfo.InitializeFromStartAddress(pCode); } @@ -11118,7 +11115,7 @@ bool Debugger::HandleIPCEvent(DebuggerIPCEvent * pEvent) // In the EnC case, if we look for an older version, we need to find the DJI by starting // address, rather than just by MethodDesc. In the case of generics, we may need to create a DJI, so we pDJI = pDMI->FindOrCreateInitAndAddJitInfo(pEvent->SetIP.vmMethodDesc.GetRawPtr(), - (TADDR)pEvent->SetIP.startAddress); + PINSTRToPCODE((TADDR)pEvent->SetIP.startAddress)); } if ((pDJI != NULL) && (pThread != NULL) && (pModule != NULL)) diff --git a/src/debug/ee/functioninfo.cpp b/src/debug/ee/functioninfo.cpp index d4521110ba63..795e86dc95ed 100644 --- a/src/debug/ee/functioninfo.cpp +++ b/src/debug/ee/functioninfo.cpp @@ -1228,7 +1228,7 @@ void DebuggerJitInfo::Init(TADDR newAddress) this->m_addrOfCode = (ULONG_PTR)PTR_TO_CORDB_ADDRESS((BYTE*) newAddress); this->m_jitComplete = true; - this->m_codeRegionInfo.InitializeFromStartAddress((PCODE)this->m_addrOfCode); + this->m_codeRegionInfo.InitializeFromStartAddress(PINSTRToPCODE((TADDR)this->m_addrOfCode)); this->m_sizeOfCode = this->m_codeRegionInfo.getSizeOfTotalCode(); this->m_encVersion = this->m_methodInfo->GetCurrentEnCVersion(); @@ -1586,6 +1586,7 @@ DebuggerJitInfo *DebuggerMethodInfo::FindOrCreateInitAndAddJitInfo(MethodDesc* f // // We haven't got the lock yet so we'll repeat this lookup once // we've taken the lock. + ARM_ONLY(_ASSERTE((startAddr & THUMB_CODE) == 1)); DebuggerJitInfo * pResult = FindJitInfo(fd, startAddr); if (pResult != NULL) { From 0fbdc72416979d1cde03c5fadb991a25d8055c0f Mon Sep 17 00:00:00 2001 From: Juan Sebastian Hoyos Ayala Date: Fri, 24 Aug 2018 01:12:29 -0700 Subject: [PATCH 5/5] Port PR #18247 from 3.0 --- src/debug/ee/debugger.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/debug/ee/debugger.h b/src/debug/ee/debugger.h index f3206f1f3563..ec973243553a 100644 --- a/src/debug/ee/debugger.h +++ b/src/debug/ee/debugger.h @@ -1324,7 +1324,7 @@ class CodeRegionInfo { LIMITED_METHOD_CONTRACT; - PCODE address = (PCODE)addr; + PCODE address = PINSTRToPCODE((TADDR)addr); if ((address >= m_addrOfHotCode) && (address < m_addrOfHotCode + m_sizeOfHotCode)) @@ -1346,7 +1346,7 @@ class CodeRegionInfo { LIMITED_METHOD_CONTRACT; - PCODE address = (PCODE)addr; + PCODE address = PINSTRToPCODE((TADDR)addr); return (((address >= m_addrOfHotCode) && (address < m_addrOfHotCode + m_sizeOfHotCode)) || ((address >= m_addrOfColdCode) &&