qemu-system-nios2 not working on s390x (big endian) hosts
Host environment
- Operating system: Linux / RHEL 9
- Architecture: s390x
- QEMU flavor: qemu-system-nios2
- QEMU version: current master branch (commit 7ce5a15f)
- QEMU command line:
qemu-system-nios2 -nographic -kernel vmlinux.elf
Emulated/Virtualized environment
- Operating system: Linux
- OS/kernel version: 4.11.3
- Architecture: nios2
Description of problem
qemu-system-nios2 fails to boot a Linux kernel on s390x hosts.
Steps to reproduce
- wget https://qemu-advcal.gitlab.io/qac-best-of-multiarch/download/day14.tar.xz
- tar -xJf day14.tar.xz
- cd day14/
- qemu-system-nios2 -nographic -kernel vmlinux.elf
Additional information
When running with "-d in_asm", it seems like the code initially starts executing ok, but in one of the early translation blocks, there is a difference when comparing the log with a run from a x86 host:
IN: fdt_check_header
0xc81afd48: ldw r3,0(r4)
0xc81afd4c: srli r5,r3,24
0xc81afd50: slli r2,r3,24
0xc81afd54: or r2,r2,r5
0xc81afd58: slli r5,r3,8
0xc81afd5c: srli r3,r3,8
0xc81afd60: andhi r5,r5,255
0xc81afd64: andi r3,r3,65280
0xc81afd68: or r2,r2,r5
0xc81afd6c: or r2,r2,r3
0xc81afd70: movhi r3,53262
0xc81afd74: addi r3,r3,-275
0xc81afd78: bne r2,r3,0xc81afde8
On the x86 host, the branch at the end is not taken, while on the s390x host, the branch is taken.