summary refs log tree commit diff stats
path: root/results/classifier/zero-shot/105/other/2269
blob: e65ea9b1afb2d8c3f23767ba4e4c68beabc1e790 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
other: 0.894
graphic: 0.886
assembly: 0.866
device: 0.786
instruction: 0.743
semantic: 0.671
socket: 0.431
mistranslation: 0.422
network: 0.420
vnc: 0.380
KVM: 0.278
boot: 0.252

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.