;[]-----------------------------------------------------------------[]
;|      STACK.ASM -- stack overflow handler                          |
;[]-----------------------------------------------------------------[]

;
;       C/C++ Run Time Library - Version 5.0
; 
;       Copyright (c) 1987, 1992 by Borland International
;       All Rights Reserved.
; 

; calls to this routine are generated by the compiler when
; stack overflow is detected.

        INCLUDE RULES.ASI

_TEXT   SEGMENT BYTE PUBLIC 'CODE'
        ASSUME  CS:_TEXT

extrn   __exit:near

        public  F_OVERFLOW@
        public  N_OVERFLOW@
        public  OVERFLOW@

message db      'Stack overflow!',13,10,'$'
N_OVERFLOW@:
F_OVERFLOW@:
OVERFLOW@:
        mov     bx,ds                   ; save DS
        mov     ax,cs
        mov     ds,ax                   ; Print the message.
        mov     dx,offset message
        mov     ah,9
        int     21h
        mov     ds,bx                   ; restore DS
;
; We can't just terminate the program here because it might die owning
; interrupt vectors that startup took for the signals and divide by zero.
; The clean way out is through _exit() who puts all that stuff back.
;
; Hopefully the program hasn't gone so berserk so that _exit() restores
; invalid stuff.  We have a real "lose-lose" situation here....
; In the case of a 'nice' stack overrun we're doing the right thing though.
;
        jmp    __exit                   ; This is a one-way trip!
_TEXT   ENDS
        END

