[vmkit-commits] [vmkit] r144456 - in /vmkit/trunk: include/mvm/System.h lib/Mvm/CommonThread/Sigsegv.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sat Nov 12 00:50:26 PST 2011


Author: geoffray
Date: Sat Nov 12 02:50:26 2011
New Revision: 144456

URL: http://llvm.org/viewvc/llvm-project?rev=144456&view=rev
Log:
Support hardware null check on macos/x64.


Modified:
    vmkit/trunk/include/mvm/System.h
    vmkit/trunk/lib/Mvm/CommonThread/Sigsegv.cpp

Modified: vmkit/trunk/include/mvm/System.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/System.h?rev=144456&r1=144455&r2=144456&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/System.h (original)
+++ vmkit/trunk/include/mvm/System.h Sat Nov 12 02:50:26 2011
@@ -216,7 +216,7 @@
   }
 
   static bool SupportsHardwareNullCheck() {
-#if LINUX_OS && ARCH_X64
+#if (LINUX_OS && ARCH_X64) || (MACOS_OS && ARCH_X64)
     return true;
 #else
     return false;

Modified: vmkit/trunk/lib/Mvm/CommonThread/Sigsegv.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/CommonThread/Sigsegv.cpp?rev=144456&r1=144455&r2=144456&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/CommonThread/Sigsegv.cpp (original)
+++ vmkit/trunk/lib/Mvm/CommonThread/Sigsegv.cpp Sat Nov 12 02:50:26 2011
@@ -19,6 +19,7 @@
 using namespace mvm;
 
 #if defined(ARCH_X64) && defined(LINUX_OS)
+
 extern "C" {
   void NativeHandleSignal(void);
   asm(
@@ -36,6 +37,23 @@
     ((ucontext_t*)context)->uc_mcontext.gregs[REG_RDI] = ((ucontext_t*)context)->uc_mcontext.gregs[REG_RIP] + 1; \
     ((ucontext_t*)context)->uc_mcontext.gregs[REG_RIP] = (word_t)NativeHandleSignal;
 
+#elif defined(ARCH_X64) && defined(MACOS_OS)
+extern "C" {
+  void NativeHandleSignal(void);
+  asm(
+    ".text\n"
+    ".align 8\n"
+    ".globl NativeHandleSignal\n"
+  "_NativeHandleSignal:\n"
+    // Save The faulting address to fake a reall method call
+    "pushq %rdi\n"
+    "jmp   _ThrowNullPointerException\n"
+    );
+}
+
+#define UPDATE_REGS() \
+    ((ucontext_t*)context)->uc_mcontext->__ss.__rdi = ((ucontext_t*)context)->uc_mcontext->__ss.__rip + 1; \
+    ((ucontext_t*)context)->uc_mcontext->__ss.__rip = (word_t)NativeHandleSignal;
 #else
 #define UPDATE_REGS() UNIMPLEMENTED();
 #endif





More information about the vmkit-commits mailing list