diff options
author | Jonghyun Park <parjong@gmail.com> | 2017-09-19 17:17:10 +0900 |
---|---|---|
committer | Jan Vorlicek <janvorli@microsoft.com> | 2017-09-19 10:17:10 +0200 |
commit | 4268d228fb794f4aa5b803c3e89efbcb6aeba540 (patch) | |
tree | b4e8dba4bd40a9823c9b9c6bd5ad70010b4e8648 /src/vm | |
parent | 5e93665a0d9e2a5eaa07a73feb27eba0aa008f2c (diff) | |
download | coreclr-4268d228fb794f4aa5b803c3e89efbcb6aeba540.tar.gz coreclr-4268d228fb794f4aa5b803c3e89efbcb6aeba540.tar.bz2 coreclr-4268d228fb794f4aa5b803c3e89efbcb6aeba540.zip |
Disable VSD Stub Kind Prediction on H/W Exception (#14051)
* Disable VSD Stub Kind Prediction on H/W Exception
* Add a comment on a false argument
* Use BOOL (instead of bool) for consistency
* Replace remaining bool/true/false with BOOL/TRUE/FALSE
Diffstat (limited to 'src/vm')
-rw-r--r-- | src/vm/exceptionhandling.cpp | 2 | ||||
-rw-r--r-- | src/vm/virtualcallstub.cpp | 8 | ||||
-rw-r--r-- | src/vm/virtualcallstub.h | 7 |
3 files changed, 9 insertions, 8 deletions
diff --git a/src/vm/exceptionhandling.cpp b/src/vm/exceptionhandling.cpp index a52ccd7c2a..811237981c 100644 --- a/src/vm/exceptionhandling.cpp +++ b/src/vm/exceptionhandling.cpp @@ -5156,7 +5156,7 @@ static BOOL IsIPinVirtualStub(PCODE f_IP) } VirtualCallStubManager::StubKind sk; - VirtualCallStubManager::FindStubManager(f_IP, &sk); + VirtualCallStubManager::FindStubManager(f_IP, &sk, FALSE /* usePredictStubKind */); if (sk == VirtualCallStubManager::SK_DISPATCH) { diff --git a/src/vm/virtualcallstub.cpp b/src/vm/virtualcallstub.cpp index 2e94a16666..8040cbf8f2 100644 --- a/src/vm/virtualcallstub.cpp +++ b/src/vm/virtualcallstub.cpp @@ -974,7 +974,7 @@ void VirtualCallStubManager::Reclaim() //---------------------------------------------------------------------------- /* static */ -VirtualCallStubManager *VirtualCallStubManager::FindStubManager(PCODE stubAddress, StubKind* wbStubKind) +VirtualCallStubManager *VirtualCallStubManager::FindStubManager(PCODE stubAddress, StubKind* wbStubKind, BOOL usePredictStubKind) { CONTRACTL { NOTHROW; @@ -999,7 +999,7 @@ VirtualCallStubManager *VirtualCallStubManager::FindStubManager(PCODE stubAddres // VirtualCallStubManager::isDispatchingStub // CONTRACT_VIOLATION(SOToleranceViolation); - kind = pCur->getStubKind(stubAddress); + kind = pCur->getStubKind(stubAddress, usePredictStubKind); if (kind != SK_UNKNOWN) { if (wbStubKind) @@ -1011,7 +1011,7 @@ VirtualCallStubManager *VirtualCallStubManager::FindStubManager(PCODE stubAddres // See if we are managed by the shared domain // pCur = SharedDomain::GetDomain()->GetLoaderAllocator()->GetVirtualCallStubManager(); - kind = pCur->getStubKind(stubAddress); + kind = pCur->getStubKind(stubAddress, usePredictStubKind); if (kind != SK_UNKNOWN) { if (wbStubKind) @@ -1026,7 +1026,7 @@ VirtualCallStubManager *VirtualCallStubManager::FindStubManager(PCODE stubAddres { _ASSERTE(pCur != NULL); - kind = pCur->getStubKind(stubAddress); + kind = pCur->getStubKind(stubAddress, usePredictStubKind); if (kind != SK_UNKNOWN) { if (wbStubKind) diff --git a/src/vm/virtualcallstub.h b/src/vm/virtualcallstub.h index 7b6fedf2b2..b8984eab3c 100644 --- a/src/vm/virtualcallstub.h +++ b/src/vm/virtualcallstub.h @@ -317,7 +317,7 @@ public: /* know thine own stubs. It is possible that when multiple virtualcallstub managers are built that these may need to become non-static, and the callers modified accordingly */ - StubKind getStubKind(PCODE stubStartAddress) + StubKind getStubKind(PCODE stubStartAddress, BOOL usePredictStubKind = TRUE) { WRAPPER_NO_CONTRACT; SUPPORTS_DAC; @@ -329,7 +329,7 @@ public: // Rather than calling IsInRange(stubStartAddress) for each possible stub kind // we can peek at the assembly code and predict which kind of a stub we have - StubKind predictedKind = predictStubKind(stubStartAddress); + StubKind predictedKind = (usePredictStubKind) ? predictStubKind(stubStartAddress) : SK_UNKNOWN; if (predictedKind == SK_DISPATCH) { @@ -732,7 +732,8 @@ private: public: // Given a stub address, find the VCSManager that owns it. static VirtualCallStubManager *FindStubManager(PCODE addr, - StubKind* wbStubKind = NULL); + StubKind* wbStubKind = NULL, + BOOL usePredictStubKind = TRUE); #ifndef DACCESS_COMPILE // insert a linked list of indirection cells at the beginning of m_RecycledIndCellList |