From owner-freebsd-hackers@FreeBSD.ORG Fri Dec 9 18:15:51 2011 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F0E3F106564A; Fri, 9 Dec 2011 18:15:50 +0000 (UTC) (envelope-from gleb.kurtsou@gmail.com) Received: from mail-lpp01m010-f54.google.com (mail-lpp01m010-f54.google.com [209.85.215.54]) by mx1.freebsd.org (Postfix) with ESMTP id 3F8D88FC0C; Fri, 9 Dec 2011 18:15:49 +0000 (UTC) Received: by lahl5 with SMTP id l5so835047lah.13 for ; Fri, 09 Dec 2011 10:15:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=HHC+wDFRxZrtoW2EXfqTtFplqQIqFFA+QpjPkWk5zPM=; b=HJQcM8L3GeE7zWqb5gGMXhb33MzONX7w01rkdcTMfx/2AVYHWe4QAqIIzQ7c9cJjzw LwAVijAnNScjyN6QPVEjOuewuKezdR0tBHCxJ6yrz04beG4/SJ+ZK8bpmsEC9r4je6k2 ReYjb9C3FELKS9/a6rm9yb5S1qtyF2t2940Xo= Received: by 10.152.110.130 with SMTP id ia2mr5619315lab.26.1323454548791; Fri, 09 Dec 2011 10:15:48 -0800 (PST) Received: from localhost ([78.157.92.5]) by mx.google.com with ESMTPS id xx14sm8363416lab.17.2011.12.09.10.15.47 (version=SSLv3 cipher=OTHER); Fri, 09 Dec 2011 10:15:47 -0800 (PST) Date: Fri, 9 Dec 2011 20:15:50 +0200 From: Gleb Kurtsou To: Rafal Jaworowski Message-ID: <20111209181550.GA3555@reks> References: <20111119100150.GA1560@reks> <20111208090159.GA1924@cq1> <4EE0EB8C.7050800@freebsd.org> <6D023449-EDEA-4B1C-975D-54AA2F4328CE@semihalf.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <6D023449-EDEA-4B1C-975D-54AA2F4328CE@semihalf.com> User-Agent: Mutt/1.5.21 (2010-09-15) Cc: freebsd-hackers@freebsd.org, mdf@freebsd.org, Nathan Whitehorn , Arnaud Lacombe , Piotr Nowak Subject: Re: gcc 4.2 miscompilation with -O2 -fno-omit-frame-pointer on amd64 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Dec 2011 18:15:51 -0000 On (09/12/2011 16:15), Rafal Jaworowski wrote: > > On 2011-12-08, at 17:53, Nathan Whitehorn wrote: > > > On 12/08/11 03:01, Piotr Nowak wrote: > >> We're working on PowerPC target using GCC 4.2.1 > >> and FreeBSD 6.1. It seems like we have similar > >> problem. In our case GCC sometimes very unfortunately > >> optimize code with -fno-omit-frame-pointer. > >> > >> Example shown below covers file sys/powerc/booke/pmap.c > >> and function pmap_kenter. If we disassemble kernel binary > >> we have: > >> > >> c019998c: 4b ec 6a ed bl c0060478<_mtx_unlock_spin_flags> > >> c0199990: 81 61 00 00 lwz r11,0(r1) > >> c0199994: 80 0b 00 04 lwz r0,4(r11) > >> c0199998: 7d 61 5b 78 mr r1,r11 > >> c019999c: 82 ab ff d4 lwz r21,-44(r11) > >> c01999a0: 7c 08 03 a6 mtlr r0 > >> c01999a4: 82 cb ff d8 lwz r22,-40(r11) > >> c01999a8: 82 eb ff dc lwz r23,-36(r11) > >> c01999ac: 83 0b ff e0 lwz r24,-32(r11) > >> c01999b0: 83 2b ff e4 lwz r25,-28(r11) > >> c01999b4: 83 4b ff e8 lwz r26,-24(r11) > >> c01999b8: 83 6b ff ec lwz r27,-20(r11) > >> > >> As you can see stack pointer on R1 is being updated > >> before stashed data were pulled off stack. (mr r1,r11) > >> As a result of this we have chance to get crash when > >> any interrupt hit shortly after stack pointer update. > >> The interrupt prologue will override not yet pulled off > >> pmap_kenter function data. > >> > >> The problem occures only with -fno-omit-frame-pointer > >> and not every branch returns are beeing corrupted. > >> > >> Do you think this issue may be somehow related to yours? > >> Are there any patches/solutions to fix it? > > > > Should we turn off -fno-omit-frame-frame-pointer on PPC then? It's enabled in default kernel builds. > > I think that's a good idea. Even though we have managed to trigger > this only in rare cases, the problem is real and the code generated is > broken i.e. leads to corruption and panics. -fno-omit-frame-pointer is there for kernel debugger to be able to generate backtraces. Hacking long abandoned gcc version won't get us far either. IMO we'd better concentrate on external toolchain support and clang. I wasn't able to come up with a small test case for the problem month ago, I'll try again once I have free time. > > Rafal >