From 0f81ad3359b817ba0735db78cef1bd2fcab555a9 Mon Sep 17 00:00:00 2001 From: Kamil Rytarowski Date: Fri, 29 Apr 2016 23:35:19 +0200 Subject: Treat NetBSD like FreeBSD and OSX in PAL_VirtualUnwind() (#4551) This fixes hangs in the runtime observed while running CoreFX managed tests. Thanks @janvorli and @myungjoo Fix #4380 --- src/pal/src/exception/seh-unwind.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/pal/src/exception/seh-unwind.cpp') diff --git a/src/pal/src/exception/seh-unwind.cpp b/src/pal/src/exception/seh-unwind.cpp index dbe80b12cc..f6dd1d9b67 100644 --- a/src/pal/src/exception/seh-unwind.cpp +++ b/src/pal/src/exception/seh-unwind.cpp @@ -229,7 +229,7 @@ BOOL PAL_VirtualUnwind(CONTEXT *context, KNONVOLATILE_CONTEXT_POINTERS *contextP unw_context_t unwContext; unw_cursor_t cursor; -#if defined(__APPLE__) || defined(__FreeBSD__) || defined(_ARM64_) || defined(_ARM_) +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(_ARM64_) || defined(_ARM_) DWORD64 curPc; #endif @@ -266,8 +266,8 @@ BOOL PAL_VirtualUnwind(CONTEXT *context, KNONVOLATILE_CONTEXT_POINTERS *contextP WinContextToUnwindCursor(context, &cursor); #endif -#if defined(__APPLE__) || defined(__FreeBSD__) || defined(_ARM64_) || defined(_ARM_) - // OSX and FreeBSD appear to do two different things when unwinding +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(_ARM64_) || defined(_ARM_) + // FreeBSD, NetBSD and OSX appear to do two different things when unwinding // 1: If it reaches where it cannot unwind anymore, say a // managed frame. It wil return 0, but also update the $pc // 2: If it unwinds all the way to _start it will return @@ -299,7 +299,7 @@ BOOL PAL_VirtualUnwind(CONTEXT *context, KNONVOLATILE_CONTEXT_POINTERS *contextP // Update the passed in windows context to reflect the unwind // UnwindContextToWinContext(&cursor, context); -#if defined(__APPLE__) || defined(__FreeBSD__) || defined(_ARM64_) || defined(_ARM_) +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(_ARM64_) || defined(_ARM_) if (st == 0 && CONTEXTGetPC(context) == curPc) { CONTEXTSetPC(context, 0); -- cgit v1.2.3