Annotation of 3BSD/cmd/px/34err.s, revision 1.1

1.1     ! root        1: #
        !             2: # 34err.s
        !             3: #
        !             4:        .set    ECHR,1
        !             5:        .set    ESYSTEM,2
        !             6:        .set    EBUILTIN,3
        !             7:        .set    EHALT,4
        !             8:        .set    ENILPTR,5
        !             9:        .set    EPASTEOF,6
        !            10:        .set    ESQRT,7
        !            11:        .set    ESTKNEMP,8
        !            12:        .set    ESUBSCR,9
        !            13:        .set    EREFINAF,10
        !            14:        .set    EWRITE,11
        !            15:        .set    ENAMESIZE,12
        !            16:        .set    ELN,13
        !            17:        .set    EBADOP,14
        !            18:        .set    EBADINUM,15
        !            19:        .set    EGOTO,16
        !            20:        .set    ECASE,17
        !            21:        .set    ESEEK,18
        !            22:        .set    ECREATE,19
        !            23:        .set    EOUTOFMEM,20
        !            24:        .set    ECTTOT,21
        !            25:        .set    ESTLIM,22
        !            26:        .set    ESTKOVFLO,23
        !            27:        .set    EBADFNUM,24
        !            28:        .set    EREMOVE,25
        !            29:        .set    ECLOSE,26
        !            30:        .set    EOPEN,27
        !            31:        .set    EARGV,28
        !            32:        .set    EPACK,29
        !            33:        .set    EUNPACK,30
        !            34:        .set    ERANGE,31
        !            35:        .set    EASRT,32
        !            36:        .set    EREADIT,33
        !            37:        .set    EWRITEIT,34
        !            38:        .set    EINTR,35
        !            39:        .set    EASSIGN,36
        !            40:        .set    EFIXADD,37
        !            41:        .set    EFLTADD,38
        !            42:        .set    EFIXSUB,39
        !            43:        .set    EFLTSUB,40
        !            44:        .set    EFIXMUL,41
        !            45:        .set    EFLTMUL,42
        !            46:        .set    EFIXDIV,43
        !            47:        .set    EFLTDIV,44
        !            48:        .set    EMODDIV,45
        !            49:        .set    EFIXNEG,46
        !            50:        .set    ELLIMIT,47
        !            51:        .set    EFRAMESIZE,48
        !            52:        .set    ETRASHHEAP,49
        !            53: #
        !            54: # Fielding interrupts and processing errors
        !            55: #
        !            56: # Process interpreter detected errors
        !            57: #
        !            58: error:
        !            59:        movzwl  _perrno,-(sp)
        !            60:        calls   $1,_error
        !            61:        jmp     (r8)
        !            62: 
        !            63: _endinterpret:
        !            64:        .byte   'e,'n,'d, 0
        !            65: 
        !            66: #
        !            67: # Keyboard interrupts
        !            68: #
        !            69:        .align  1
        !            70:        .globl  _intr
        !            71: _intr:
        !            72:        .word   0
        !            73:        pushal  _intr           #reset interrupt signal
        !            74:        pushl   $SIGINT
        !            75:        calls   $2,_signal
        !            76:        pushl   $EINTR
        !            77:        calls   $1,_error
        !            78:        ret
        !            79: #
        !            80: # Segmentation Violations => No more memory available for the stack
        !            81: #
        !            82:        .align  1
        !            83:        .globl  _memsize
        !            84: _memsize:
        !            85:        .word   0
        !            86:        pushl   $ESTKOVFLO
        !            87:        calls   $1,_error
        !            88:        ret
        !            89: #
        !            90: # Process computational errors
        !            91: #
        !            92:        .align  1
        !            93:        .globl  _except
        !            94: _except:
        !            95:        .word   0
        !            96:        pushal  _except         #reset signal
        !            97:        pushl   $SIGFPE
        !            98:        calls   $2,_signal
        !            99:        movl    PC(fp),r0       #r0 has PC at point following error
        !           100:        moval   errtbl-4,r1     #r1 points to error offset table
        !           101: l3404:
        !           102:        addl2   $4,r1           #determine cause of error
        !           103:        cmpl    r0,(r1)+
        !           104:        blssu   l3405           #not in table => system error
        !           105:        cmpl    r0,(r1)+
        !           106:        bgtru   l3404
        !           107:        movzwl  (r1),-(sp)      #select error message
        !           108:        brb     l3406
        !           109: l3405:
        !           110:        pushl   $ESYSTEM
        !           111: l3406:
        !           112:        calls   $1,_error
        !           113:        ret
        !           114: #
        !           115: # Table of offsets and their associated errors
        !           116: #
        !           117:        .align  1
        !           118: errtbl:
        !           119:        .long   _AS2, _OFF, EASSIGN
        !           120:        .long   _INX2, _NIL, ESUBSCR
        !           121:        .long   _ADD2, _ADD28, EFIXADD
        !           122:        .long   _ADD28, _SUB2, EFLTADD
        !           123:        .long   _SUB2, _SUB28, EFIXSUB
        !           124:        .long   _SUB28, _SQR2, EFLTSUB
        !           125:        .long   _SQR2, _MUL28, EFIXMUL
        !           126:        .long   _MUL28, _DIV2, EFLTMUL
        !           127:        .long   _DIV2, _MOD2, EFIXDIV
        !           128:        .long   _MOD2, _ABS2, EMODDIV
        !           129:        .long   _ABS2, _ABS8, EFIXNEG
        !           130:        .long   _DVD2, _IND1, EFLTDIV
        !           131:        .long   _RANG2, _CASE1OP, ERANGE
        !           132:        .long   _STOI, _UNDEF, EBUILTIN
        !           133:        .long   _PACK, _UNPACK, EPACK
        !           134:        .long   _UNPACK, _GET, EUNPACK
        !           135:        .long   0xffffffff
        !           136: #
        !           137: # recover values of dp and lino from the stack
        !           138: #
        !           139:        .globl  _fetchdp
        !           140: 
        !           141: _fetchdp:
        !           142:        .word   R2|R3|R4|R5|R6|R7|R8|R9|R10|R11
        !           143:        pushl   fp              #sift through the stack to get the
        !           144:        movl    sp,oldsp        # values of dp and lino
        !           145: l3401:
        !           146:        bicw3   $0xf000,MASK(fp),mask   #register save mask
        !           147:        moval   REGS(fp),sp             #point to saved registers
        !           148:        popr    mask                    #pop them
        !           149:        cmpl    PC(fp),$_interpret      #check for interpreter frame
        !           150:        blss    l3402                   #not found
        !           151:        cmpl    PC(fp),$_endinterpret   #check for end of interpreter
        !           152:        blss    l3403                   #found
        !           153: l3402:
        !           154:        movl    FP(fp),fp       #get next frames registers
        !           155:        jbr     l3401
        !           156: l3403:
        !           157:        movl    oldsp,sp        #restore current frame
        !           158:        movl    (sp)+,fp
        !           159:        movl    r9,*4(ap)       #return dp
        !           160:        movl    r11,*8(ap)      #return lino
        !           161:        ret
        !           162:        .data
        !           163: oldsp: .space  4               #old value of sp
        !           164: mask:  .space  2               #register pop mask
        !           165:        .text

unix.superglobalmegacorp.com

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