1### entry point code 2 .macro gdbasm_startup 3 4 # Align the stack pointer to an 8-byte boundary. 5 lghi %r0,-16 6 ngr %r15,%r0 7 8 # Reserve space for the standard stack frame: 9 # back chain, and space for the callee to save its registers. 10 aghi %r15,-168 11 12 # Zero this frame's back chain pointer. 13 xc 0(8,%r15),0(%r15) 14 .endm 15 16 17### Call a function. 18 .macro gdbasm_call subr 19 brasl %r14, \subr 20 .endm 21 22 23### Exit with a zero status. 24 .macro gdbasm_exit0 25 lghi %r2, 0 26 svc 1 27 .endm 28 29### Standard subroutine prologue. 30 .macro gdbasm_enter 31 32 # Save all the callee-saves registers. What the heck. 33 stmg %r6,%r15,48(%r15) 34 35 # Allocate the stack frame, and write the back chain pointer. 36 # Keep the original SP in %r11. 37 lgr %r11,%r15 38 aghi %r15,-168 39 stg %r11,0(%r15) 40 .endm 41 42 43### Standard subroutine epilogue. 44 .macro gdbasm_leave 45 46 # Restore all our registers. This also pops the frame, and 47 # restores our return address. 48 lmg %r6,%r15,216(%r15) 49 50 # Jump to the return address. 51 br %r14 52 53 .endm 54 55### Several nops. 56 .macro gdbasm_several_nops 57 lr %r0, %r0 58 lr %r0, %r0 59 lr %r0, %r0 60 lr %r0, %r0 61 .endm 62 63### Declare an `int' variable. 64 .macro gdbasm_datavar name value 65 .data 66\name: 67 .long \value 68 .endm 69