forked from KolibriOS/kolibrios
ddk: missing chkstk.S
git-svn-id: svn://kolibrios.org@1873 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
d06c2ff01e
commit
66539255be
31
drivers/ddk/debug/chkstk.S
Normal file
31
drivers/ddk/debug/chkstk.S
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
.global ___chkstk
|
||||
.global __alloca
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
___chkstk:
|
||||
__alloca:
|
||||
pushl %ecx /* save temp */
|
||||
leal 8(%esp), %ecx /* point past return addr */
|
||||
subl %eax, %ecx
|
||||
call *__imp__GetStackBase
|
||||
cmpl %eax, %ecx # check low stack limit
|
||||
jb 1f
|
||||
|
||||
movl %esp, %eax /* save old stack pointer */
|
||||
movl %ecx, %esp /* decrement stack */
|
||||
movl (%eax), %ecx /* recover saved temp */
|
||||
movl 4(%eax), %eax /* recover return address */
|
||||
|
||||
/* Push the return value back. Doing this instead of just
|
||||
jumping to %eax preserves the cached call-return stack
|
||||
used by most modern processors. */
|
||||
pushl %eax
|
||||
ret
|
||||
1:
|
||||
int3 #trap to debugger.
|
||||
#Oh wait... there is no kernel debugger
|
||||
.ascii "Stack overflow"
|
||||
|
Loading…
Reference in New Issue
Block a user