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-all/attachments/20170115/65642075/attachment.sig>
More information about the svn-src-all
mailing list