| Index: Source/wtf/StackBounds.cpp
|
| diff --git a/Source/wtf/StackBounds.cpp b/Source/wtf/StackBounds.cpp
|
| index a272ce3de90d7c4c318d36750ff9edace89de32f..806ea2c78642e393fa857d069ec990083c43e949 100644
|
| --- a/Source/wtf/StackBounds.cpp
|
| +++ b/Source/wtf/StackBounds.cpp
|
| @@ -60,7 +60,7 @@ namespace WTF {
|
| // These platforms should now be working correctly:
|
| // DARWIN, QNX, UNIX
|
| // These platforms are not:
|
| -// WINDOWS, SOLARIS, OPENBSD, WINCE
|
| +// WINDOWS, SOLARIS, OPENBSD
|
| //
|
| // FIXME: remove this! - this code unsafely guesses at stack sizes!
|
| #if OS(WINDOWS) || OS(SOLARIS) || OS(OPENBSD)
|
| @@ -153,76 +153,6 @@ void StackBounds::initialize()
|
| m_origin = static_cast<char*>(stackBase) + stackSize;
|
| }
|
|
|
| -#elif OS(WINCE)
|
| -
|
| -static bool detectGrowingDownward(void* previousFrame)
|
| -{
|
| - // Find the address of this stack frame by taking the address of a local variable.
|
| - int thisFrame;
|
| - return previousFrame > &thisFrame;
|
| -}
|
| -
|
| -static inline bool isPageWritable(void* page)
|
| -{
|
| - MEMORY_BASIC_INFORMATION memoryInformation;
|
| - DWORD result = VirtualQuery(page, &memoryInformation, sizeof(memoryInformation));
|
| -
|
| - // return false on error, including ptr outside memory
|
| - if (result != sizeof(memoryInformation))
|
| - return false;
|
| -
|
| - DWORD protect = memoryInformation.Protect & ~(PAGE_GUARD | PAGE_NOCACHE);
|
| - return protect == PAGE_READWRITE
|
| - || protect == PAGE_WRITECOPY
|
| - || protect == PAGE_EXECUTE_READWRITE
|
| - || protect == PAGE_EXECUTE_WRITECOPY;
|
| -}
|
| -
|
| -static inline void* getLowerStackBound(char* currentPage, DWORD pageSize)
|
| -{
|
| - while (currentPage > 0) {
|
| - // check for underflow
|
| - if (currentPage >= reinterpret_cast<char*>(pageSize))
|
| - currentPage -= pageSize;
|
| - else
|
| - currentPage = 0;
|
| -
|
| - if (!isPageWritable(currentPage))
|
| - return currentPage + pageSize;
|
| - }
|
| -
|
| - return 0;
|
| -}
|
| -
|
| -static inline void* getUpperStackBound(char* currentPage, DWORD pageSize)
|
| -{
|
| - do {
|
| - // guaranteed to complete because isPageWritable returns false at end of memory
|
| - currentPage += pageSize;
|
| - } while (isPageWritable(currentPage));
|
| -
|
| - return currentPage - pageSize;
|
| -}
|
| -
|
| -void StackBounds::initialize()
|
| -{
|
| - // find the address of this stack frame by taking the address of a local variable
|
| - void* thisFrame = &thisFrame;
|
| - bool isGrowingDownward = detectGrowingDownward(thisFrame);
|
| -
|
| - SYSTEM_INFO systemInfo;
|
| - GetSystemInfo(&systemInfo);
|
| - DWORD pageSize = systemInfo.dwPageSize;
|
| -
|
| - // scan all of memory starting from this frame, and return the last writeable page found
|
| - char* currentPage = reinterpret_cast<char*>(reinterpret_cast<DWORD>(thisFrame) & ~(pageSize - 1));
|
| - void* lowerStackBound = getLowerStackBound(currentPage, pageSize);
|
| - void* upperStackBound = getUpperStackBound(currentPage, pageSize);
|
| -
|
| - m_origin = isGrowingDownward ? upperStackBound : lowerStackBound;
|
| - m_bound = isGrowingDownward ? lowerStackBound : upperStackBound;
|
| -}
|
| -
|
| #elif OS(WINDOWS)
|
|
|
| void StackBounds::initialize()
|
|
|