Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Mar 2015 21:05:19 +1100 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        Gleb Smirnoff <glebius@freebsd.org>
Cc:        Konstantin Belousov <kostikbel@gmail.com>, svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r279764 - head/sys/vm
Message-ID:  <20150312201342.W1351@besplex.bde.org>
In-Reply-To: <20150310103046.GV17947@FreeBSD.org>
References:  <201503080213.t282DlXj012465@svn.freebsd.org> <20150310100141.GS17947@FreeBSD.org> <20150310101812.GS2379@kib.kiev.ua> <20150310103046.GV17947@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 10 Mar 2015, Gleb Smirnoff wrote:

> On Tue, Mar 10, 2015 at 12:18:13PM +0200, Konstantin Belousov wrote:
> K> On Tue, Mar 10, 2015 at 01:01:41PM +0300, Gleb Smirnoff wrote:
> K> > On Sun, Mar 08, 2015 at 02:13:47AM +0000, Konstantin Belousov wrote:
> K> > K> Author: kib
> K> > K> Date: Sun Mar  8 02:13:46 2015
> K> > K> New Revision: 279764
> K> > K> URL: https://svnweb.freebsd.org/changeset/base/279764
> K> > K>
> K> > K> Log:
> K> > K>   Fix function name in the panic message.
> K> >
> K> > Why not use "%s, __func__" always and never encounter this problem
> K> > in future?
> K>
> K> Because you cannot grep for the panic string when __func__ is used.

It would also be an an obfuscation.

> Grepping for panic string doesn't work in general.

Yes it does.  The string just needs to be reasonably unique.  Even a
mispelled function name is usually unique enough.  Only function names
like f or printf would give too many matches.  __func__ is not unique
enough.  Neither are short format strings like "%d, %d, %d".  Longer
format strings might be unique enough, but are harder to type.

> A panic message
> can report pointers or numbers, which make text not unique. Actually,

Uniqueness is not needed.  Even for a function name you would probably
only type a part of the name that you hope is unique, then examine the
grep output to see if more context is needed.

> the messages that do report extra information are more useful. Also,

I consider them as usually just bloat.  Use a debugger to find more
info.  Unfortunately, not all users can run debuggers, and optimization
is now excessive so it breaks finding variable values.

> if panic string resides in the source code under several levels of
> indentation, it is likely to be split into two lines.

That would be another obfuscation.  Much worse that using __func__.

> But you can always grep for the function name and locate the panic
> or KASSERT in the function manually, which isn't a big deal. And
> if %s, __func__ is used, you will never get to a wrong function.

Better yet, spell all function names as __func__ or "this" in comments
so that they are write-only there too ;-).

Even better yet, spell all function names as __func__ in calls too.
Something like __func__ would work for determining the function to call
only for recursive calls.  __func__ itself doesn't work for that since
it is a string.  Determining the name of a different function is more
difficult.  If I knew C++, I might be able to give an example using
"this".  In C I don't see a better obfuscation (that can be easily
written) than using macros to change hard-to-type function names like
printf to that_there_func_0.  The name of the current function is of
course this_here_func ;-).  To actually be easier to type, change to
names like _0, _1, _2, etc.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20150312201342.W1351>