/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * PURPOSE: Stack checker * PROGRAMERS: KJK::Hyperion * Richard Henderson * Kai Tietz * Timo Kreuzer */ #include #include #define PAGE_SIZE 4096 PUBLIC ___chkstk_ms .code /* Special version, that does only probe and not allocate */ ___chkstk_ms: /* EAX = size to be allocated */ /* save the ECX and EAX register */ push ecx push eax /* ECX = top of the previous stack frame */ lea ecx, [esp + 12] /* probe the desired memory, page by page */ cmp eax, PAGE_SIZE jl .l_LessThanAPage .l_MoreThanAPage: /* raise the top of the stack by a page and probe */ sub ecx, PAGE_SIZE test [ecx], eax /* loop if still more than a page must be probed */ sub eax, PAGE_SIZE cmp eax, PAGE_SIZE jge .l_MoreThanAPage .l_LessThanAPage: /* raise the top of the stack by EAX bytes (size % 4096) and probe */ sub ecx, eax test [ecx], eax /* restore ECX and EAX */ pop eax pop ecx /* return */ ret /* EOF */ END