33 lines
735 B
NASM
33 lines
735 B
NASM
/* stuff needed for libgcc1 on win32. */
|
|
|
|
#ifdef L_chkstk
|
|
|
|
.global ___chkstk
|
|
.global __alloca
|
|
___chkstk:
|
|
__alloca:
|
|
pushl %ecx /* save temp */
|
|
movl %esp,%ecx /* get sp */
|
|
addl $0x8,%ecx /* and point to return addr */
|
|
|
|
probe: cmpl $0x1000,%eax /* > 4k ?*/
|
|
jb done
|
|
|
|
subl $0x1000,%ecx /* yes, move pointer down 4k*/
|
|
orl $0x0,(%ecx) /* probe there */
|
|
subl $0x1000,%eax /* decrement count */
|
|
jmp probe /* and do it again */
|
|
|
|
done: subl %eax,%ecx
|
|
orl $0x0,(%ecx) /* less that 4k, just peek here */
|
|
|
|
movl %esp,%eax
|
|
movl %ecx,%esp /* decrement stack */
|
|
|
|
movl (%eax),%ecx /* recover saved temp */
|
|
movl 4(%eax),%eax /* get return address */
|
|
jmp *%eax
|
|
|
|
|
|
#endif
|