Define CLOCKS_PER_SEC type to the type clock_t

C99 specifies that CLOCKS_PER_SEC is an expression with the type clock_t.
This patch adds a generic <bits/time2.h> to define CLOCKS_PER_SEC and
provides the Linux/x86-64 version of <bits/time2.h> to support x32.

	[BZ #17797]
	* bits/time.h (CLOCKS_PER_SEC): Changed to ((clock_t) 1000000).
	* sysdeps/unix/sysv/linux/bits/time.h (CLOCKS_PER_SEC): Likewise.
	* sysdeps/unix/sysv/linux/clock.c (clock): _Static_assert
	CLOCKS_PER_SEC == 1000000.
	* time/clocktest.c (main): Replace %ld with %jd and cast to
	intmax_t.
This commit is contained in:
H.J. Lu 2015-01-06 04:59:13 -08:00
parent 46abb64d62
commit 57ada0e7e7
6 changed files with 24 additions and 15 deletions

View File

@ -1,3 +1,13 @@
2015-01-06 H.J. Lu <hongjiu.lu@intel.com>
[BZ #17797]
* bits/time.h (CLOCKS_PER_SEC): Changed to ((clock_t) 1000000).
* sysdeps/unix/sysv/linux/bits/time.h (CLOCKS_PER_SEC): Likewise.
* sysdeps/unix/sysv/linux/clock.c (clock): _Static_assert
CLOCKS_PER_SEC == 1000000.
* time/clocktest.c (main): Replace %ld with %jd and cast to
intmax_t.
2015-01-05 Roland McGrath <roland@hack.frob.com> 2015-01-05 Roland McGrath <roland@hack.frob.com>
* sysdeps/generic/unwind-resume.h: New file. * sysdeps/generic/unwind-resume.h: New file.

2
NEWS
View File

@ -16,7 +16,7 @@ Version 2.21
17583, 17584, 17585, 17589, 17594, 17601, 17608, 17616, 17625, 17630, 17583, 17584, 17585, 17589, 17594, 17601, 17608, 17616, 17625, 17630,
17633, 17634, 17635, 17647, 17653, 17657, 17664, 17665, 17668, 17682, 17633, 17634, 17635, 17647, 17653, 17657, 17664, 17665, 17668, 17682,
17717, 17719, 17722, 17723, 17724, 17725, 17732, 17733, 17744, 17745, 17717, 17719, 17722, 17723, 17724, 17725, 17732, 17733, 17744, 17745,
17746, 17747, 17775, 17777, 17780, 17781, 17782, 17793, 17796 17746, 17747, 17775, 17777, 17780, 17781, 17782, 17793, 17796, 17797
* i386 memcpy functions optimized with SSE2 unaligned load/store. * i386 memcpy functions optimized with SSE2 unaligned load/store.

View File

@ -24,13 +24,13 @@
# ifndef _BITS_TIME_H # ifndef _BITS_TIME_H
# define _BITS_TIME_H 1 # define _BITS_TIME_H 1
/* ISO/IEC 9899:1990 7.12.1: <time.h> /* ISO/IEC 9899:1999 7.23.1: Components of time
The macro `CLOCKS_PER_SEC' is the number per second of the value The macro `CLOCKS_PER_SEC' is an expression with type `clock_t' that is
returned by the `clock' function. */ the number per second of the value returned by the `clock' function. */
/* CAE XSH, Issue 4, Version 2: <time.h> /* CAE XSH, Issue 4, Version 2: <time.h>
The value of CLOCKS_PER_SEC is required to be 1 million on all The value of CLOCKS_PER_SEC is required to be 1 million on all
XSI-conformant systems. */ XSI-conformant systems. */
# define CLOCKS_PER_SEC 1000000l # define CLOCKS_PER_SEC ((clock_t) 1000000)
# if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K # if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K
/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK /* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK

View File

@ -39,13 +39,13 @@ struct timeval
# ifndef _BITS_TIME_H # ifndef _BITS_TIME_H
# define _BITS_TIME_H 1 # define _BITS_TIME_H 1
/* ISO/IEC 9899:1990 7.12.1: <time.h> /* ISO/IEC 9899:1999 7.23.1: Components of time
The macro `CLOCKS_PER_SEC' is the number per second of the value The macro `CLOCKS_PER_SEC' is an expression with type `clock_t' that is
returned by the `clock' function. */ the number per second of the value returned by the `clock' function. */
/* CAE XSH, Issue 4, Version 2: <time.h> /* CAE XSH, Issue 4, Version 2: <time.h>
The value of CLOCKS_PER_SEC is required to be 1 million on all The value of CLOCKS_PER_SEC is required to be 1 million on all
XSI-conformant systems. */ XSI-conformant systems. */
# define CLOCKS_PER_SEC 1000000l # define CLOCKS_PER_SEC ((clock_t) 1000000)
# if (!defined __STRICT_ANSI__ || defined __USE_POSIX) \ # if (!defined __STRICT_ANSI__ || defined __USE_POSIX) \
&& !defined __USE_XOPEN2K && !defined __USE_XOPEN2K

View File

@ -20,15 +20,14 @@
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
#if CLOCKS_PER_SEC != 1000000l
# error "CLOCKS_PER_SEC should be 1000000"
#endif
clock_t clock_t
clock (void) clock (void)
{ {
struct timespec ts; struct timespec ts;
_Static_assert (CLOCKS_PER_SEC == 1000000,
"CLOCKS_PER_SEC should be 1000000");
/* clock_gettime shouldn't fail here since CLOCK_PROCESS_CPUTIME_ID is /* clock_gettime shouldn't fail here since CLOCK_PROCESS_CPUTIME_ID is
supported since 2.6.12. Check the return value anyway in case the kernel supported since 2.6.12. Check the return value anyway in case the kernel
barfs on us for some reason. */ barfs on us for some reason. */

View File

@ -30,7 +30,7 @@ main (int argc, char ** argv)
printf ("%jd clock ticks per second (start=%jd,stop=%jd)\n", printf ("%jd clock ticks per second (start=%jd,stop=%jd)\n",
(intmax_t) (stop - start), (intmax_t) start, (intmax_t) stop); (intmax_t) (stop - start), (intmax_t) start, (intmax_t) stop);
printf ("CLOCKS_PER_SEC=%ld, sysconf(_SC_CLK_TCK)=%ld\n", printf ("CLOCKS_PER_SEC=%jd, sysconf(_SC_CLK_TCK)=%ld\n",
CLOCKS_PER_SEC, sysconf(_SC_CLK_TCK)); (intmax_t) CLOCKS_PER_SEC, sysconf(_SC_CLK_TCK));
return 0; return 0;
} }