43 lines
955 B
NASM
43 lines
955 B
NASM
|
# 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:
|