Annotation of 41BSD/lib/libjobs/signal.s, revision 1.1

1.1     ! root        1: # C library -- sigsys
        !             2: 
        !             3: # sigsys(n, SIG_DFL);          /* default action on signal(n) */
        !             4: # sigsys(n, SIG_HOLD);         /* block signal temporarily */
        !             5: # sigsys(n, SIG_IGN);          /* ignore signal(n) */
        !             6: # sigsys(n, label);            /* goto label on signal(n) */
        !             7: # sigsys(n, DEFERSIG(label));  /* goto label with signal SIG_HOLD */
        !             8: 
        !             9: # returns old label, only one level.
        !            10: 
        !            11:        .set    SIGDORTI,0x200
        !            12: 
        !            13:        .set    signal,48
        !            14: .globl _sigsys
        !            15: .globl  cerror
        !            16: 
        !            17:        .align  1
        !            18: _sigsys:
        !            19:        .word   0x0000
        !            20:        chmk    $signal
        !            21:        bcc     noerror
        !            22:        jmp     cerror
        !            23: noerror:
        !            24:        ret
        !            25: 
        !            26: #
        !            27: # sigpeel(n, newact)
        !            28: #
        !            29: # when called from routine which was called by system, peels
        !            30: # back frames to the last one, then calls the system to reenable
        !            31: # the signal with newact, arranging to clean the stack before the
        !            32: # signal can happen again
        !            33: #
        !            34: .globl _sigpeel
        !            35:        .align  1
        !            36: _sigpeel:
        !            37:        .word   0x0000
        !            38:        .set    RETOFF,16       # offset of return address in frame
        !            39: # get signal number value to set
        !            40:        movl    4(ap),r0
        !            41:        movl    8(ap),r1
        !            42:        movab   unw1,RETOFF(fp)
        !            43:        ret                     # peel off our frame
        !            44: # top frame is now frame of routine signal action called
        !            45: unw1:
        !            46:        movab   unw2,RETOFF(fp)
        !            47:        ret
        !            48: # now frame from callg of ``locore.s/sigcode()'' is gone
        !            49: # if no value to set, can just ret now to go back to old code
        !            50: # with an ret->rei, else must make the frame passed to us into a
        !            51: # signal call frame by putting the new signal code in the
        !            52: # second word, and call the kernel which will pop off the frame.
        !            53: unw2:
        !            54:        tstl    r1
        !            55:        bneq    unw3
        !            56:        ret                     # easy
        !            57: # mark dorti wanted, and reenable signal
        !            58: unw3:
        !            59:        bisl3   $SIGDORTI,r0,4(ap)
        !            60: ###    movl    r0,4(ap)        ### for testing on old system
        !            61:        movl    r1,8(ap)
        !            62:        chmk    $signal
        !            63:        halt                    # can't happen
        !            64: 
        !            65: ### for testing on old system
        !            66: ###    ret                     # and then rei, natch

unix.superglobalmegacorp.com

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