|
|
1.1 ! root 1: # C library -- setjmp, longjmp ! 2: ! 3: # longjmp(a,v) ! 4: # will generate a "return(v)" from ! 5: # the last call to ! 6: # setjmp(a) ! 7: # by restoring registers from the stack ! 8: # and doing a return. ! 9: # ! 10: ! 11: .globl _setjmp ! 12: .globl _longjmp ! 13: ! 14: .align 1 ! 15: _setjmp: ! 16: .word 0x0000 ! 17: movl 4(ap),r0 ! 18: movl 12(fp),(r0) # save frame pointer of caller ! 19: movl 16(fp),4(r0) # save pc of caller ! 20: clrl r0 ! 21: ret ! 22: ! 23: .align 1 ! 24: _longjmp: ! 25: .word 0x0000 ! 26: movl 8(ap),r0 # return(v) ! 27: bneq L1 ! 28: movzbl $1,r0 ! 29: L1: ! 30: movl 4(ap),r1 # fetch buffer ! 31: tstl (r1) ! 32: beql botch ! 33: loop: ! 34: bitw $1,6(fp) # r0 saved? ! 35: beql L10 ! 36: movl r0,20(fp) ! 37: bitw $2,6(fp) #was r1 saved? ! 38: beql L11 ! 39: movl r1,24(fp) ! 40: brb L11 ! 41: L10: ! 42: bitw $2,6(fp) #was r1 saved? ! 43: beql L11 ! 44: movl r1,20(fp) ! 45: L11: ! 46: cmpl (r1),12(fp) ! 47: beql done ! 48: blssu botch ! 49: movl $loop,16(fp) ! 50: ret # pop another frame ! 51: ! 52: done: ! 53: cmpb *16(fp),reiins # returning to an "rei"? ! 54: bneq L20 ! 55: movab L21,16(fp) ! 56: ret ! 57: L21: addl2 $8,sp # compensate for PSL-PC push ! 58: jmp *4(r1) ! 59: L20: ! 60: movl 4(r1),16(fp) ! 61: ret ! 62: ! 63: botch: ! 64: pushl $14 ! 65: pushl $msg ! 66: pushl $2 ! 67: calls $3,_write ! 68: halt ! 69: ! 70: msg: .byte 'l, 'o, 'n, 'g, 'j, 'm, 'p, ' , 'b, 'o, 't, 'c, 'h, 012 ! 71: reiins: rei
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.