diff options
author | Jan Vorlicek <janvorli@microsoft.com> | 2016-03-23 01:24:24 +0100 |
---|---|---|
committer | Jan Vorlicek <janvorli@microsoft.com> | 2016-03-23 01:24:24 +0100 |
commit | 3c03a0f65c23565a1799c138470d952a039c142e (patch) | |
tree | f4549e11bbe0d0325e27d40d948c67001c3d3366 | |
parent | f755ab7fadd9dc53e66bd86ce8909954b6d72485 (diff) | |
download | coreclr-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.cpp | 5 |
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; |