# CYGNUS LOCAL -- NT/WRS development, meissner
# Allocate stack for NT, inserting stack probes every 4k pages

	.file	"ntstack.asm"

#	Setup MS Structured-Exception-Handling
	.pdata
	.align 2
	.ualong ..__allocate_stack,__allocate_stack.e,0,0,__allocate_stack.b

#	Switch to the relocation section
	.reldata
	.globl __allocate_stack
	.globl ..__allocate_stack
__allocate_stack:
	.ualong ..__allocate_stack,.toc

	.text
	.align 2
..__allocate_stack:
	.function	..__allocate_stack
__allocate_stack.b:
	addi	3,3,15			# round up to 16 byte alignment
	lwz	0,0(1)			# old stack link
	rlwinm	3,3,0,0,28
	srawi.	4,3,12			# get # of pages to check
	neg	3,3			# negate so we can use stwux
	bgt-	0,.Lcheck
	stwux	0,1,3			# small request, just decrement and return
	blr

.Lcheck:
	mtctr	4			# number of pages to check
	mr	5,1			# tmp pointer
.Lloop:
	lwzu	6,-4096(5)		# touch the page
	bdnz+	.Lloop			# and loop back

	stwux	0,1,3			# update stack pointer
	blr

__allocate_stack.e:
FE_MOT_RESVD..__allocate_stack:
# END CYGNUS LOCAL -- NT/WRS development, meissner
