Cortex M:qemu abort with optimized code and icount

Bug #1755479 reported by Antoine
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
QEMU
Fix Released
Undecided
Unassigned

Bug Description

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

Tags: arm
Revision history for this message
Antoine (acalando) wrote :
Revision history for this message
Peter Maydell (pmaydell) wrote :

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.

Revision history for this message
Antoine (acalando) wrote :

I just tested the patch and it resolves this problem. Thanks!

Peter Maydell (pmaydell)
tags: added: arm
Revision history for this message
Philippe Mathieu-Daudé (philmd) wrote :

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.

Revision history for this message
Peter Maydell (pmaydell) wrote :

That's not really necessary as the patch is already in Paolo's pull request.

Revision history for this message
Peter Maydell (pmaydell) wrote :

This is now fixed in master (and will be in 2.12.0) with commits 0790f8686107 and 87f963be66a32453e001.

Changed in qemu:
status: New → Fix Committed
Thomas Huth (th-huth)
Changed in qemu:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Bug attachments

Remote bug watches

Bug watches keep track of this bug in other bug trackers.