Use _setjmp and _longjmp on MacOS.
llvm-svn: 101400
diff --git a/vmkit/include/mvm/Threads/Thread.h b/vmkit/include/mvm/Threads/Thread.h
index 5e15789..9b96b35 100644
--- a/vmkit/include/mvm/Threads/Thread.h
+++ b/vmkit/include/mvm/Threads/Thread.h
@@ -17,16 +17,20 @@
#include "types.h"
#ifdef RUNTIME_DWARF_EXCEPTIONS
-#define TRY try
-#define CATCH catch(...)
-#define IGNORE catch(...) { mvm::Thread::get()->clearException(); }
-#define END_CATCH
+ #define TRY try
+ #define CATCH catch(...)
+ #define IGNORE catch(...) { mvm::Thread::get()->clearException(); }
+ #define END_CATCH
#else
-#include <csetjmp>
-#define TRY { mvm::ExceptionBuffer __buffer__; if (!setjmp(__buffer__.buffer))
-#define CATCH else
-#define IGNORE else { mvm::Thread::get()->clearException(); }}
-#define END_CATCH }
+ #include <csetjmp>
+ #if defined(__MACH__)
+ #define TRY { mvm::ExceptionBuffer __buffer__; if (!_setjmp(__buffer__.buffer))
+ #else
+ #define TRY { mvm::ExceptionBuffer __buffer__; if (!setjmp(__buffer__.buffer))
+ #endif
+ #define CATCH else
+ #define IGNORE else { mvm::Thread::get()->clearException(); }}
+ #define END_CATCH }
#endif
namespace mvm {
diff --git a/vmkit/lib/Mvm/CommonThread/ctthread.cpp b/vmkit/lib/Mvm/CommonThread/ctthread.cpp
index a1b51db..e8ef971 100644
--- a/vmkit/lib/Mvm/CommonThread/ctthread.cpp
+++ b/vmkit/lib/Mvm/CommonThread/ctthread.cpp
@@ -90,8 +90,12 @@
internalPendingException = (void*)((uintptr_t)exc - 32);
cxa_throw(exc, 0, 0);
#else
+#if defined(__MACH__)
+ _longjmp(lastExceptionBuffer->buffer, 1);
+#else
longjmp(lastExceptionBuffer->buffer, 1);
#endif
+#endif
}
void Thread::printBacktrace() {