aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-01-28 13:24:09 +0000
committerJonathan Wakely <jwakely@redhat.com>2020-01-28 13:24:09 +0000
commit759812fddc81c0c131d4633b2a7f56412ce8dbed (patch)
tree43b81f0ab850782123d44b0823d571789d71d671
parent6c42e27c165b3ed1f2a388ed74091cd5a18bba85 (diff)
downloadgcc-759812fddc81c0c131d4633b2a7f56412ce8dbed.zip
gcc-759812fddc81c0c131d4633b2a7f56412ce8dbed.tar.gz
gcc-759812fddc81c0c131d4633b2a7f56412ce8dbed.tar.bz2
libstdc++: Replace glibc-specific check for clock_gettime (PR 93325)
It's wrong to assume that clock_gettime is unavailable on any *-*-linux* target that doesn't have glibc 2.17 or later. Use a generic test instead of using __GLIBC_PREREQ. Only do that test when is_hosted=yes so that we don't get an error for cross targets without a working linker. This ensures that C library's clock_gettime will be used on non-glibc targets, instead of an incorrect syscall to SYS_clock_gettime. PR libstdc++/93325 * acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Use AC_SEARCH_LIBS for clock_gettime instead of explicit glibc version check. * configure: Regenerate.
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/acinclude.m422
-rwxr-xr-xlibstdc++-v3/configure73
3 files changed, 70 insertions, 32 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 03061e6..d75ebbc 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -8,6 +8,13 @@
* configure: Regenerate.
+2020-01-28 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/93325
+ * acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Use AC_SEARCH_LIBS for
+ clock_gettime instead of explicit glibc version check.
+ * configure: Regenerate.
+
2020-01-27 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/93426
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index 3914791..ee5e033 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -1422,20 +1422,14 @@ AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
ac_has_nanosleep=yes
;;
gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
- AC_MSG_CHECKING([for at least GNU libc 2.17])
- AC_TRY_COMPILE(
- [#include <features.h>],
- [
- #if ! __GLIBC_PREREQ(2, 17)
- #error
- #endif
- ],
- [glibcxx_glibc217=yes], [glibcxx_glibc217=no])
- AC_MSG_RESULT($glibcxx_glibc217)
-
- if test x"$glibcxx_glibc217" = x"yes"; then
- ac_has_clock_monotonic=yes
- ac_has_clock_realtime=yes
+ # Don't use link test for freestanding library, in case gcc_no_link=yes
+ if test x"$is_hosted" = xyes; then
+ # Versions of glibc before 2.17 needed -lrt for clock_gettime.
+ AC_SEARCH_LIBS(clock_gettime, [rt])
+ if test x"$ac_cv_search_clock_gettime" = x"none required"; then
+ ac_has_clock_monotonic=yes
+ ac_has_clock_realtime=yes
+ fi
fi
ac_has_nanosleep=yes
ac_has_sched_yield=yes
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 60ad38b..5e28921 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -21072,35 +21072,72 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
ac_has_nanosleep=yes
;;
gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for at least GNU libc 2.17" >&5
-$as_echo_n "checking for at least GNU libc 2.17... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ # Don't use link test for freestanding library, in case gcc_no_link=yes
+ if test x"$is_hosted" = xyes; then
+ # Versions of glibc before 2.17 needed -lrt for clock_gettime.
+ { $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 ${ac_cv_search_clock_gettime+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <features.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 ()
{
-
- #if ! __GLIBC_PREREQ(2, 17)
- #error
- #endif
-
+return clock_gettime ();
;
return 0;
}
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_glibc217=yes
+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 test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+if ac_fn_cxx_try_link "$LINENO"; then :
+ ac_cv_search_clock_gettime=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_clock_gettime+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_clock_gettime+:} false; then :
+
else
- glibcxx_glibc217=no
+ ac_cv_search_clock_gettime=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_glibc217" >&5
-$as_echo "$glibcxx_glibc217" >&6; }
+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"
- if test x"$glibcxx_glibc217" = x"yes"; then
- ac_has_clock_monotonic=yes
- ac_has_clock_realtime=yes
+fi
+
+ if test x"$ac_cv_search_clock_gettime" = x"none required"; then
+ ac_has_clock_monotonic=yes
+ ac_has_clock_realtime=yes
+ fi
fi
ac_has_nanosleep=yes
ac_has_sched_yield=yes