[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