Currently tests are run with the --kernel option of Qemu, which will load the ELF file and jump to the start address. When booting from disk, we need to specify a start address. This is done by setting the initial short PSW at 0x0. For later compatibility with other hypervisors the short psw has 31 bit addressing specified. Signed-off-by: Janosch Frank <frankja@xxxxxxxxxxxxx> --- s390x/cstart64.S | 9 +++++++-- s390x/flat.lds | 8 +++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/s390x/cstart64.S b/s390x/cstart64.S index dc7ddd6..abd6b58 100644 --- a/s390x/cstart64.S +++ b/s390x/cstart64.S @@ -14,12 +14,17 @@ .section .init -/* entry point - for KVM + TCG we directly start in 64 bit mode */ +/* + * Short init between 0x10000 and 0x10480 and then jump to 0x11000. + * 0x10480 - 0x11000 are written to by bootloader. + */ .globl start start: + sam64 # Set addressing mode to 64 bit +start64: /* setup stack */ larl %r15, stackptr - /* setup initial PSW mask + control registers*/ + /* setup initial PSW mask + control registers */ larl %r1, initial_psw lpswe 0(%r1) init_psw_cont: diff --git a/s390x/flat.lds b/s390x/flat.lds index b6e2172..7cfd9f9 100644 --- a/s390x/flat.lds +++ b/s390x/flat.lds @@ -1,10 +1,16 @@ SECTIONS { + .lowcore : { + . = 0; + LONG(0x00080000) + LONG(0x80010000) + } + . = 0x10000; .text : { *(.init) . = 0x480; ipl_args = .; - . = 0x600; + . = 0x1000; *(.text) *(.text.*) } -- 2.14.3