From owner-freebsd-current@FreeBSD.ORG Tue Jun 20 17:55:58 2006 Return-Path: X-Original-To: current@freebsd.org Delivered-To: freebsd-current@FreeBSD.ORG Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2E02616A474; Tue, 20 Jun 2006 17:55:58 +0000 (UTC) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (comp.chem.msu.su [158.250.32.97]) by mx1.FreeBSD.org (Postfix) with ESMTP id 6E2B943D58; Tue, 20 Jun 2006 17:55:55 +0000 (GMT) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (localhost [127.0.0.1]) by comp.chem.msu.su (8.13.4/8.13.3) with ESMTP id k5KHtnrv038426; Tue, 20 Jun 2006 21:55:49 +0400 (MSD) (envelope-from yar@comp.chem.msu.su) Received: (from yar@localhost) by comp.chem.msu.su (8.13.4/8.13.3/Submit) id k5KHtmAu038424; Tue, 20 Jun 2006 21:55:48 +0400 (MSD) (envelope-from yar) Date: Tue, 20 Jun 2006 21:55:48 +0400 From: Yar Tikhiy To: Tim Kientzle Message-ID: <20060620175548.GE36703@comp.chem.msu.su> References: <20060618192011.GF715@turion.vk2pj.dyndns.org> <20060618152428.A36995@fledge.watson.org> <20060619184540.GJ23729@comp.chem.msu.su> <20060619190822.GE966@turion.vk2pj.dyndns.org> <20060619221550.GM23729@comp.chem.msu.su> <20060619181929.W40529@fledge.watson.org> <449814AA.90307@freebsd.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <449814AA.90307@freebsd.org> User-Agent: Mutt/1.5.9i Cc: current@freebsd.org Subject: Re: NULL pointer dereference panic X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Jun 2006 17:55:58 -0000 On Tue, Jun 20, 2006 at 08:30:50AM -0700, Tim Kientzle wrote: > Andrew R. Reiter wrote: > >On Tue, 20 Jun 2006, Yar Tikhiy wrote: > > > >:On Tue, Jun 20, 2006 at 05:08:22AM +1000, Peter Jeremy wrote: > >:> On Mon, 2006-Jun-19 22:45:41 +0400, Yar Tikhiy wrote: > >:> >Peter, what gcc options did you build the kernel with? My question > >:> >is unrelated to the panic, I'd just like to make stack traces look > >:> >sane in common cases :-) > >:> > >: > >:When in basic i386 mode, gcc calls functions in the traditional > >:way. E.g., the "foo(1, 2)" call will look as follows in asm: > >: > >: pushl $2 > >: pushl $1 > >: call foo > >: addl $8, %esp > >: > >:By merely decoding the addl instruction at the return pointer we > >:can find how many words of arguments the called function takes. > > I'm not sure which -O flags enable this, but I've > certainly seen lazy stack cleanups in gcc-generated > code on i386: > > pushl $2 > pushl $1 > call foo > pushl $3 > pushl $4 > call foo > addl $16, %esp Thanks for this observation! > This optimization would also confuse the stack-tracing > logic you describe. "Why do we call our software `beta'? 'Coz it's beta than nothing" :-) The logic is older than FreeBSD itself, and alas, new compiler tricks don't allow for an alternative one that is simple enough to be used in the kernel. -- Yar