### entry point code .macro gdbasm_startup # Align the stack pointer to an 8-byte boundary. lghi %r0,-16 ngr %r15,%r0 # Reserve space for the standard stack frame: # back chain, and space for the callee to save its registers. aghi %r15,-168 # Zero this frame's back chain pointer. xc 0(8,%r15),0(%r15) .endm ### Call a function. .macro gdbasm_call subr brasl %r14, \subr .endm ### Exit with a zero status. .macro gdbasm_exit0 lghi %r2, 0 svc 1 .endm ### Standard subroutine prologue. .macro gdbasm_enter # Save all the callee-saves registers. What the heck. stmg %r6,%r15,48(%r15) # Allocate the stack frame, and write the back chain pointer. # Keep the original SP in %r11. lgr %r11,%r15 aghi %r15,-168 stg %r11,0(%r15) .endm ### Standard subroutine epilogue. .macro gdbasm_leave # Restore all our registers. This also pops the frame, and # restores our return address. lmg %r6,%r15,216(%r15) # Jump to the return address. br %r14 .endm ### Several nops. .macro gdbasm_several_nops lr %r0, %r0 lr %r0, %r0 lr %r0, %r0 lr %r0, %r0 .endm ### Declare an `int' variable. .purgem gdbasm_datavar .macro gdbasm_datavar name value .data \name: .long \value .endm