diff options
Diffstat (limited to 'win32/lib/chkstk.S')
| -rw-r--r-- | win32/lib/chkstk.S | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/win32/lib/chkstk.S b/win32/lib/chkstk.S new file mode 100644 index 0000000..8e16d74 --- /dev/null +++ b/win32/lib/chkstk.S @@ -0,0 +1,29 @@ +// =================================================
+// chkstk.s
+
+.text
+.globl __chkstk
+
+__chkstk:
+ xchg (%esp), %ebp // store ebp, get ret.addr
+ push %ebp // push ret.addr
+ lea 4(%esp), %ebp // setup frame ptr
+ push %ecx // save ecx
+ mov %ebp, %ecx
+P0:
+ sub $4096,%ecx
+ test %eax,(%ecx)
+ sub $4096,%eax
+ cmp $4096,%eax
+ jge P0
+
+ sub %eax,%ecx
+ mov %esp,%eax
+ test %eax,(%ecx)
+ mov %ecx,%esp
+
+ mov (%eax),%ecx // restore ecx
+ mov 4(%eax),%eax
+ push %eax
+ ret
+
|
