diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-02-02 15:17:45 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-02-02 15:17:45 +0000 |
commit | 473b39e749c43bbac18af0f7be22e0b2abb48e42 (patch) | |
tree | f5bedd667b23309956b2154486b16b9068eb1ef6 /libgfortran | |
parent | 00fc5e9d279e07d29741de257413ff6c0abe42a6 (diff) | |
download | gcc-473b39e749c43bbac18af0f7be22e0b2abb48e42.tar.gz |
2011-02-02 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 169522
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@169528 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran')
-rw-r--r-- | libgfortran/ChangeLog | 9 | ||||
-rwxr-xr-x | libgfortran/configure | 4 | ||||
-rw-r--r-- | libgfortran/configure.ac | 6 | ||||
-rw-r--r-- | libgfortran/intrinsics/time_1.h | 36 |
4 files changed, 42 insertions, 13 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 3a51f9b1758..47ab730be5b 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,12 @@ +2011-02-02 Janne Blomqvist <jb@gcc.gnu.org> + + PR libfortran/47571 + * configure: Regenerated. + * configure.ac: Don't add librt to LIBS. + * intrinsics/time_1.h (weak_gettime): Weakref trickery for + clock_gettime(). + (gf_gettime): Use weak_gettime() instead of clock_gettime(). + 2011-02-01 Janne Blomqvist <jb@gcc.gnu.org> * intrinsics/time_1.h: Include errno.h needed by fallbacks. diff --git a/libgfortran/configure b/libgfortran/configure index ec5c7ed999b..d052a05cdcf 100755 --- a/libgfortran/configure +++ b/libgfortran/configure @@ -25262,7 +25262,8 @@ fi # At least for glibc, clock_gettime is in librt. But don't pull that # in if it still doesn't give us the function we want. -# This test is copied from libgomp. +# This test is copied from libgomp, and modified to not link in -lrt +# as libgfortran calls clock_gettime via a weak reference. if test $ac_cv_func_clock_gettime = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 $as_echo_n "checking for clock_gettime in -lrt... " >&6; } @@ -25304,7 +25305,6 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5 $as_echo "$ac_cv_lib_rt_clock_gettime" >&6; } if test "x$ac_cv_lib_rt_clock_gettime" = x""yes; then : - LIBS="-lrt $LIBS" $as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac index ed1e2cc31a1..816165988ce 100644 --- a/libgfortran/configure.ac +++ b/libgfortran/configure.ac @@ -486,11 +486,11 @@ AC_CHECK_LIB([m],[feenableexcept],[have_feenableexcept=yes AC_DEFINE([HAVE_FEENA # At least for glibc, clock_gettime is in librt. But don't pull that # in if it still doesn't give us the function we want. -# This test is copied from libgomp. +# This test is copied from libgomp, and modified to not link in -lrt +# as libgfortran calls clock_gettime via a weak reference. if test $ac_cv_func_clock_gettime = no; then AC_CHECK_LIB(rt, clock_gettime, - [LIBS="-lrt $LIBS" - AC_DEFINE(HAVE_CLOCK_GETTIME, 1, + [AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [Define to 1 if you have the `clock_gettime' function.])]) fi diff --git a/libgfortran/intrinsics/time_1.h b/libgfortran/intrinsics/time_1.h index 58c51af287a..86e4331e889 100644 --- a/libgfortran/intrinsics/time_1.h +++ b/libgfortran/intrinsics/time_1.h @@ -189,6 +189,22 @@ gf_cputime (long *user_sec, long *user_usec, long *system_sec, long *system_usec #define GF_CLOCK_MONOTONIC GF_CLOCK_REALTIME #endif +/* Weakref trickery for clock_gettime(). On Glibc, clock_gettime() + requires us to link in librt, which also pulls in libpthread. In + order to avoid this by default, only call clock_gettime() through a + weak reference. */ +#ifdef HAVE_CLOCK_GETTIME +#ifdef SUPPORTS_WEAK +static int weak_gettime (clockid_t, struct timespec *) + __attribute__((__weakref__("clock_gettime"))); +#else +static inline int weak_gettime (clockid_t clk_id, struct timespec *res) +{ + return clock_gettime (clk_id, res); +} +#endif +#endif + /* Arguments: clock_id - INPUT, must be either GF_CLOCK_REALTIME or GF_CLOCK_MONOTONIC secs - OUTPUT, seconds @@ -208,14 +224,18 @@ gf_gettime (int clock_id __attribute__((unused)), time_t * secs, long * nanosecs) { #ifdef HAVE_CLOCK_GETTIME - struct timespec ts; - int err; - err = clock_gettime (clock_id, &ts); - *secs = ts.tv_sec; - if (nanosecs) - *nanosecs = ts.tv_nsec; - return err; -#elif HAVE_GETTIMEOFDAY + if (weak_gettime) + { + struct timespec ts; + int err; + err = weak_gettime (clock_id, &ts); + *secs = ts.tv_sec; + if (nanosecs) + *nanosecs = ts.tv_nsec; + return err; + } +#endif +#ifdef HAVE_GETTIMEOFDAY struct timeval tv; int err; err = gettimeofday (&tv, NULL); |