From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59325) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X4QPD-0001c3-Hq for qemu-devel@nongnu.org; Tue, 08 Jul 2014 04:05:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X4QP7-0004al-88 for qemu-devel@nongnu.org; Tue, 08 Jul 2014 04:05:39 -0400 Received: from mail-la0-f44.google.com ([209.85.215.44]:65379) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X4QP6-0004aa-SR for qemu-devel@nongnu.org; Tue, 08 Jul 2014 04:05:33 -0400 Received: by mail-la0-f44.google.com with SMTP id ty20so3699123lab.17 for ; Tue, 08 Jul 2014 01:05:30 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <20140708071334.GA21956@ZenIV.linux.org.uk> References: <20140704072937.GU18016@ZenIV.linux.org.uk> <20140705014055.GV18016@ZenIV.linux.org.uk> <20140705210951.GX18016@ZenIV.linux.org.uk> <20140705225513.GY18016@ZenIV.linux.org.uk> <53BAAAAE.2060009@twiddle.net> <20140707150629.GZ18016@ZenIV.linux.org.uk> <53BAC8CC.9070301@twiddle.net> <20140708042037.GA18016@ZenIV.linux.org.uk> <53BB899C.30901@twiddle.net> <20140708065436.GB18016@ZenIV.linux.org.uk> <20140708071334.GA21956@ZenIV.linux.org.uk> From: Peter Maydell Date: Tue, 8 Jul 2014 09:05:10 +0100 Message-ID: Content-Type: text/plain; charset=UTF-8 Subject: Re: [Qemu-devel] [RFC] alpha qemu arithmetic exceptions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Al Viro Cc: QEMU Developers , Richard Henderson On 8 July 2014 08:13, Al Viro wrote: > Actually, that's badly worded; what codepath ends up setting si_code on > e.g. fp addition overflows? In system mode it's done by completion code > in the kernel, but AFAICS in user mode there are only two places where it > might happen - one is gentrap handling and another - osf_setsysinfo(2) > emulation for TARGET_SSI_IEEE_FP_CONTROL. What I don't understand is how > do we get from float_raise(&FP_STATUS, float_flag_overflow) in fpu/softfloat.c > to either of those. > > IOW, suppose I do > x = DBL_MAX; > feenableexcept(FE_ALL_EXCEPT); > x *= x; > I understand how I'll get SIGFPE, but what will set correct si_code in > siginfo I'll see in the hanler? The code we have currently may well be buggy, but the correct place to set si_code is (as Richard says) the Alpha cpu_loop() in linux-user/main.c, which has access to the trap type that just caused us to stop executing code, plus the CPUState, which should be enough information to set si_code correctly. In particular the GENTRAP case seems to be setting a variety of different si_code values for SIGFPE. thanks -- PMM