blob: d8259eb32ec2fd8ca874d327941f5180a2ae432f (
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
55
56
57
58
59
60
61
62
|
graphic: 0.719
instruction: 0.659
semantic: 0.614
network: 0.603
device: 0.590
socket: 0.586
other: 0.531
vnc: 0.522
boot: 0.521
assembly: 0.516
mistranslation: 0.515
KVM: 0.434
Cortex M:qemu abort with optimized code and icount
A basic program runs fine if compiled with flag -O0 with gcc, but triggers a qemu abort when compiled with -O1 and run with icount:
"qemu: fatal: IO on conditional branch instruction"
I also noticed the problem on C source like this with -O0:
"int foo = *bar; bar++;" : OK
"int foo = *bar++;" : FAIL (!!!)
Optimized binary attached to this ticket.
command line:
qemu-system-arm -M lm3s6965evb -nographic -kernel hello.bin -serial file:$(tty) -icount 4 -cpu cortex-m4
(working fine without icount)
version:
QEMU emulator version 2.11.50 (v2.11.0-2146-gd9bbfea-dirty)
Compilation options:
./configure --target-list=arm-softmmu --disable-slirp --disable-blobs --disable-docs --disable-guest-agent --disable-gnutls --disable-nettle --disable-gcrypt --disable-sdl --disable-gtk --disable-vnc --disable-virtfs --disable-mpath --disable-xen --disable-brlapi --disable-curl --disable-bluez --disable-kvm --disable-hax --disable-hvf --disable-whpx --disable-rdma --disable-vde --disable-netmap --disable-linux-aio --disable-cap-ng --disable-attr --disable-vhost-net --disable-spice --disable-rbd --disable-libiscsi --disable-libnfs --disable-smartcard --disable-libusb --disable-live-block-migration --disable-usb-redir --disable-lzo --disable-snappy --disable-bzip2 --disable-seccomp --disable-glusterfs --disable-tpm --disable-libssh2 --disable-numa --disable-libxml2 --disable-tcmalloc --disable-jemalloc --disable-replication --disable-vhost-vsock --disable-opengl --disable-virglrenderer --disable-xfsctl --disable-qom-cast-debug --disable-vxhs --disable-crypto-afalg --disable-vhost-user --disable-capstone --disable-pie --extra-cflags=-mtune=native
I have also tested previous versions:
- stock qemu-system-arm 2.5.0 from ubuntu 16.04: OK
- git version: QEMU emulator version 2.10.0 (v2.10.2-dirty): OK
- git version: QEMU emulator version 2.10.90 (v2.11.0-rc0-dirty): FAIL
Yes, it looks like we accidentally broke icount. This patch from the mailing list fixes it:
https://lists.gnu.org/archive/html/qemu-devel/2018-02/msg06595.html
though it hasn't been code-reviewed yet.
I just tested the patch and it resolves this problem. Thanks!
Hey Antoine, do you mind replying to the list thread with a single line such:
Tested-by: Antoine Calando <email address hidden>
This will help the code review and the patch will probably get merged faster.
Thanks.
That's not really necessary as the patch is already in Paolo's pull request.
This is now fixed in master (and will be in 2.12.0) with commits 0790f8686107 and 87f963be66a32453e001.
|