@@ -23,3 +23,4 @@ cscope.*
/api/dirty-log
/api/dirty-log-perf
/s390x/*.bin
+/s390x/snippets/*/*.gbin
new file mode 100644
@@ -0,0 +1,16 @@
+#include <asm/sigp.h>
+
+.section .init
+ .globl start
+start:
+ /* XOR all registers with themselves to clear them fully. */
+ .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
+ xgr \i,\i
+ .endr
+ /* 0x3000 is the stack page for now */
+ lghi %r15, 0x4000 - 160
+ sam64
+ brasl %r14, main
+ /* For now let's only use cpu 0 in snippets so this will always work. */
+ xgr %r0, %r0
+ sigp %r2, %r0, SIGP_STOP
new file mode 100644
@@ -0,0 +1,51 @@
+SECTIONS
+{
+ .lowcore : {
+ /*
+ * Initial short psw for disk boot, with 31 bit addressing for
+ * non z/Arch environment compatibility and the instruction
+ * address 0x4000 (cstart.S .init).
+ */
+ . = 0;
+ LONG(0x00080000)
+ LONG(0x80004000)
+ /* Restart new PSW for booting via PSW restart. */
+ . = 0x1a0;
+ QUAD(0x0000000180000000)
+ QUAD(0x0000000000004000)
+ }
+ . = 0x4000;
+ .text : {
+ *(.init)
+ *(.text)
+ *(.text.*)
+ }
+ . = ALIGN(64K);
+ etext = .;
+ .opd : { *(.opd) }
+ . = ALIGN(16);
+ .dynamic : {
+ dynamic_start = .;
+ *(.dynamic)
+ }
+ .dynsym : {
+ dynsym_start = .;
+ *(.dynsym)
+ }
+ .rela.dyn : { *(.rela*) }
+ . = ALIGN(16);
+ .data : {
+ *(.data)
+ *(.data.rel*)
+ }
+ . = ALIGN(16);
+ .rodata : { *(.rodata) *(.rodata.*) }
+ . = ALIGN(16);
+ __bss_start = .;
+ .bss : { *(.bss) }
+ __bss_end = .;
+ . = ALIGN(64K);
+ edata = .;
+ . += 64K;
+ . = ALIGN(64K);
+}