re PR go/66574 (Time is provided in millisecond precision instead of nanoseconds as described in go documentation)

PR go/66574
    runtime: Use clock_gettime to get current time.
    
    Fetch the current time in nanoseconds, not microseconds, by using
    clock_gettime rather than gettimeofday.
    
    Update golang/go#11222.
    
    Fixes https://gcc.gnu.org/PR66574.
    
    Reviewed-on: https://go-review.googlesource.com/17156

From-SVN: r230694
This commit is contained in:
Ian Lance Taylor 2015-11-21 01:27:44 +00:00
parent 23df90322f
commit bbbe8b338b
4 changed files with 63 additions and 6 deletions

View File

@ -1,4 +1,4 @@
f79db38cf3484b63f7807abef05eecb23e9d0806 b839c8c35af49bd6d86306ad34449654a4657cb1
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.

56
libgo/configure vendored
View File

@ -14477,6 +14477,62 @@ ac_res=$ac_cv_search_nanosleep
if test "$ac_res" != no; then : if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
$as_echo_n "checking for library containing clock_gettime... " >&6; }
if test "${ac_cv_search_clock_gettime+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char clock_gettime ();
int
main ()
{
return clock_gettime ();
;
return 0;
}
_ACEOF
for ac_lib in '' rt; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_clock_gettime=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
if test "${ac_cv_search_clock_gettime+set}" = set; then :
break
fi
done
if test "${ac_cv_search_clock_gettime+set}" = set; then :
else
ac_cv_search_clock_gettime=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
$as_echo "$ac_cv_search_clock_gettime" >&6; }
ac_res=$ac_cv_search_clock_gettime
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi fi

View File

@ -501,9 +501,10 @@ PTHREAD_LIBS=
AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS=-lpthread) AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS=-lpthread)
AC_SUBST(PTHREAD_LIBS) AC_SUBST(PTHREAD_LIBS)
dnl Test if -lrt is required for sched_yield and/or nanosleep. dnl Test if -lrt is required for sched_yield or nanosleep or clock_gettime.
AC_SEARCH_LIBS([sched_yield], [rt]) AC_SEARCH_LIBS([sched_yield], [rt])
AC_SEARCH_LIBS([nanosleep], [rt]) AC_SEARCH_LIBS([nanosleep], [rt])
AC_SEARCH_LIBS([clock_gettime], [rt])
AC_C_BIGENDIAN AC_C_BIGENDIAN

View File

@ -13,11 +13,11 @@
struct time_now_ret struct time_now_ret
now() now()
{ {
struct timeval tv; struct timespec ts;
struct time_now_ret ret; struct time_now_ret ret;
gettimeofday (&tv, NULL); clock_gettime (CLOCK_REALTIME, &ts);
ret.sec = tv.tv_sec; ret.sec = ts.tv_sec;
ret.nsec = tv.tv_usec * 1000; ret.nsec = ts.tv_nsec;
return ret; return ret;
} }