/* stuff needed for libgcc on win32.
 *
 *   Copyright (C) 1996, 1998, 2001, 2003 Free Software Foundation, Inc.
 *   Written By Steve Chamberlain
 * 
 * This file is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2, or (at your option) any
 * later version.
 * 
 * In addition to the permissions in the GNU General Public License, the
 * Free Software Foundation gives you unlimited permission to link the
 * compiled version of this file with other programs, and to distribute
 * those programs without any restriction coming from the use of this
 * file.  (The General Public License restrictions do apply in other
 * respects; for example, they cover modification of the file, and
 * distribution when not linked into another program.)
 * 
 * This file is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; see the file COPYING.  If not, write to
 * the Free Software Foundation, 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 * 
 *    As a special exception, if you link this library with files
 *    compiled with GCC to produce an executable, this does not cause
 *    the resulting executable to be covered by the GNU General Public License.
 *    This exception does not however invalidate any other reasons why
 *    the executable file might be covered by the GNU General Public License.
 */

#ifdef L_chkstk

/* Function prologue calls _alloca to probe the stack when allocating more
   than CHECK_STACK_LIMIT bytes in one go.  Touching the stack at 4K
   increments is necessary to ensure that the guard pages used
   by the OS virtual memory manger are allocated in correct sequence.  */

	.global ___chkstk
	.global	__alloca
___chkstk:
__alloca:
	pushl  %ecx		/* save temp */
	movl   %esp,%ecx	/* get sp */
	addl   $0x8,%ecx	/* and point to return addr */

probe: 	cmpl   $0x1000,%eax	/* > 4k ?*/
	jb    done		

	subl   $0x1000,%ecx  		/* yes, move pointer down 4k*/
	orl    $0x0,(%ecx)   		/* probe there */
	subl   $0x1000,%eax  	 	/* decrement count */
	jmp    probe           	 	/* and do it again */

done: 	subl   %eax,%ecx	   
	orl    $0x0,(%ecx)	/* less that 4k, just peek here */

	movl   %esp,%eax
	movl   %ecx,%esp	/* decrement stack */

	movl   (%eax),%ecx	/* recover saved temp */
	movl   4(%eax),%eax	/* get return address */
	jmp    *%eax	
#endif
