svn commit: r312119 - head/sys/kern

Ngie Cooper (yaneurabeya) yaneurabeya at gmail.com
Sun Jan 15 09:26:47 UTC 2017


> On Jan 14, 2017, at 22:49, Bruce Evans <brde at optusnet.com.au> wrote:
> 
> On Sat, 14 Jan 2017, Ngie Cooper wrote:
> 
>> Log:
>> encode_long, encode_timeval: mechanically replace `exp` with `exponent`
>> 
>> This helps fix a -Wshadow issue with exp(3) with tests/sys/acct/acct_test,
>> which include math.h, which in turn defines exp(3)
> 
> But kern_acct.c doesn't include math.h.
> 
> This messes up the kernel sources to simplify abusing them in tests.
> 
> The bug was only in the sed script in the makefile that translates
> kern_acct.c to convert.c.  It converts 'log(' to 'syslog(', but is missing
> conversion of the exp identifier to sysexp.
> 
>> ==============================================================================
>> --- head/sys/kern/kern_acct.c	Sat Jan 14 05:02:53 2017	(r312118)
>> +++ head/sys/kern/kern_acct.c	Sat Jan 14 05:06:14 2017	(r312119)
>> @@ -469,8 +469,8 @@ static uint32_t
>> encode_timeval(struct timeval tv)
>> {
>> 	int log2_s;
>> -	int val, exp;	/* Unnormalized value and exponent */
>> -	int norm_exp;	/* Normalized exponent */
>> +	int val, exponent;	/* Unnormalized value and exponent */
>> +	int norm_exponent;	/* Normalized exponent */
>> 	int shift;
>> 
>> 	/*
> 
> Now the bug is also bad style in the kernel sources.  The regexp was too
> simple and munged norm_exp too, but not the exp's in comments.  The
> comments are more banal than before now that they don't even expand 'exp'
> but just echo 'exponent'.
> 
>> ...
>> -	return (((FLT_MAX_EXP - 1 + exp + norm_exp) << (FLT_MANT_DIG - 1)) |
>> +	return (((FLT_MAX_EXP - 1 + exponent + norm_exponent) << (FLT_MANT_DIG - 1)) |
>> 	    ((shift > 0 ? val << shift : val >> -shift) & MANT_MASK));
> 
> Here the expansion also broke the formatting.
> 
> The details of the abuse in the test program are that acct_test.c includes
> math.h and then includes then convert.c which is nearly a copy of the kernel
> source file.  This takes clean include files and not enabling warnings
> about redundant declarations to have a chance of working.
> 
> I use a similar hack to test libm, and didn't have to mess up the sources
> too much to make the translation not too hard.  Files have to be copied
> just to make the include paths manageable, and to compile them all with
> the same CFLAGS since this is a performance test.  The most complicated
> parts are to avoid library functions because they might not match the
> sources or were compiled with different CFLAGS.  The sources are not well
> organized well enough for my preferred method of "cc ${CLAGS} *.c" to work.

Thank you for the concerns. I’ve modified the approach based on your recommendations above and submitted it as r312216.
-Ngie
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 842 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.freebsd.org/pipermail/svn-src-head/attachments/20170115/65642075/attachment.sig>


More information about the svn-src-head mailing list