diff options
Diffstat (limited to 'results/classifier/118/graphic/2269')
| -rw-r--r-- | results/classifier/118/graphic/2269 | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/results/classifier/118/graphic/2269 b/results/classifier/118/graphic/2269 new file mode 100644 index 000000000..24528a259 --- /dev/null +++ b/results/classifier/118/graphic/2269 @@ -0,0 +1,71 @@ +graphic: 0.886 +assembly: 0.866 +architecture: 0.847 +kernel: 0.821 +risc-v: 0.814 +performance: 0.801 +device: 0.786 +peripherals: 0.730 +semantic: 0.671 +PID: 0.608 +debug: 0.599 +permissions: 0.575 +register: 0.460 +ppc: 0.454 +socket: 0.431 +mistranslation: 0.422 +network: 0.420 +files: 0.404 +vnc: 0.380 +VMM: 0.364 +hypervisor: 0.341 +TCG: 0.326 +i386: 0.294 +virtual: 0.293 +user-level: 0.279 +KVM: 0.278 +boot: 0.252 +arm: 0.235 +x86: 0.192 + +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. |