summaryrefslogtreecommitdiff
path: root/src/debug/di
diff options
context:
space:
mode:
authorJan Vorlicek <janvorli@microsoft.com>2015-03-12 03:04:01 +0100
committerJan Vorlicek <janvorli@microsoft.com>2015-03-12 20:57:27 +0100
commitf8f42933a46499aab91207385fca088185075a01 (patch)
tree22f651073301044d6018f5b97c42939610f6148b /src/debug/di
parent6d1715d68d8ca1f921534897828242bbcc4f00b6 (diff)
downloadcoreclr-f8f42933a46499aab91207385fca088185075a01.tar.gz
coreclr-f8f42933a46499aab91207385fca088185075a01.tar.bz2
coreclr-f8f42933a46499aab91207385fca088185075a01.zip
Add support for exceptions crossing native frames
This change adds support for unwinding exceptions that cross native frames. These are for example exceptions thrown / rethrown from catch blocks. The exceptions are unwound in an interleaved manner in this case. First, all managed frames upto the first native frame are unwound (both the first and second pass), then the native frames are unwound by standard c++ exception handling, then the next block of managed frames is unwound etc. The change also implements RtlCaptureContext and changes the managed exception handling to use it instead of the GetThreadContext. The difference is that the RtlCaptureContext gets context of the caller while the GetThreadContext gets a context somewhere deep in the PAL and so unwinding from such a context to the first managed frame would be walking old stack frames that can already be corrupted. As an additional change, I have fixed a problem that prevented unwinding of assembler functions that use the PROLOG_WITH_TRANSITION_BLOCK macro. The macro was using CFI annotation for the xmm registers and the libunwind doesn't support that. Moreover, the PAL_VirtualUnwind return status was not being checked in the `Thread::VirtualUnwindToFirstManagedCallFrame`, so the failure resulted in an infinite loop in there. Finally, the `debug/di/amd64/floatconversion.S` was including the unixasmmacros.inc using a relative path, now after I've moved it to a different place, I've removed the relative path since the new path is in the include paths.
Diffstat (limited to 'src/debug/di')
-rw-r--r--src/debug/di/amd64/floatconversion.S2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/debug/di/amd64/floatconversion.S b/src/debug/di/amd64/floatconversion.S
index cea9cc97df..ae02176796 100644
--- a/src/debug/di/amd64/floatconversion.S
+++ b/src/debug/di/amd64/floatconversion.S
@@ -4,7 +4,7 @@
//
.intel_syntax noprefix
-#include "../../../vm/amd64/unixasmmacros.inc"
+#include <unixasmmacros.inc>
LEAF_ENTRY FPFillR8, _TEXT
movdqa xmm0, [rdi]