aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.asm/s390.inc
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/testsuite/gdb.asm/s390.inc')
-rw-r--r--gdb/testsuite/gdb.asm/s390.inc68
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