1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
# 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:
|