summaryrefslogtreecommitdiffstats
path: root/libstdc++-v3/src/c++11/compatibility-chrono.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/src/c++11/compatibility-chrono.cc')
-rw-r--r--libstdc++-v3/src/c++11/compatibility-chrono.cc87
1 files changed, 59 insertions, 28 deletions
diff --git a/libstdc++-v3/src/c++11/compatibility-chrono.cc b/libstdc++-v3/src/c++11/compatibility-chrono.cc
index ada0946619b..fd67daec4c5 100644
--- a/libstdc++-v3/src/c++11/compatibility-chrono.cc
+++ b/libstdc++-v3/src/c++11/compatibility-chrono.cc
@@ -22,37 +22,68 @@
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// <http://www.gnu.org/licenses/>.
-#define _GLIBCXX_COMPATIBILITY_CXX0X
#include <bits/c++config.h>
-#if defined(_GLIBCXX_SYMVER_GNU) && defined(_GLIBCXX_SHARED) \
- && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE)\
- && defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
+#ifdef _GLIBCXX_USE_C99_STDINT_TR1
+#ifdef _GLIBCXX_USE_GETTIMEOFDAY
+#include <sys/time.h>
+#endif
+
+#define system_clock system_clockXX
#define steady_clock steady_clockXX
-#include "chrono.cc"
-
-// The rename syntax for default exported names is
-// asm (".symver name1,exportedname@GLIBCXX_3.4.17")
-// asm (".symver name2,exportedname@@GLIBCXX_3.4.19")
-// In the future, GLIBCXX_ABI > 6 should remove all uses of
-// _GLIBCXX_*_SYMVER macros in this file.
-
-#define _GLIBCXX_3_4_17_SYMVER(XXname, name) \
- extern "C" void \
- _X##name() \
- __attribute__ ((alias(#XXname))); \
- asm (".symver " "_X" #name "," #name "@GLIBCXX_3.4.17");
-
-#define _GLIBCXX_3_4_19_SYMVER(XXname, name) \
- extern "C" void \
- _Y##name() \
- __attribute__ ((alias(#XXname))); \
- asm (".symver " "_Y" #name "," #name "@@GLIBCXX_3.4.19");
-
-_GLIBCXX_3_4_17_SYMVER(_ZNSt6chrono14steady_clockXX3nowEv,
- _ZNSt6chrono12steady_clock3nowEv)
-_GLIBCXX_3_4_19_SYMVER(_ZNSt6chrono14steady_clockXX3nowEv,
- _ZNSt6chrono12steady_clock3nowEv)
+#include <chrono>
+#undef system_clock
+#undef steady_clock
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+ namespace chrono
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ // NB: Default configuration was no realtime.
+ struct system_clock
+ {
+#ifdef _GLIBCXX_USE_GETTIMEOFDAY
+ typedef chrono::microseconds duration;
+#else
+ typedef chrono::seconds duration;
#endif
+
+ typedef duration::rep rep;
+ typedef duration::period period;
+ typedef chrono::time_point<system_clock, duration> time_point;
+
+ static_assert(system_clock::duration::min()
+ < system_clock::duration::zero(),
+ "a clock's minimum duration cannot be less than its epoch");
+
+ static constexpr bool is_steady = false;
+
+ static time_point
+ now() noexcept;
+ };
+
+ constexpr bool system_clock::is_steady;
+
+ system_clock::time_point
+ system_clock::now() noexcept
+ {
+#ifdef _GLIBCXX_USE_GETTIMEOFDAY
+ timeval tv;
+ // EINVAL, EFAULT
+ gettimeofday(&tv, 0);
+ return time_point(duration(chrono::seconds(tv.tv_sec)
+ + chrono::microseconds(tv.tv_usec)));
+#else
+ std::time_t __sec = std::time(0);
+ return system_clock::from_time_t(__sec);
+#endif
+ }
+
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace chrono
+} // namespace std
+
+#endif // _GLIBCXX_USE_C99_STDINT_TR1
OpenPOWER on IntegriCloud