In coverage builds, use branch-free timeradd() and timersub()

The ordinary definitions of timeradd() and timersub() contain a
branch. However, in coverage builds, this means that we get spurious
complaints about partially covered basic blocks, in a way that makes
our coverage determinism harder to check.
This commit is contained in:
Nick Mathewson 2019-05-15 08:28:25 -04:00
parent 2bb5d8148b
commit b882810245

View file

@ -20,6 +20,27 @@
#include <sys/time.h> #include <sys/time.h>
#endif #endif
#ifdef TOR_COVERAGE
/* For coverage builds, we use a slower definition of these macros without
* branches, to make coverage consistent. */
#undef timeradd
#undef timersub
#define timeradd(tv1,tv2,tvout) \
do { \
(tvout)->tv_sec = (tv1)->tv_sec + (tv2)->tv_sec; \
(tvout)->tv_usec = (tv1)->tv_usec + (tv2)->tv_usec; \
(tvout)->tv_sec += (tvout)->tv_usec / 1000000; \
(tvout)->tv_usec %= 1000000; \
} while (0)
#define timersub(tv1,tv2,tvout) \
do { \
(tvout)->tv_sec = (tv1)->tv_sec - (tv2)->tv_sec - 1; \
(tvout)->tv_usec = (tv1)->tv_usec - (tv2)->tv_usec + 1000000; \
(tvout)->tv_sec += (tvout)->tv_usec / 1000000; \
(tvout)->tv_usec %= 1000000; \
} while (0)
#endif
#ifndef timeradd #ifndef timeradd
/** Replacement for timeradd on platforms that do not have it: sets tvout to /** Replacement for timeradd on platforms that do not have it: sets tvout to
* the sum of tv1 and tv2. */ * the sum of tv1 and tv2. */