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... -- PMM