From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45421) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vby7s-0001WH-8X for qemu-devel@nongnu.org; Thu, 31 Oct 2013 15:41:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vby7m-000522-38 for qemu-devel@nongnu.org; Thu, 31 Oct 2013 15:41:52 -0400 Received: from mout.web.de ([212.227.17.12]:64346) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vby7l-00051q-QJ for qemu-devel@nongnu.org; Thu, 31 Oct 2013 15:41:46 -0400 Received: from mchn199C.mchp.siemens.de ([95.157.58.223]) by smtp.web.de (mrweb103) with ESMTPSA (Nemesis) id 0MCZlG-1VSaBm00H4-009P3c for ; Thu, 31 Oct 2013 20:41:44 +0100 Message-ID: <5272B274.8040001@web.de> Date: Thu, 31 Oct 2013 20:41:40 +0100 From: Jan Kiszka MIME-Version: 1.0 References: <1383247916-2660-1-git-send-email-sw@weilnetz.de> In-Reply-To: <1383247916-2660-1-git-send-email-sw@weilnetz.de> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="9hjvHi8qrEngtfOfupeGTUEaITAS2Egil" Subject: Re: [Qemu-devel] [PATCH v2] cpu-exec: Fix compiler warning (-Werror=clobbered) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Weil , qemu-devel Cc: peter.maydell@linaro.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --9hjvHi8qrEngtfOfupeGTUEaITAS2Egil Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On 2013-10-31 20:31, Stefan Weil wrote: > Reloading of local variables after sigsetjmp is only needed for some > buggy compilers. >=20 > The code which should reload these variables causes compiler warnings > with gcc 4.7 when compiler optimizations are enabled: >=20 > cpu-exec.c:204:15: error: > variable =E2=80=98cpu=E2=80=99 might be clobbered by =E2=80=98longjmp=E2= =80=99 or =E2=80=98vfork=E2=80=99 [-Werror=3Dclobbered] > cpu-exec.c:207:15: error: > variable =E2=80=98cc=E2=80=99 might be clobbered by =E2=80=98longjmp=E2= =80=99 or =E2=80=98vfork=E2=80=99 [-Werror=3Dclobbered] > cpu-exec.c:202:28: error: > argument =E2=80=98env=E2=80=99 might be clobbered by =E2=80=98longjmp=E2= =80=99 or =E2=80=98vfork=E2=80=99 [-Werror=3Dclobbered] >=20 > Now this code is only used for compilers which need it > (and gcc 4.5.x, x > 0 which does not need it but won't give warnings). >=20 > There were bug reports for clang and gcc 4.5.0, while gcc 4.5.1 > was reported to work fine without the reload code. >=20 > Signed-off-by: Stefan Weil > --- >=20 > v2: Don't remove the code which causes the warnings, but use it > only with clang or gcc < 4.6. >=20 > cpu-exec.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) >=20 > diff --git a/cpu-exec.c b/cpu-exec.c > index 30cfa2a..fec20c3 100644 > --- a/cpu-exec.c > +++ b/cpu-exec.c > @@ -677,14 +677,18 @@ int cpu_exec(CPUArchState *env) > only be set by a memory fault) */ > } /* for(;;) */ > } else { > - /* Reload env after longjmp - the compiler may have smashe= d all > - * local variables as longjmp is marked 'noreturn'. */ > +#if defined(__clang__) || !QEMU_GNUC_PREREQ(4, 6) > + /* Some compilers wrongly smash all local variables after > + * siglongjmp. There were bug reports for gcc 4.5.0 and cl= ang. > + * Reload essential local variables here for those compile= rs. > + * gcc 4.7 would complain about this code (-Wclobbered). *= / > cpu =3D current_cpu; > env =3D cpu->env_ptr; > #if !(defined(CONFIG_USER_ONLY) && \ > (defined(TARGET_M68K) || defined(TARGET_PPC) || defined(TARGET_S= 390X))) > cc =3D CPU_GET_CLASS(cpu); > #endif > +#endif /* __clang__ or old gcc */ > } > } /* for(;;) */ > =20 >=20 Are all clang versions affected? Then this looks reasonable. Jan --9hjvHi8qrEngtfOfupeGTUEaITAS2Egil Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iEYEARECAAYFAlJysnQACgkQitSsb3rl5xTUTgCgxvyI1cqqbBmv6jGhc5lsY6wF DP4An1tUm2jBa8tahXEOREZbTrNN7l9d =2RrG -----END PGP SIGNATURE----- --9hjvHi8qrEngtfOfupeGTUEaITAS2Egil--