Date: Tue, 20 Jun 2006 21:55:48 +0400 From: Yar Tikhiy <yar@comp.chem.msu.su> To: Tim Kientzle <kientzle@freebsd.org> Cc: current@freebsd.org Subject: Re: NULL pointer dereference panic Message-ID: <20060620175548.GE36703@comp.chem.msu.su> In-Reply-To: <449814AA.90307@freebsd.org> 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>
next in thread | previous in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060620175548.GE36703>