diff options
author | Konstantin Baladurin <k.baladurin@samsung.com> | 2019-02-11 16:11:09 +0300 |
---|---|---|
committer | Alexander Soldatov/AI Ecosystem Lab /SRR/Staff Engineer/삼성전자 <soldatov.a@samsung.com> | 2019-02-14 20:24:48 +0300 |
commit | 1eec27203122b4deb3ce4f28f2dde37124f05e10 (patch) | |
tree | 86f20161c191b385efd50ba51ce70d5fd27ec159 | |
parent | 201263c27e970e9d2e50c6bccdc82ecdab2893e0 (diff) | |
download | coreclr-1eec27203122b4deb3ce4f28f2dde37124f05e10.tar.gz coreclr-1eec27203122b4deb3ce4f28f2dde37124f05e10.tar.bz2 coreclr-1eec27203122b4deb3ce4f28f2dde37124f05e10.zip |
prestub: fix ExternalMethodFixupWorkersubmit/tizen/20190419.143735submit/tizen/20190419.042330submit/tizen/20190416.152950submit/tizen/20190410.105333submit/tizen/20190405.141848submit/tizen/20190327.110559submit/tizen/20190312.130143submit/tizen/20190312.123654submit/tizen/20190312.102237accepted/tizen/unified/20190422.045933
Use DispatchToken::CreateDispatchToken to get token to resolve
virtual method in case of non interface MT.
-rw-r--r-- | src/vm/prestub.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/vm/prestub.cpp b/src/vm/prestub.cpp index 5c08becafa..c0688931ba 100644 --- a/src/vm/prestub.cpp +++ b/src/vm/prestub.cpp @@ -2356,7 +2356,11 @@ EXTERN_C PCODE STDCALL ExternalMethodFixupWorker(TransitionBlock * pTransitionBl DispatchToken token; if (pMT->IsInterface() || MethodTable::VTableIndir_t::isRelative) { - token = pMT->GetLoaderAllocator()->GetDispatchToken(pMT->GetTypeID(), slot); + if (pMT->IsInterface()) + token = pMT->GetLoaderAllocator()->GetDispatchToken(pMT->GetTypeID(), slot); + else + token = DispatchToken::CreateDispatchToken(slot); + StubCallSite callSite(pIndirection, pEMFrame->GetReturnAddress()); pCode = pMgr->ResolveWorker(&callSite, protectedObj, token, VirtualCallStubManager::SK_LOOKUP); } |