> On Jan 14, 2017, at 22:49, Bruce Evans <b...@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

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to