190075Sobrien/* stuff needed for libgcc on win32. */ 252284Sobrien 352284Sobrien#ifdef L_chkstk 452284Sobrien 552284Sobrien .global __chkstk 652284Sobrien .global __alloca 752284Sobrien__chkstk: 852284Sobrien__alloca: 952284Sobrien pushl %ecx /* save temp */ 1052284Sobrien movl %esp,%ecx /* get sp */ 1152284Sobrien addl $0x8,%ecx /* and point to return addr */ 1252284Sobrien 1352284Sobrienprobe: cmpl $0x1000,%eax /* > 4k ?*/ 1452284Sobrien jb done 1552284Sobrien 1652284Sobrien subl $0x1000,%ecx /* yes, move pointer down 4k*/ 1752284Sobrien orl $0x0,(%ecx) /* probe there */ 1852284Sobrien subl $0x1000,%eax /* decrement count */ 1952284Sobrien jmp probe /* and do it again */ 2052284Sobrien 2152284Sobriendone: subl %eax,%ecx 2252284Sobrien orl $0x0,(%ecx) /* less that 4k, just peek here */ 2352284Sobrien 2452284Sobrien movl %esp,%eax 2552284Sobrien movl %ecx,%esp /* decrement stack */ 2652284Sobrien 2752284Sobrien movl (%eax),%ecx /* recover saved temp */ 2852284Sobrien movl 4(%eax),%eax /* get return address */ 2952284Sobrien jmp *%eax 3052284Sobrien 3152284Sobrien 3252284Sobrien#endif 33