Am 05.10.2013 19:54, schrieb Juergen Lock: > On Fri, Oct 04, 2013 at 09:15:37AM +0200, Jan Kiszka wrote: >> On 2013-10-03 18:05, Peter Maydell wrote: >>> On 3 October 2013 23:09, Juergen Lock <qem...@jelal.kn-bremen.de> wrote: >>>> Local variable CPUClass *cc needs to be reloaded after return from longjmp >>>> too. (This fixes the mips-softmmu crash observed on FreeBSD when qemu is >>>> built with clang.) >>>> >>>> Signed-off-by: Juergen Lock <n...@jelal.kn-bremen.de> >>>> Found-by: Dimitry Andric <d...@freebsd.org> >>>> >>>> --- a/cpu-exec.c >>>> +++ b/cpu-exec.c >>>> @@ -681,6 +681,10 @@ int cpu_exec(CPUArchState *env) >>>> * local variables as longjmp is marked 'noreturn'. */ >>>> cpu = current_cpu; >>>> env = cpu->env_ptr; >>>> +#if !(defined(CONFIG_USER_ONLY) && \ >>>> + (defined(TARGET_M68K) || defined(TARGET_PPC) || >>>> defined(TARGET_S390X))) >>>> + cc = CPU_GET_CLASS(cpu); >>>> +#endif >>> This is a c compiler or libc bug -- the C standard says that this >>> local variable should not be trashed by the longjmp. We were >>> actually discussing removing the current workarounds there... >> But we didn't decide if we should stop supporting the affected compiler >> versions. >> >> Does this issue also exist with the latest clang version available for >> your platform? >> > It happens with up to date clang as it's in FreeBSD 10.0-current > which is due for a release soon. I think the clang folks are looking > into this issue but I don't know if a fix will make it into the > release... (For now I've added the workaround to the FreeBSD > qemu-devel port.) > > Thanx, > Juergen
Could you try whether QEMU crashes when it was configured with TCG interpreter (--enable-tcg-interpreter)? If it does not crash, it might be that TCG does not save / restore enough registers. Which register is used for the local variable 'cc'? Regards, Stefan