diff options
author | Rahul Kumar <rahku@microsoft.com> | 2016-08-23 11:26:50 -0700 |
---|---|---|
committer | Rahul Kumar <rahku@microsoft.com> | 2016-08-29 14:01:04 -0700 |
commit | cd43ac9480985c6a08a127ad3ae43fd0e62d6d9c (patch) | |
tree | bc59d3e27a1c5b21f2c60f2ddd3b418faf52ff35 /src/vm/frames.cpp | |
parent | 66caba84fc2319f9741598a4e36034323f33f4a4 (diff) | |
download | coreclr-cd43ac9480985c6a08a127ad3ae43fd0e62d6d9c.tar.gz coreclr-cd43ac9480985c6a08a127ad3ae43fd0e62d6d9c.tar.bz2 coreclr-cd43ac9480985c6a08a127ad3ae43fd0e62d6d9c.zip |
Enable return address hijacking for arm64.
And also fixes a bug in HijackFrame::GCScanRoots
Diffstat (limited to 'src/vm/frames.cpp')
-rw-r--r-- | src/vm/frames.cpp | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/vm/frames.cpp b/src/vm/frames.cpp index a0410960f9..ec7e7be63c 100644 --- a/src/vm/frames.cpp +++ b/src/vm/frames.cpp @@ -1142,14 +1142,14 @@ void HijackFrame::GcScanRoots(promote_func *fn, ScanContext* sc) _ASSERTE(IsValidReturnKind(returnKind)); int regNo = 0; - bool moreRegisters; + bool moreRegisters = false; do { - moreRegisters = false; + ReturnKind r = ExtractRegReturnKind(returnKind, regNo, moreRegisters); PTR_PTR_Object objPtr = dac_cast<PTR_PTR_Object>(&m_Args->ReturnValue[regNo]); - switch (returnKind) + switch (r) { #ifdef _TARGET_X86_ case RT_Float: // Fall through @@ -1173,14 +1173,10 @@ void HijackFrame::GcScanRoots(promote_func *fn, ScanContext* sc) break; default: -#ifdef FEATURE_MULTIREG_RETURN - moreRegisters = true; - regNo++; - returnKind = ExtractRegReturnKind(returnKind, regNo); -#else _ASSERTE(!"Impossible two bit encoding"); -#endif } + + regNo++; } while (moreRegisters); } |