RISC-V exit via sifive_test does not work in scripts with -serial stdio Description of problem: Steps to reproduce: 1. Create assembly file `hello.s`: ```as .section .text .globl _start _start: csrr t0, mhartid bnez t0, _start li t0, 0x100000 li t1, 0x5555 sw t1, 0(t0) halt: j halt ``` 2. Create linker script `link.ld`: ```ld OUTPUT_ARCH( "riscv" ) ENTRY(_start) SECTIONS { . = 0x80000000; } ``` 3. Create runner script `./run.sh` (don't forget to `chmod +x`) ```sh #!/usr/bin/env bash timeout 10 qemu-system-riscv64 -M virt -display none -serial stdio -bios none -kernel hello ``` 4. Compile into executable: ```sh riscv64-unknown-elf-gcc -c -mcmodel=medany -fvisibility=hidden -nostartfiles -march=rv64g -mabi=lp64 -o hello.o hello.s riscv64-unknown-elf-ld hello.o -nostdlib -T link.ld -o hello ``` 5. Dot-source the script - it will immediately exit cleanly 6. Execute the script - it will timeout with exit code 124 7. Execute the script with redirected stdin, e.g. `./run.sh < ./run.sh` or `echo | ./run.sh` - it will immediately exit cleanly Additional information: This issue happens only with `-serial stdio`. Using `chardev:file` or `chardev:null` does not reproduce the issue. Process substitution like `<(echo 'test')` does not seem to work. `cat | ./run.sh` will wait until any line is send, then exit cleanly. This is mainly an issue when using helper test scripts which want to interact with user, as proper CI/UT would redirect serial anyways. I have noticed similar behavior with other RISC-V UART device - when running from scripts, there is no output, as if QEMU was waiting for something, even if there is only UART TX, not RX. It does not matter if I actually type in anything or not.