From: Stefan Weil <sw@weilnetz.de>
To: Juergen Lock <qemu-l@jelal.kn-bremen.de>,
Jan Kiszka <jan.kiszka@siemens.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
Dimitry Andric <dim@freebsd.org>,
QEMU Developers <qemu-devel@nongnu.org>,
Andreas Faerber <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH] cpu-exec(): also reload CPUClass *cc after longjmp return
Date: Sat, 05 Oct 2013 20:06:22 +0200 [thread overview]
Message-ID: <5250551E.6020105@weilnetz.de> (raw)
In-Reply-To: <20131005175432.GA25070@enceladus10.kn-bremen.de>
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 <qemu-l@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 <nox@jelal.kn-bremen.de>
>>>> Found-by: Dimitry Andric <dim@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
next prev parent reply other threads:[~2013-10-05 18:06 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-03 14:09 [Qemu-devel] [PATCH] cpu-exec(): also reload CPUClass *cc after longjmp return Juergen Lock
2013-10-03 16:05 ` Peter Maydell
2013-10-04 7:15 ` Jan Kiszka
2013-10-05 17:54 ` Juergen Lock
2013-10-05 18:06 ` Stefan Weil [this message]
2013-10-05 21:45 ` Juergen Lock
2013-10-07 7:28 ` Andreas Färber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5250551E.6020105@weilnetz.de \
--to=sw@weilnetz.de \
--cc=afaerber@suse.de \
--cc=dim@freebsd.org \
--cc=jan.kiszka@siemens.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-l@jelal.kn-bremen.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.