DIRECTORY SPARCArchitecture, SPARCManger; SPARCBreakpoint: CEDAR DEFINITIONS ~ { registerSaveArea: NAT ~ 64 * BYTES[SPARCArchitecture.SPARCContents]; PatchStruct: TYPE ~ MACHINE DEPENDENT RECORD [ closureCaller: ClosureCaller, manger: SPARCManger.Manger ]; ClosureCaller: TYPE ~ MACHINE DEPENDENT RECORD [ save: SPARCArchitecture.SPARCInstruction, callSaveRegs: SPARCArchitecture.SPARCInstruction, argSaveAreaOnce: SPARCArchitecture.SPARCInstruction, argHiClientData: SPARCArchitecture.SPARCInstruction, callClientProc: SPARCArchitecture.SPARCInstruction, argLoClientData: SPARCArchitecture.SPARCInstruction, callRestoreRegs: SPARCArchitecture.SPARCInstruction, argSaveAreaAgain: SPARCArchitecture.SPARCInstruction, restore: SPARCArchitecture.SPARCInstruction ]; }. V SPARCBreakpoint.mesa Copyright Ó 1989, 1990 by Xerox Corporation. All rights reserved. Peter B. Kessler, March 29, 1990 10:30 am PST Patches can't be monitored, since the processor executes out of them. My accesses of the patches and the pc's executing in them are races. That isn't a problem because the pc's never get to the patches until I'm done setting them up (fortunately), and I don't clear the patch. Clearing a breakpoint is just putting the instruction back, since you can't tell when the pc (or several of them) are done with the patch (that's is a garbage collection problem). This closureCaller is for SPARC's: it includes pushing an extra register window to avoid some register saving and to allocate space for saving the rest of the registers. save %sp, -(spOffset+stackAllocationForCallee+registerSaveArea), %sp -- allocate a register window and a register save area. call _save_regs add %sp, spOffset+stackAllocationForCallee, %o0 -- save_regs(@registerSaveArea). sethi %hi(clientData), %o0 call clientProc or %lo(clientData), %o0 -- clientProc(clientData). call _restore_regs add %sp, spOffset + stackAllocationForCallee, %o0 -- restore_regs(@registerSaveArea). restore %sp, +(spOffset+stackAllocationForCallee+registerSaveArea), %sp -- deallocate the register window and register save area. Constants. 64 words for saving the rest of the registers. Types. Patches are self-describing, in that they include the address of the replaced instruction (in the header) and the replaced instruction (relocated into the patch). in the delay slot. in the delay slot. in the delay slot. �ÊF•NewlineDelimiter ™code™Kšœ Ïrœ7™BJ™-J™šÏk ˜ J˜J˜ —J˜—unitšÐlnœžœž œ˜&K™K™ËK–f"Helvetica" family clearTabStops 0.5 in flushLeft tabStop 2.25 in flushLeft tabStop 2.25 in restIndent˜™ª–PclearTabStops 0.75 in flushLeft tabStop 2.0 in flushLeft tabStop 0 bp restIndentšÐboÏo@™DJ–PclearTabStops 0.75 in flushLeft tabStop 2.0 in flushLeft tabStop 0 bp restIndentš¡Ðco7™9—J• CharProps8PostfixXeroxCharCodesPostfixXeroxCharCodes–PclearTabStops 0.75 in flushLeft tabStop 2.0 in flushLeft tabStop 0 bp restIndentš ¡ ™–PclearTabStops 0.75 in flushLeft tabStop 2.0 in flushLeft tabStop 0 bp restIndentš ¡,™/J– PostfixXeroxCharCodes–PclearTabStops 0.75 in flushLeft tabStop 2.0 in flushLeft tabStop 0 bp restIndentš¡¢ ™"—J–PclearTabStops 0.75 in flushLeft tabStop 2.0 in flushLeft tabStop 0 bp restIndentš ¡Ðoz ¡™J–PclearTabStops 0.75 in flushLeft tabStop 2.0 in flushLeft tabStop 0 bp restIndentš ¡£ ™–PclearTabStops 0.75 in flushLeft tabStop 2.0 in flushLeft tabStop 0 bp restIndentš ¡£ ¡™J–PclearTabStops 0.75 in flushLeft tabStop 2.0 in flushLeft tabStop 0 bp restIndentš¡¢™—J–8PostfixXeroxCharCodesPostfixXeroxCharCodes–PclearTabStops 0.75 in flushLeft tabStop 2.0 in flushLeft tabStop 0 bp restIndentš ¡™–PclearTabStops 0.75 in flushLeft tabStop 2.0 in flushLeft tabStop 0 bp restIndentš ¡.™1J– PostfixXeroxCharCodes–PclearTabStops 0.75 in flushLeft tabStop 2.0 in flushLeft tabStop 0 bp restIndentš¡¢#™%—–PclearTabStops 0.75 in flushLeft tabStop 2.0 in flushLeft tabStop 0 bp restIndentš ¡@™GJ–PclearTabStops 0.75 in flushLeft tabStop 2.0 in flushLeft tabStop 0 bp restIndentš¡¢9™;—J–PclearTabStops 0.75 in flushLeft tabStop 2.0 in flushLeft tabStop 0 bp restIndent™—K–f"Helvetica" family clearTabStops 0.5 in flushLeft tabStop 2.25 in flushLeft tabStop 2.25 in restIndent˜head™ šœžœžœ"˜DKšÏc.™.——™K™¢š œ žœžœž œžœ˜.K˜K˜ K˜K˜š œžœžœž œžœ˜0Kšœ*˜*Kšœ1˜1šœ4˜4K™—Kšœ4˜4Kšœ3˜3šœ4˜4K™—Kšœ4˜4šœ5˜5K™—Kšœ,˜,K˜K˜—K˜——L˜——…— ¨