2001-10-31 09:32:30 -05:00
|
|
|
/* stuff needed for libgcc on win32. */
|
1999-03-10 19:58:01 -05:00
|
|
|
|
|
|
|
#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
|