diff options
Diffstat (limited to 'gdb/testsuite/gdb.asm/s390.inc')
-rw-r--r-- | gdb/testsuite/gdb.asm/s390.inc | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.asm/s390.inc b/gdb/testsuite/gdb.asm/s390.inc new file mode 100644 index 0000000..04be5d6 --- /dev/null +++ b/gdb/testsuite/gdb.asm/s390.inc @@ -0,0 +1,68 @@ +### entry point code + .macro gdbasm_startup + + # Align the stack pointer to an 8-byte boundary. + lhi %r0,-8 + nr %r15,%r0 + + # Reserve space for the standard stack frame: + # back chain, and space for the callee to save its registers. + ahi %r15,-104 + + # Zero this frame's back chain pointer. + xc 0(4,%r15),0(%r15) + .endm + + +### Call a function. + .macro gdbasm_call subr + + # Put the address of the constant in %r1, load the constant + # (SUBR's address), and jump to it. + bras %r1, .Lafterconst\@ + .long \subr +.Lafterconst\@: + l %r1,0(%r1) + basr %r14,%r1 + .endm + + +### Exit with a zero status. + .macro gdbasm_exit0 + lhi %r2, 0 + svc 1 + .endm + +### Standard subroutine prologue. + .macro gdbasm_enter + + # Save all the callee-saves registers. What the heck. + stm %r6,%r15,24(%r15) + + # Allocate the stack frame, and write the back chain pointer. + # Keep the original SP in %r11. + lr %r1,%r15 + ahi %r15,-96 + st %r1,0(%r15) + .endm + + +### Standard subroutine epilogue. + .macro gdbasm_leave + + # Restore all our registers. This also pops the frame, and + # restores our return address. + lm %r6,%r15,120(%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 |