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

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue Nov 15 11:59:47 PST 2011


Author: geoffray
Date: Tue Nov 15 13:59:47 2011
New Revision: 144686

URL: http://llvm.org/viewvc/llvm-project?rev=144686&view=rev
Log:
Move GetAlternativeStackSize in System, and remove the use of a magic constant.


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

Modified: vmkit/trunk/include/mvm/System.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/System.h?rev=144686&r1=144685&r2=144686&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/System.h (original)
+++ vmkit/trunk/include/mvm/System.h Tue Nov 15 13:59:47 2011
@@ -13,6 +13,7 @@
 #include <csetjmp>
 #include <cstring>
 #include <dlfcn.h>
+#include <signal.h>
 #include <stdint.h>
 #include <unistd.h>
 
@@ -112,6 +113,22 @@
     return ptr;
   }
 
+  static bool IsPageAligned(word_t ptr) {
+    return (ptr & (GetPageSize() - 1)) == 0;
+  }
+
+  static word_t PageAlignUp(word_t ptr) {
+    if (!IsPageAligned(ptr)) {
+      return (ptr & ~(GetPageSize() - 1)) + GetPageSize();
+    }
+    return ptr;
+  }
+
+  static word_t GetAlternativeStackSize() {
+    static word_t size = PageAlignUp(SIGSTKSZ);
+    return size;
+  }
+
   // Apply this mask to the stack pointer to get the Thread object.
   static word_t GetThreadIDMask() {
     return kThreadIDMask;

Modified: vmkit/trunk/include/mvm/Threads/Thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Thread.h?rev=144686&r1=144685&r2=144686&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/Threads/Thread.h (original)
+++ vmkit/trunk/include/mvm/Threads/Thread.h Tue Nov 15 13:59:47 2011
@@ -285,11 +285,7 @@
   }
 
   word_t GetAlternativeStackStart() {
-    return GetAlternativeStackEnd() + GetAlternativeStackSize();
-  }
-
-  static word_t GetAlternativeStackSize() {
-    return 3 * System::GetPageSize();
+    return GetAlternativeStackEnd() + System::GetAlternativeStackSize();
   }
 
   bool IsStackOverflowAddr(word_t addr) {

Modified: vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp?rev=144686&r1=144685&r2=144686&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp (original)
+++ vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp Tue Nov 15 13:59:47 2011
@@ -282,7 +282,7 @@
     uint32 pagesize = System::GetPageSize();
     for (uint32 i = 0; i < NR_THREADS; ++i) {
       word_t addr = baseAddr + (i * STACK_SIZE) + pagesize
-        + mvm::Thread::GetAlternativeStackSize();
+        + mvm::System::GetAlternativeStackSize();
       mprotect((void*)addr, pagesize, PROT_NONE);
     }
 
@@ -331,7 +331,7 @@
   stack_t st;
   st.ss_sp = (void*)th->GetAlternativeStackEnd();
   st.ss_flags = 0;
-  st.ss_size = th->GetAlternativeStackSize();
+  st.ss_size = System::GetAlternativeStackSize();
   sigaltstack(&st, NULL);
 
   // Set the SIGSEGV handler to diagnose errors.





More information about the vmkit-commits mailing list