Annotation of os2sdk/startup/chkstk.asm, revision 1.1.1.1

1.1       root        1:        TITLE   chkstk - C stack checking routine
                      2: ;***
                      3: ;chkstk.asm - C stack checking routine
                      4: ;
                      5: ;      Copyright (c) 1985-1987 Microsoft Corporation, All Rights Reserved
                      6: ;
                      7: ;Purpose:
                      8: ;      Provides support for automatic stack checking in C procedures
                      9: ;      when stack checking is enabled.
                     10: ;
                     11: ;*******************************************************************************
                     12: 
                     13: include        version.inc
                     14: .xlist
                     15: 
                     16: include        cmacros.inc
                     17: include        msdos.inc
                     18: .list
                     19: 
                     20: sBegin data
                     21:        assumes ds,data
                     22: 
                     23: extrn  _end:word               ; stack bottom
                     24: 
                     25: if     sizeC
                     26:        globalCP _aaltstkovr,-1 ; alternate stack overflow
                     27: endif
                     28: 
                     29:        public  STKHQQ          ; used by parasitic heap
                     30: STKHQQ dw      dataoffset _end+STACKSLOP ; initial value
                     31: 
                     32: 
                     33: 
                     34: sEnd   data
                     35: 
                     36: 
                     37: sBegin code
                     38: assumes        ds,data
                     39: assumes        cs,code
                     40: 
                     41: externNP _amsg_exit            ; write error and die
                     42: 
                     43: page
                     44: ;***
                     45: ;_chkstk - check stack upon procedure entry
                     46: ;
                     47: ;Purpose:
                     48: ;      Provide stack checking on procedure entry.
                     49: ;
                     50: ;Entry:
                     51: ;      AX      = size of local frame
                     52: ;
                     53: ;Exit:
                     54: ;      SP      = new stackframe if successful
                     55: ;
                     56: ;Uses:
                     57: ;      BX, CX, DX
                     58: ;
                     59: ;Exceptions:
                     60: ;      Gives out of memory error and aborts if there is not enough
                     61: ;      stack space for the routine.
                     62: ;*******************************************************************************
                     63: 
                     64: labelP <PUBLIC,_chkstk>
                     65: 
                     66: if     sizeC
                     67:        pop     cx              ; get return offset
                     68:        pop     dx              ; get return segment
                     69: else
                     70:        pop     cx              ; get return offset
                     71: endif
                     72: 
                     73:        mov     bx,sp
                     74:        sub     bx,ax           ; new position
                     75:        jc      OMerr           ; error - out of memory
                     76:        cmp     bx,[STKHQQ]     ; SP - AX : STKHQQ (for heap/stack)
                     77:        jb      OMerr           ;   error - out of memory
                     78: 
                     79:        mov     sp,bx           ; set new stack pointer
                     80: 
                     81: if     sizeC
                     82:        push    dx              ; push segment
                     83:        push    cx              ; push offset
                     84: chkproc        proc    far
                     85:        ret                     ; far return to dx:cx
                     86: chkproc        endp
                     87: else
                     88:        jmp     cx              ; return to cx
                     89: endif
                     90: 
                     91: OMerr:
                     92: if     sizeC
                     93:        mov     ax,word ptr [_aaltstkovr]
                     94:        inc     ax
                     95:        jnz     altstkovr
                     96: endif
                     97: 
                     98: 
                     99:        xor     ax,ax
                    100:        jmp     _amsg_exit      ; give stack overflow and die
                    101: 
                    102: if     sizeC
                    103: altstkovr:
                    104:        push    dx              ; user segment
                    105:        push    cx              ; user offset
                    106:        jmp     [_aaltstkovr]   ; Pascal/FORTRAN stack overflow
                    107: endif
                    108: 
                    109: sEnd   code
                    110: 
                    111:        end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.