correct stack depth checking

git-svn-id: svn://kolibrios.org@705 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge)
2008-01-28 16:26:51 +00:00
parent 7ad5e56087
commit 7602a89157
5 changed files with 169 additions and 272 deletions

View File

@@ -1,58 +0,0 @@
;*****************************************************************************
;*
;* Open Watcom Project
;*
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
;*
;* ========================================================================
;*
;* This file contains Original Code and/or Modifications of Original
;* Code as defined in and that are subject to the Sybase Open Watcom
;* Public License version 1.0 (the 'License'). You may not use this file
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
;* provided with the Original Code and Modifications, and is also
;* available at www.sybase.com/developer/opensource.
;*
;* The Original Code and all software distributed under the License are
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
;* NON-INFRINGEMENT. Please see the License for the specific language
;* governing rights and limitations under the License.
;*
;* ========================================================================
;*
;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
;* DESCRIBE IT HERE!
;*
;*****************************************************************************
include mdef.inc
include struct.inc
xref __STK
modstart chk
xdefp __CHK
xdefp __GRO
defp __CHK
xchg eax,4[esp]
call __STK
mov eax,4[esp]
ret 4
endproc __CHK
defp __GRO
ret 4
endproc __GRO
endmod
end

View File

@@ -34,35 +34,8 @@
#include "stacklow.h"
#include "exitwmsg.h"
#if defined(__AXP__) || defined(__PPC__)
void _init_stk( void )
{
}
_WCRTLINK unsigned __CHK( unsigned i )
{
return( i );
}
_WCRTLINK void __GRO( unsigned i )
{
i = i;
}
_WCRTLINK void __STKOVERFLOW( void )
{
__fatal_runtime_error( "stack overflow", -1 );
}
#endif
_WCRTLINK unsigned stackavail()
{
#if defined(__AXP__) || defined(__PPC__)
unsigned _SP;
_SP = (unsigned)&_SP;
return( _SP - _RWD_stacklow );
#else
return( _SP() - _RWD_stacklow );
#endif
}

View File

@@ -68,7 +68,7 @@ msg db "Stack Overflow!", 0dh, 0ah, 0
_quif ae ; - ...
sub eax,esp ; - calculate new low point
neg eax ; - calc what new SP would be
cmp eax,_STACKLOW ; - quit if too much
cmp eax,[_STACKLOW] ; - quit if too much
_quif be ; - ...
call __GRO ; - return
ret