> 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
signature.asc
Description: Message signed with OpenPGP using GPGMail