0fc725c6e50ef3cd140646de21224f87de805318
[reactos.git] / reactos / lib / sdk / crt / except / stack.c
1 #include <precomp.h>
2
3 /*********************************************************************
4 * _chkesp (MSVCRT.@)
5 *
6 * Trap to a debugger if the value of the stack pointer has changed.
7 *
8 * PARAMS
9 * None.
10 *
11 * RETURNS
12 * Does not return.
13 *
14 * NOTES
15 * This function is available for iX86 only.
16 *
17 * When VC++ generates debug code, it stores the value of the stack pointer
18 * before calling any external function, and checks the value following
19 * the call. It then calls this function, which will trap if the values are
20 * not the same. Usually this means that the prototype used to call
21 * the function is incorrect. It can also mean that the .spec entry has
22 * the wrong calling convention or parameters.
23 */
24
25 #ifdef __i386__
26
27 void _chkesp_failed(void)
28 {
29 ERR("stack got corrupted!\n");
30 __debugbreak();
31 }
32
33 #endif /* __i386__ */
34
35 /*********************************************************************
36 * _resetstkoflw (MSVCRT.@)
37 */
38 int CDECL _resetstkoflw(void)
39 {
40 int stack_addr;
41
42 /* causes stack fault that updates NtCurrentTeb()->Tib.StackLimit */
43 return VirtualProtect( &stack_addr, 1, PAGE_GUARD|PAGE_READWRITE, NULL );
44 }