Dne 27. 11. 23 v 10:37 Peter Maydell napsal(a): > On Sat, 25 Nov 2023 at 13:09, Petr Cvek <petrcve...@gmail.com> wrote: >> >> It seems there is a bug in SIGALRM handling when 486 system emulates x86_64 >> code. > > 486 host is pretty well out of support currently. Can you reproduce > this on a less ancient host CPU type ? >
It seems it only fails when the code is compiled for i486. QEMU built with the same compiler with -march=i586 and above runs on the same physical hardware without a problem. All -march= variants were executed on ryzen 3600. >> ERROR:../accel/tcg/cpu-exec.c:546:cpu_exec_longjmp_cleanup: assertion >> failed: (cpu == current_cpu) >> Bail out! ERROR:../accel/tcg/cpu-exec.c:546:cpu_exec_longjmp_cleanup: >> assertion failed: (cpu == current_cpu) >> 0x48874a != 0x3c69e10 >> ** >> ERROR:../accel/tcg/cpu-exec.c:546:cpu_exec_longjmp_cleanup: assertion >> failed: (cpu == current_cpu) >> Bail out! ERROR:../accel/tcg/cpu-exec.c:546:cpu_exec_longjmp_cleanup: >> assertion failed: (cpu == current_cpu) > > What compiler version do you build QEMU with? That > assert is there because we have seen some buggy compilers > in the past which don't correctly preserve the variable > value as the setjmp/longjmp spec requires them to. > i486 and i586+ code variants were compiled with GCC 13.2.0 (more exactly, slackware64 current multilib distribution). i486 binary which runs on the real 486 is also GCC 13.2.0 and installed as a part of the buildroot crosscompiler (about two week old git snapshot). > thanks > -- PMM best regards, Petr