summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Vorlicek <janvorli@microsoft.com>2016-03-23 01:24:24 +0100
committerJan Vorlicek <janvorli@microsoft.com>2016-03-23 01:24:24 +0100
commit3c03a0f65c23565a1799c138470d952a039c142e (patch)
treef4549e11bbe0d0325e27d40d948c67001c3d3366
parentf755ab7fadd9dc53e66bd86ce8909954b6d72485 (diff)
downloadcoreclr-3c03a0f65c23565a1799c138470d952a039c142e.tar.gz
coreclr-3c03a0f65c23565a1799c138470d952a039c142e.tar.bz2
coreclr-3c03a0f65c23565a1799c138470d952a039c142e.zip
Fix x86 exception stack unwinding issue
This change fixes x86 exception stack unwinding issue in release build when the function epilog contains a call to _EH_epilog3_catch_GS. This function has repne prefix on a call and jmp instructions and that prevented the instruction interpreter code from entering the call, which is vital for correct stack unwinding.
-rw-r--r--src/vm/i386/gmsx86.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/vm/i386/gmsx86.cpp b/src/vm/i386/gmsx86.cpp
index f0ba3ca214..97557c80c7 100644
--- a/src/vm/i386/gmsx86.cpp
+++ b/src/vm/i386/gmsx86.cpp
@@ -114,6 +114,11 @@ static bool shouldEnterCall(PTR_BYTE ip) {
// just work.
for (int i = 0; i < 48; i++) {
switch(*ip) {
+ case 0xF2: // repne
+ case 0xF3: // repe
+ ip++;
+ break;
+
case 0x68: // push 0xXXXXXXXX
ip += 5;