| Index: third_party/minicrt/resetstk.c
|
| diff --git a/third_party/minicrt/resetstk.c b/third_party/minicrt/resetstk.c
|
| deleted file mode 100644
|
| index c09e0059fe23c2928e02782c6a288c445dd2f852..0000000000000000000000000000000000000000
|
| --- a/third_party/minicrt/resetstk.c
|
| +++ /dev/null
|
| @@ -1,118 +0,0 @@
|
| -/***
|
| -*resetstk.c - Recover from Stack overflow.
|
| -*
|
| -* Copyright (c) Microsoft Corporation. All rights reserved.
|
| -*
|
| -*Purpose:
|
| -* Defines the _resetstkoflw() function.
|
| -*
|
| -*******************************************************************************/
|
| -
|
| -#include <stdlib.h>
|
| -#include <malloc.h>
|
| -#include <windows.h>
|
| -
|
| -#define MIN_STACK_REQ_WIN9X 17
|
| -#define MIN_STACK_REQ_WINNT 2
|
| -
|
| -#define _osplatform VER_PLATFORM_WIN32_NT
|
| -
|
| -/***
|
| -* void _resetstkoflw() - Recovers from Stack Overflow
|
| -*
|
| -* Purpose:
|
| -* Sets the guard page to its position before the stack overflow.
|
| -*
|
| -* Exit:
|
| -* Returns nonzero on success, zero on failure
|
| -*
|
| -*******************************************************************************/
|
| -
|
| -int _resetstkoflw()
|
| -{
|
| - LPBYTE pStack, pGuard, pStackBase, pMaxGuard, pMinGuard;
|
| - MEMORY_BASIC_INFORMATION mbi;
|
| - SYSTEM_INFO si;
|
| - DWORD PageSize;
|
| - DWORD flNewProtect;
|
| - DWORD flOldProtect;
|
| -
|
| - // Use _alloca() to get the current stack pointer
|
| -
|
| - pStack = _alloca(1);
|
| -
|
| - // Find the base of the stack.
|
| -
|
| - if (VirtualQuery(pStack, &mbi, sizeof mbi) == 0)
|
| - return 0;
|
| - pStackBase = mbi.AllocationBase;
|
| -
|
| - // Find the page just below where the stack pointer currently points.
|
| - // This is the highest potential guard page.
|
| -
|
| - GetSystemInfo(&si);
|
| - PageSize = si.dwPageSize;
|
| -
|
| - pMaxGuard = (LPBYTE) (((DWORD_PTR)pStack & ~(DWORD_PTR)(PageSize - 1))
|
| - - PageSize);
|
| -
|
| - // If the potential guard page is too close to the start of the stack
|
| - // region, abandon the reset effort for lack of space. Win9x has a
|
| - // larger reserved stack requirement.
|
| -
|
| - pMinGuard = pStackBase + ((_osplatform == VER_PLATFORM_WIN32_WINDOWS)
|
| - ? MIN_STACK_REQ_WIN9X
|
| - : MIN_STACK_REQ_WINNT) * PageSize;
|
| -
|
| - if (pMaxGuard < pMinGuard)
|
| - return 0;
|
| -
|
| - // On a non-Win9x system, do nothing if a guard page is already present,
|
| - // else set up the guard page to the bottom of the committed range,
|
| - // allowing for the reserved stack requirement.
|
| - // For Win9x, just set guard page below the current stack page.
|
| -
|
| - if (_osplatform != VER_PLATFORM_WIN32_WINDOWS) {
|
| -
|
| - // Find first block of committed memory in the stack region
|
| -
|
| - pGuard = pStackBase;
|
| - do {
|
| - if (VirtualQuery(pGuard, &mbi, sizeof mbi) == 0)
|
| - return 0;
|
| - pGuard = pGuard + mbi.RegionSize;
|
| - } while ((mbi.State & MEM_COMMIT) == 0);
|
| - pGuard = mbi.BaseAddress;
|
| -
|
| - // If first committed block is already marked as a guard page,
|
| - // there is nothing that needs to be done, so return success.
|
| -
|
| - if (mbi.Protect & PAGE_GUARD)
|
| - return 1;
|
| -
|
| - // Fail if the first committed block is above the highest potential
|
| - // guard page. Should never happen.
|
| -
|
| - if (pMaxGuard < pGuard)
|
| - return 0;
|
| -
|
| - // Make sure to leave enough room so the next overflow will have
|
| - // the proper reserved stack requirement available.
|
| -
|
| - if (pGuard < pMinGuard)
|
| - pGuard = pMinGuard;
|
| -
|
| - VirtualAlloc(pGuard, PageSize, MEM_COMMIT, PAGE_READWRITE);
|
| - }
|
| - else {
|
| - pGuard = pMaxGuard;
|
| - }
|
| -
|
| - // Enable the new guard page.
|
| -
|
| - flNewProtect = _osplatform == VER_PLATFORM_WIN32_WINDOWS
|
| - ? PAGE_NOACCESS
|
| - : PAGE_READWRITE | PAGE_GUARD;
|
| -
|
| - return VirtualProtect(pGuard, PageSize, flNewProtect, &flOldProtect);
|
| -}
|
|
|