|
|
1.1 ! root 1: /* ! 2: * pushframe : stack a frame ! 3: * mess with the standard calls/callf call frame to put things in ! 4: * the proper order. On entry to _Pushframe we have: ! 5: * On entry to Pushframe: On exit: ! 6: * ______________ ______________ ! 7: * | second arg | | second arg | ! 8: * +------------+ +------------+ ! 9: * | first arg | | first arg | ! 10: * +------------+ +------------+ ! 11: * | 'class' arg| | 'class' arg| ! 12: * +------------+ +------------+ ! 13: * | saved fp | <<= fp | return addr| ! 14: * +------------+ +------------+ ! 15: * |mask|removed| | old _errp | ! 16: * +------------+ +------------+ ! 17: * |return addr.| <<= sp | saved _bnp | ! 18: * +------------+ +------------+ ! 19: * | saved _np | ! 20: * +------------+ ! 21: * | saved lbot | <<= d0 ! 22: * +------------+ ! 23: * | saved r13 | ! 24: * | ... | ! 25: * | saved r8 | <<= sp ! 26: * +------------+ ! 27: */ ! 28: .text ! 29: .globl _Pushframe ! 30: .globl _qpushframe ! 31: ! 32: _qpushframe: ! 33: _Pushframe: ! 34: .word 0x0 ! 35: movl (fp),fp # give user his fp back ! 36: movl (sp),r0 # put program counter in temporary ! 37: moval 12(sp),sp # remove pc, 'mask', 'removed', and fp ! 38: pushl r0 # stack the return address ! 39: pushl _errp ! 40: pushl _bnp ! 41: pushl r6 # save _np ! 42: pushl r7 # save _lbot ! 43: moval (sp),r0 # return addr of lbot on stack to caller ! 44: moval -24(sp),sp ! 45: storer $0x3f00,(sp) # save r13(fp), r12,r11,r10,r9,r8 ! 46: clrl _retval # set retval to C_INITIAL ! 47: jmp *40(sp) # return to caller
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.