[vmkit-commits] [vmkit] r101400 - in /vmkit/trunk: include/mvm/Threads/Thread.h lib/Mvm/CommonThread/ctthread.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Thu Apr 15 13:59:30 PDT 2010


Author: geoffray
Date: Thu Apr 15 15:59:30 2010
New Revision: 101400

URL: http://llvm.org/viewvc/llvm-project?rev=101400&view=rev
Log:
Use _setjmp and _longjmp on MacOS.


Modified:
    vmkit/trunk/include/mvm/Threads/Thread.h
    vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp

Modified: vmkit/trunk/include/mvm/Threads/Thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Thread.h?rev=101400&r1=101399&r2=101400&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/Threads/Thread.h (original)
+++ vmkit/trunk/include/mvm/Threads/Thread.h Thu Apr 15 15:59:30 2010
@@ -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 {

Modified: vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp?rev=101400&r1=101399&r2=101400&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp (original)
+++ vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp Thu Apr 15 15:59:30 2010
@@ -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() {





More information about the vmkit-commits mailing list