re PR fortran/47571 (undefined reference to clock_gettime in Linux build of 02/01/2011)

PR libfortran/47571
	* acinclude.m4 (LIBGFOR_GTHREAD_WEAK): Remove.
	(LIBGFOR_CHECK_WEAKREF): New test.
	* configure.ac: Call LIBGFOR_CHECK_WEAKREF instead of
	LIBGFOR_GTHREAD_WEAK.
	* config.h.in: Regenerate.
	* configure: Regenerate.
	* intrinsics/system_clock.c: Use SUPPORTS_WEAKREF instead of
	SUPPORTS_WEAK and GTHREAD_USE_WEAK.

From-SVN: r227335
This commit is contained in:
Francois-Xavier Coudert 2015-08-31 10:37:30 +00:00 committed by François-Xavier Coudert
parent 4ba00e9dba
commit e78549932d
6 changed files with 56 additions and 64 deletions

View File

@ -1,3 +1,15 @@
2015-08-31 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR libfortran/47571
* acinclude.m4 (LIBGFOR_GTHREAD_WEAK): Remove.
(LIBGFOR_CHECK_WEAKREF): New test.
* configure.ac: Call LIBGFOR_CHECK_WEAKREF instead of
LIBGFOR_GTHREAD_WEAK.
* config.h.in: Regenerate.
* configure: Regenerate.
* intrinsics/system_clock.c: Use SUPPORTS_WEAKREF instead of
SUPPORTS_WEAK and GTHREAD_USE_WEAK.
2015-08-29 Jerry DeLisle <jvdelisle@gcc.gnu.org> 2015-08-29 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/67367 PR libgfortran/67367

View File

@ -69,27 +69,21 @@ if (foovar > 10) return __sync_add_and_fetch (&foovar, -1);]])],
[Define to 1 if the target supports __sync_fetch_and_add]) [Define to 1 if the target supports __sync_fetch_and_add])
fi]) fi])
dnl Check for pragma weak. dnl Check whether target effectively supports weakref
AC_DEFUN([LIBGFOR_GTHREAD_WEAK], [ AC_DEFUN([LIBGFOR_CHECK_WEAKREF], [
AC_CACHE_CHECK([whether pragma weak works], AC_CACHE_CHECK([whether the target supports weakref],
libgfor_cv_have_pragma_weak, [ libgfor_cv_have_weakref, [
gfor_save_CFLAGS="$CFLAGS" save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Wunknown-pragmas" CFLAGS="$CFLAGS -Wunknown-pragmas -Werror"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
void foo (void); static int mytoto (int) __attribute__((__weakref__("toto")));
#pragma weak foo ]], [[return (mytoto != 0);]])],
]], [[if (foo) foo ();]])], libgfor_cv_have_weakref=yes, libgfor_cv_have_weakref=no)
libgfor_cv_have_pragma_weak=yes, libgfor_cv_have_pragma_weak=no)]) CFLAGS="$save_CFLAGS"])
if test $libgfor_cv_have_pragma_weak = yes; then if test $libgfor_cv_have_weakref = yes; then
AC_DEFINE(SUPPORTS_WEAK, 1, AC_DEFINE(SUPPORTS_WEAKREF, 1,
[Define to 1 if the target supports #pragma weak]) [Define to 1 if the target supports weakref])
fi fi])
case "$host" in
*-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* | *-*-musl* )
AC_DEFINE(GTHREAD_USE_WEAK, 0,
[Define to 0 if the target shouldn't use #pragma weak])
;;
esac])
dnl Check whether target can unlink a file still open. dnl Check whether target can unlink a file still open.
AC_DEFUN([LIBGFOR_CHECK_UNLINK_OPEN_FILE], [ AC_DEFUN([LIBGFOR_CHECK_UNLINK_OPEN_FILE], [

View File

@ -1,8 +1,5 @@
/* config.h.in. Generated from configure.ac by autoheader. */ /* config.h.in. Generated from configure.ac by autoheader. */
/* Define to 0 if the target shouldn't use #pragma weak */
#undef GTHREAD_USE_WEAK
/* Define to 1 if you have the `access' function. */ /* Define to 1 if you have the `access' function. */
#undef HAVE_ACCESS #undef HAVE_ACCESS
@ -874,8 +871,8 @@
/* Define to 1 if you have the ANSI C header files. */ /* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS #undef STDC_HEADERS
/* Define to 1 if the target supports #pragma weak */ /* Define to 1 if the target supports weakref */
#undef SUPPORTS_WEAK #undef SUPPORTS_WEAKREF
/* Enable extensions on AIX 3, Interix. */ /* Enable extensions on AIX 3, Interix. */
#ifndef _ALL_SOURCE #ifndef _ALL_SOURCE

47
libgfortran/configure vendored
View File

@ -25953,51 +25953,48 @@ $as_echo "#define HAVE_SYNC_FETCH_AND_ADD 1" >>confdefs.h
fi fi
# Check out #pragma weak. # Check out weakref support.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pragma weak works" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the target supports weakref" >&5
$as_echo_n "checking whether pragma weak works... " >&6; } $as_echo_n "checking whether the target supports weakref... " >&6; }
if test "${libgfor_cv_have_pragma_weak+set}" = set; then : if test "${libgfor_cv_have_weakref+set}" = set; then :
$as_echo_n "(cached) " >&6 $as_echo_n "(cached) " >&6
else else
gfor_save_CFLAGS="$CFLAGS" save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Wunknown-pragmas" CFLAGS="$CFLAGS -Wunknown-pragmas -Werror"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext if test x$gcc_no_link = xyes; then
as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */ /* end confdefs.h. */
void foo (void); static int mytoto (int) __attribute__((__weakref__("toto")));
#pragma weak foo
int int
main () main ()
{ {
if (foo) foo (); return (mytoto != 0);
; ;
return 0; return 0;
} }
_ACEOF _ACEOF
if ac_fn_c_try_compile "$LINENO"; then : if ac_fn_c_try_link "$LINENO"; then :
libgfor_cv_have_pragma_weak=yes libgfor_cv_have_weakref=yes
else else
libgfor_cv_have_pragma_weak=no libgfor_cv_have_weakref=no
fi fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
CFLAGS="$save_CFLAGS"
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgfor_cv_have_pragma_weak" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgfor_cv_have_weakref" >&5
$as_echo "$libgfor_cv_have_pragma_weak" >&6; } $as_echo "$libgfor_cv_have_weakref" >&6; }
if test $libgfor_cv_have_pragma_weak = yes; then if test $libgfor_cv_have_weakref = yes; then
$as_echo "#define SUPPORTS_WEAK 1" >>confdefs.h $as_echo "#define SUPPORTS_WEAKREF 1" >>confdefs.h
fi fi
case "$host" in
*-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* | *-*-musl* )
$as_echo "#define GTHREAD_USE_WEAK 0" >>confdefs.h
;;
esac
# Various other checks on target # Various other checks on target

View File

@ -595,8 +595,8 @@ LIBGFOR_CHECK_ATTRIBUTE_ALIAS
# Check out sync builtins support. # Check out sync builtins support.
LIBGFOR_CHECK_SYNC_FETCH_AND_ADD LIBGFOR_CHECK_SYNC_FETCH_AND_ADD
# Check out #pragma weak. # Check out weakref support.
LIBGFOR_GTHREAD_WEAK LIBGFOR_CHECK_WEAKREF
# Various other checks on target # Various other checks on target
LIBGFOR_CHECK_UNLINK_OPEN_FILE LIBGFOR_CHECK_UNLINK_OPEN_FILE

View File

@ -45,16 +45,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* Weakref trickery for clock_gettime(). On Glibc <= 2.16, /* Weakref trickery for clock_gettime(). On Glibc <= 2.16,
clock_gettime() requires us to link in librt, which also pulls in clock_gettime() requires us to link in librt, which also pulls in
libpthread. In order to avoid this by default, only call libpthread. In order to avoid this by default, only call
clock_gettime() through a weak reference. clock_gettime() through a weak reference. */
#if SUPPORTS_WEAKREF && defined(HAVE_CLOCK_GETTIME_LIBRT)
Some targets don't support weak undefined references; on these
GTHREAD_USE_WEAK is 0. So we need to define it to 1 on other
targets. */
#ifndef GTHREAD_USE_WEAK
#define GTHREAD_USE_WEAK 1
#endif
#if SUPPORTS_WEAK && GTHREAD_USE_WEAK && defined(HAVE_CLOCK_GETTIME_LIBRT)
static int weak_gettime (clockid_t, struct timespec *) static int weak_gettime (clockid_t, struct timespec *)
__attribute__((__weakref__("clock_gettime"))); __attribute__((__weakref__("clock_gettime")));
#endif #endif
@ -90,7 +82,7 @@ gf_gettime_mono (time_t * secs, long * fracsecs, long * tck)
*fracsecs = ts.tv_nsec; *fracsecs = ts.tv_nsec;
return err; return err;
#else #else
#if defined(HAVE_CLOCK_GETTIME_LIBRT) && SUPPORTS_WEAK && GTHREAD_USE_WEAK #if SUPPORTS_WEAKREF && defined(HAVE_CLOCK_GETTIME_LIBRT)
if (weak_gettime) if (weak_gettime)
{ {
struct timespec ts; struct timespec ts;