[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