> From: Ciro Santilli [mailto:ciro.santi...@gmail.com] > On Mon, Feb 19, 2018 at 8:02 AM, Pavel Dovgalyuk <dovga...@ispras.ru> wrote: > >> From: Pavel Dovgalyuk [mailto:dovga...@ispras.ru] > >> > From: Peter Maydell [mailto:peter.mayd...@linaro.org] > >> > On 13 February 2018 at 10:26, Pavel Dovgalyuk <dovga...@ispras.ru> wrote: > >> > > Then I added SCSI adapter with the option –device lsi,id=scsi0 and QEMU > >> > > failed with the following error: > >> > > > >> > > qemu: fatal: IO on conditional branch instruction > >> > > >> > > Seems, that your kernel is incomatible with QEMU, which ARM emulation > >> > > is not > >> > > good enough. > >> > > >> > It seems fairly unlikely to me that the Linux driver for this > >> > SCSI adaptor is using weirdo self-modifying code of the kind > >> > that would trip up that cpu_abort(). I would suggest a bit > >> > more investigation into what's actually happening... > >> > >> Peter, I bisected this bug and figured out the following. > >> > >> icount in ARM was broken by the following commit: > >> 9b990ee5a3cc6aa38f81266fb0c6ef37a36c45b9 > >> tcg: Add CPUState cflags_next_tb > >> This commit breaks execution of Ciro's kernel with enabled icount. > >> I haven't yet figured out why this happens. > > > > The problem is in the following code. > > As far, as I can understand, original version recompiles the TB and > > continues the execution as it goes. > > > > But the modified version sets cflags for the next compilation. > > And these are the flags for the old TB which should replace the original > > one. > > TCG tries to use cflags for the new TB (which starts after the interrupted > > one) > > and fails, because these flags are inappropriate. > > That is why icount execution fails. > > > > New version also does not include recompilation of the old block, which is > > wrong too. > > > > Awesome! Can you push it to a branch, and give the full qemu command > line so I can test it?
Updated the branch on github. You may try it. Pavel Dovgalyuk