]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/blob
534154b412bd36d4bfeb464fa504d7dcbee53f8e
[thirdparty/openembedded/openembedded-core-contrib.git] /
1 From 137ed44dcdd5890433b8d0348dcd2b7624b7c3d6 Mon Sep 17 00:00:00 2001
2 From: jb <jb@138bc75d-0d04-0410-961f-82ee72b054a4>
3 Date: Mon, 18 Apr 2011 15:49:16 +0000
4 Subject: [PATCH 140/200] PR 47571 Fix weakref trickery breakage on alpha-dec-osf
5
6 This is a backport from mainline r172469.
7
8 It also removes the temporary fix from r171095.
9
10
11 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172656 138bc75d-0d04-0410-961f-82ee72b054a4
12
13 index 395a1ea..62c3b45 100644
14 --- a/libgfortran/acinclude.m4
15 +++ b/libgfortran/acinclude.m4
16 @@ -108,7 +108,7 @@ AC_DEFUN([LIBGFOR_GTHREAD_WEAK], [
17 [Define to 1 if the target supports #pragma weak])
18 fi
19 case "$host" in
20 - *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* )
21 + *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* | alpha*-dec-osf* )
22 AC_DEFINE(GTHREAD_USE_WEAK, 0,
23 [Define to 0 if the target shouldn't use #pragma weak])
24 ;;
25 diff --git a/libgfortran/config.h.in b/libgfortran/config.h.in
26 index a255bdc..a99ba69 100644
27 --- a/libgfortran/config.h.in
28 +++ b/libgfortran/config.h.in
29 @@ -210,6 +210,9 @@
30 /* Define to 1 if you have the `clock_gettime' function. */
31 #undef HAVE_CLOCK_GETTIME
32
33 +/* Define to 1 if you have the `clock_gettime' function in librt. */
34 +#undef HAVE_CLOCK_GETTIME_LIBRT
35 +
36 /* libm includes clog */
37 #undef HAVE_CLOG
38
39 diff --git a/libgfortran/configure b/libgfortran/configure
40 index 5a81735..ef4712a 100755
41 --- a/libgfortran/configure
42 +++ b/libgfortran/configure
43 @@ -25314,10 +25314,11 @@ $as_echo "#define HAVE_FEENABLEEXCEPT 1" >>confdefs.h
44 fi
45
46
47 -# At least for glibc, clock_gettime is in librt. But don't pull that
48 -# in if it still doesn't give us the function we want.
49 -# This test is copied from libgomp, and modified to not link in -lrt
50 -# as libgfortran calls clock_gettime via a weak reference.
51 +# At least for glibc and Tru64, clock_gettime is in librt. But don't
52 +# pull that in if it still doesn't give us the function we want. This
53 +# test is copied from libgomp, and modified to not link in -lrt as
54 +# libgfortran calls clock_gettime via a weak reference if it's found
55 +# in librt.
56 if test $ac_cv_func_clock_gettime = no; then
57 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
58 $as_echo_n "checking for clock_gettime in -lrt... " >&6; }
59 @@ -25360,7 +25361,7 @@ fi
60 $as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
61 if test "x$ac_cv_lib_rt_clock_gettime" = x""yes; then :
62
63 -$as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h
64 +$as_echo "#define HAVE_CLOCK_GETTIME_LIBRT 1" >>confdefs.h
65
66 fi
67
68 @@ -25698,7 +25699,7 @@ $as_echo "#define SUPPORTS_WEAK 1" >>confdefs.h
69
70 fi
71 case "$host" in
72 - *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* )
73 + *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* | alpha*-dec-osf* )
74
75 $as_echo "#define GTHREAD_USE_WEAK 0" >>confdefs.h
76
77 diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac
78 index e265ccd..86d7161 100644
79 --- a/libgfortran/configure.ac
80 +++ b/libgfortran/configure.ac
81 @@ -491,14 +491,15 @@ LIBGFOR_CHECK_FLOAT128
82 # Check for GNU libc feenableexcept
83 AC_CHECK_LIB([m],[feenableexcept],[have_feenableexcept=yes AC_DEFINE([HAVE_FEENABLEEXCEPT],[1],[libm includes feenableexcept])])
84
85 -# At least for glibc, clock_gettime is in librt. But don't pull that
86 -# in if it still doesn't give us the function we want.
87 -# This test is copied from libgomp, and modified to not link in -lrt
88 -# as libgfortran calls clock_gettime via a weak reference.
89 +# At least for glibc and Tru64, clock_gettime is in librt. But don't
90 +# pull that in if it still doesn't give us the function we want. This
91 +# test is copied from libgomp, and modified to not link in -lrt as
92 +# libgfortran calls clock_gettime via a weak reference if it's found
93 +# in librt.
94 if test $ac_cv_func_clock_gettime = no; then
95 AC_CHECK_LIB(rt, clock_gettime,
96 - [AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
97 - [Define to 1 if you have the `clock_gettime' function.])])
98 + [AC_DEFINE(HAVE_CLOCK_GETTIME_LIBRT, 1,
99 + [Define to 1 if you have the `clock_gettime' function in librt.])])
100 fi
101
102 # Check for SysV fpsetmask
103 diff --git a/libgfortran/intrinsics/system_clock.c b/libgfortran/intrinsics/system_clock.c
104 index adf535d..f4bac07 100644
105 --- a/libgfortran/intrinsics/system_clock.c
106 +++ b/libgfortran/intrinsics/system_clock.c
107 @@ -29,21 +29,16 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
108
109 #include "time_1.h"
110
111 -/* Tru64 UNIX doesn't support weakrefs, so the trickery below completely
112 - breaks libgfortran (PR fortran/47571). Don't use clock_gettime until a
113 - proper solution has been tested. */
114 -#if defined(__alpha__) && defined(__osf__)
115 -#undef HAVE_CLOCK_GETTIME
116 -#endif
117
118 -#ifdef HAVE_CLOCK_GETTIME
119 /* POSIX states that CLOCK_REALTIME must be present if clock_gettime
120 is available, others are optional. */
121 +#if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_CLOCK_GETTIME_LIBRT)
122 #ifdef CLOCK_MONOTONIC
123 #define GF_CLOCK_MONOTONIC CLOCK_MONOTONIC
124 #else
125 #define GF_CLOCK_MONOTONIC CLOCK_REALTIME
126 #endif
127 +#endif
128
129 /* Weakref trickery for clock_gettime(). On Glibc, clock_gettime()
130 requires us to link in librt, which also pulls in libpthread. In
131 @@ -57,15 +52,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
132 #define GTHREAD_USE_WEAK 1
133 #endif
134
135 -#if SUPPORTS_WEAK && GTHREAD_USE_WEAK
136 +#if SUPPORTS_WEAK && GTHREAD_USE_WEAK && defined(HAVE_CLOCK_GETTIME_LIBRT)
137 static int weak_gettime (clockid_t, struct timespec *)
138 __attribute__((__weakref__("clock_gettime")));
139 -#else
140 -static inline int weak_gettime (clockid_t clk_id, struct timespec *res)
141 -{
142 - return clock_gettime (clk_id, res);
143 -}
144 -#endif
145 #endif
146
147
148 @@ -91,6 +80,13 @@ gf_gettime_mono (time_t * secs, long * nanosecs)
149 {
150 int err;
151 #ifdef HAVE_CLOCK_GETTIME
152 + struct timespec ts;
153 + err = clock_gettime (GF_CLOCK_MONOTONIC, &ts);
154 + *secs = ts.tv_sec;
155 + *nanosecs = ts.tv_nsec;
156 + return err;
157 +#else
158 +#if defined(HAVE_CLOCK_GETTIME_LIBRT) && SUPPORTS_WEAK && GTHREAD_USE_WEAK
159 if (weak_gettime)
160 {
161 struct timespec ts;
162 @@ -103,6 +99,7 @@ gf_gettime_mono (time_t * secs, long * nanosecs)
163 err = gf_gettime (secs, nanosecs);
164 *nanosecs *= 1000;
165 return err;
166 +#endif
167 }
168
169 extern void system_clock_4 (GFC_INTEGER_4 *, GFC_INTEGER_4 *, GFC_INTEGER_4 *);
170 --
171 1.7.0.4
172