<div dir="ltr">Sent out <a href="https://reviews.llvm.org/D41325">https://reviews.llvm.org/D41325</a> for review.<div>That *should* fix it, but I have no way to test it. Please let me know.</div><div>I am not sure if you can add yourself as a reviewer, if so, please do.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Dec 16, 2017 at 9:51 AM, Krzysztof Parzyszek <span dir="ltr"><<a href="mailto:kparzysz@codeaurora.org" target="_blank">kparzysz@codeaurora.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This broke FreeBSD build:<br>
<br>
In file included from /w/src/<a href="http://llvm.org/projects/compiler-rt/lib/lsan/lsan_common.cc:15" rel="noreferrer" target="_blank">llvm.org/projects/compi<wbr>ler-rt/lib/lsan/lsan_common.<wbr>cc:15</a>:<br>
In file included from /w/src/<a href="http://llvm.org/projects/compiler-rt/lib/lsan/lsan_common.h:18" rel="noreferrer" target="_blank">llvm.org/projects/compi<wbr>ler-rt/lib/lsan/lsan_common.h:<wbr>18</a>:<br>
In file included from /w/src/<a href="http://llvm.org/projects/compiler-rt/lib/lsan/../sanitizer_common/sanitizer_allocator.h:23" rel="noreferrer" target="_blank">llvm.org/projects/compi<wbr>ler-rt/lib/lsan/../sanitizer_<wbr>common/sanitizer_allocator.h:<wbr>23</a>:<br>
In file included from /w/src/<a href="http://llvm.org/projects/compiler-rt/lib/lsan/../sanitizer_common/sanitizer_procmaps.h:23" rel="noreferrer" target="_blank">llvm.org/projects/compi<wbr>ler-rt/lib/lsan/../sanitizer_<wbr>common/sanitizer_procmaps.h:23</a><wbr>:<br>
/w/src/<a href="http://llvm.org/projects/compiler-rt/lib/lsan/../sanitizer_common/sanitizer_linux.h:49:29" rel="noreferrer" target="_blank">llvm.org/projects/compi<wbr>ler-rt/lib/lsan/../sanitizer_<wbr>common/sanitizer_linux.h:49:29</a><wbr>: error: unknown type name '__sanitizer_clockid_t'; did you mean '__sanitizer_clock_t'?<br>
uptr internal_clock_gettime(__sanit<wbr>izer_clockid_t clk_id, void *tp);<br>
                            ^~~~~~~~~~~~~~~~~~~~~<br>
                            __sanitizer_clock_t<br>
/w/src/<a href="http://llvm.org/projects/compiler-rt/lib/lsan/../sanitizer_common/sanitizer_platform_limits_posix.h:530:15" rel="noreferrer" target="_blank">llvm.org/projects/compi<wbr>ler-rt/lib/lsan/../sanitizer_<wbr>common/sanitizer_platform_<wbr>limits_posix.h:530:15</a>: note: '__sanitizer_clock_t' declared here<br>
  typedef int __sanitizer_clock_t;<br>
              ^<br>
<br>
-Krzysztof<div><div class="h5"><br>
<br>
<br>
On 12/13/2017 10:23 AM, Kostya Kortchinsky via llvm-commits wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
Author: cryptoad<br>
Date: Wed Dec 13 08:23:54 2017<br>
New Revision: 320594<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=320594&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=320594&view=rev</a><br>
Log:<br>
[sanitizer] Introduce a vDSO aware timing function<br>
<br>
Summary:<br>
See D40657 & D40679 for previous versions of this patch & description.<br>
<br>
A couple of things were fixed here to have it not break some bots.<br>
Weak symbols can't be used with `SANITIZER_GO` so the previous version was<br>
breakin TsanGo. I set up some additional local tests and those pass now.<br>
<br>
I changed the workaround for the glibc vDSO issue: `__progname` is initialized<br>
after the vDSO and is actually public and of known type, unlike<br>
`__vdso_clock_gettime`. This works better, and with all compilers.<br>
<br>
The rest is the same.<br>
<br>
Reviewers: alekseyshl<br>
<br>
Reviewed By: alekseyshl<br>
<br>
Subscribers: srhines, kubamracek, krytarowski, llvm-commits, #sanitizers<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D41121" rel="noreferrer" target="_blank">https://reviews.llvm.org/D4112<wbr>1</a><br>
<br>
Modified:<br>
     compiler-rt/trunk/lib/sanitiz<wbr>er_common/sanitizer_allocator_<wbr>primary64.h<br>
     compiler-rt/trunk/lib/sanitiz<wbr>er_common/sanitizer_common.h<br>
     compiler-rt/trunk/lib/sanitiz<wbr>er_common/sanitizer_common_<wbr>interceptors.inc<br>
     compiler-rt/trunk/lib/sanitiz<wbr>er_common/sanitizer_fuchsia.cc<br>
     compiler-rt/trunk/lib/sanitiz<wbr>er_common/sanitizer_linux.cc<br>
     compiler-rt/trunk/lib/sanitiz<wbr>er_common/sanitizer_linux.h<br>
     compiler-rt/trunk/lib/sanitiz<wbr>er_common/sanitizer_linux_<wbr>libcdep.cc<br>
     compiler-rt/trunk/lib/sanitiz<wbr>er_common/sanitizer_mac.cc<br>
     compiler-rt/trunk/lib/sanitiz<wbr>er_common/sanitizer_syscall_<wbr>generic.inc<br>
     compiler-rt/trunk/lib/sanitiz<wbr>er_common/sanitizer_win.cc<br>
     compiler-rt/trunk/lib/scudo/s<wbr>cudo_allocator.cpp<br>
     compiler-rt/trunk/lib/scudo/s<wbr>cudo_tsd.h<br>
<br>
Modified: compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_allocator_<wbr>primary64.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_allocator_primary64.h?rev=320594&r1=320593&r2=320594&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/compiler-rt/trunk/lib/sa<wbr>nitizer_common/sanitizer_alloc<wbr>ator_primary64.h?rev=320594&<wbr>r1=320593&r2=320594&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_allocator_<wbr>primary64.h (original)<br>
+++ compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_allocator_<wbr>primary64.h Wed Dec 13 08:23:54 2017<br>
@@ -697,7 +697,7 @@ class SizeClassAllocator64 {<br>
          // Do it only when the feature is turned on, to avoid a potentially<br>
          // extraneous syscall.<br>
          if (ReleaseToOSIntervalMs() >= 0)<br>
-          region->rtoi.last_release_at_n<wbr>s = NanoTime();<br>
+          region->rtoi.last_release_at_n<wbr>s = MonotonicNanoTime();<br>
        }<br>
        // Do the mmap for the user memory.<br>
        const uptr user_map_size =<br>
@@ -827,7 +827,7 @@ class SizeClassAllocator64 {<br>
          return;<br>
          if (region->rtoi.last_release_at_<wbr>ns + interval_ms * 1000000ULL ><br>
-          NanoTime()) {<br>
+          MonotonicNanoTime()) {<br>
          return;  // Memory was returned recently.<br>
        }<br>
      }<br>
@@ -844,6 +844,6 @@ class SizeClassAllocator64 {<br>
        region->rtoi.num_releases += memory_mapper.GetReleasedRange<wbr>sCount();<br>
        region->rtoi.last_released_byt<wbr>es = memory_mapper.GetReleasedBytes<wbr>();<br>
      }<br>
-    region->rtoi.last_release_at_n<wbr>s = NanoTime();<br>
+    region->rtoi.last_release_at_n<wbr>s = MonotonicNanoTime();<br>
    }<br>
  };<br>
<br>
Modified: compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_common.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=320594&r1=320593&r2=320594&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/compiler-rt/trunk/lib/sa<wbr>nitizer_common/sanitizer_commo<wbr>n.h?rev=320594&r1=320593&r2=<wbr>320594&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_common.h (original)<br>
+++ compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_common.h Wed Dec 13 08:23:54 2017<br>
@@ -295,6 +295,7 @@ uptr GetTlsSize();<br>
  void SleepForSeconds(int seconds);<br>
  void SleepForMillis(int millis);<br>
  u64 NanoTime();<br>
+u64 MonotonicNanoTime();<br>
  int Atexit(void (*function)(void));<br>
  void SortArray(uptr *array, uptr size);<br>
  void SortArray(u32 *array, uptr size);<br>
<br>
Modified: compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_common_<wbr>interceptors.inc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc?rev=320594&r1=320593&r2=320594&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/compiler-rt/trunk/lib/sa<wbr>nitizer_common/sanitizer_commo<wbr>n_interceptors.inc?rev=320594&<wbr>r1=320593&r2=320594&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_common_<wbr>interceptors.inc (original)<br>
+++ compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_common_<wbr>interceptors.inc Wed Dec 13 08:23:54 2017<br>
@@ -2045,6 +2045,13 @@ INTERCEPTOR(int, clock_gettime, u32 clk_<br>
    }<br>
    return res;<br>
  }<br>
+namespace __sanitizer {<br>
+extern "C" {<br>
+int real_clock_gettime(u32 clk_id, void *tp) {<br>
+  return REAL(clock_gettime)(clk_id, tp);<br>
+}<br>
+}  // extern "C"<br>
+}  // namespace __sanitizer<br>
  INTERCEPTOR(int, clock_settime, u32 clk_id, const void *tp) {<br>
    void *ctx;<br>
    COMMON_INTERCEPTOR_ENTER(ctx, clock_settime, clk_id, tp);<br>
<br>
Modified: compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_fuchsia.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_fuchsia.cc?rev=320594&r1=320593&r2=320594&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/compiler-rt/trunk/lib/sa<wbr>nitizer_common/sanitizer_fuchs<wbr>ia.cc?rev=320594&r1=320593&r2=<wbr>320594&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_fuchsia.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_fuchsia.cc Wed Dec 13 08:23:54 2017<br>
@@ -51,6 +51,8 @@ unsigned int internal_sleep(unsigned int<br>
    u64 NanoTime() { return _zx_time_get(ZX_CLOCK_UTC); }<br>
  +u64 MonotonicNanoTime() { return _zx_time_get(ZX_CLOCK_MONOTONI<wbr>C); }<br>
+<br>
  uptr internal_getpid() {<br>
    zx_info_handle_basic_t info;<br>
    zx_status_t status =<br>
<br>
Modified: compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_linux.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc?rev=320594&r1=320593&r2=320594&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/compiler-rt/trunk/lib/sa<wbr>nitizer_common/sanitizer_linux<wbr>.cc?rev=320594&r1=320593&r2=<wbr>320594&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_linux.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_linux.cc Wed Dec 13 08:23:54 2017<br>
@@ -459,6 +459,10 @@ u64 NanoTime() {<br>
    return (u64)tv.tv_sec * 1000*1000*1000 + tv.tv_usec * 1000;<br>
  }<br>
  +uptr internal_clock_gettime(__sanit<wbr>izer_clockid_t clk_id, void *tp) {<br>
+  return internal_syscall_ptr(SYSCALL(c<wbr>lock_gettime), clk_id, tp);<br>
+}<br>
+<br>
  // Like getenv, but reads env directly from /proc (on Linux) or parses the<br>
  // 'environ' array (on FreeBSD) and does not use libc. This function should be<br>
  // called first inside __asan_init.<br>
<br>
Modified: compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_linux.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.h?rev=320594&r1=320593&r2=320594&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/compiler-rt/trunk/lib/sa<wbr>nitizer_common/sanitizer_linux<wbr>.h?rev=320594&r1=320593&r2=<wbr>320594&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_linux.h (original)<br>
+++ compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_linux.h Wed Dec 13 08:23:54 2017<br>
@@ -46,6 +46,7 @@ uptr internal_getdents(fd_t fd, struct l<br>
  uptr internal_sigaltstack(const void* ss, void* oss);<br>
  uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set,<br>
      __sanitizer_sigset_t *oldset);<br>
+uptr internal_clock_gettime(__sanit<wbr>izer_clockid_t clk_id, void *tp);<br>
    // Linux-only syscalls.<br>
  #if SANITIZER_LINUX<br>
<br>
Modified: compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_linux_<wbr>libcdep.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc?rev=320594&r1=320593&r2=320594&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/compiler-rt/trunk/lib/sa<wbr>nitizer_common/sanitizer_linux<wbr>_libcdep.cc?rev=320594&r1=<wbr>320593&r2=320594&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_linux_<wbr>libcdep.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_linux_<wbr>libcdep.cc Wed Dec 13 08:23:54 2017<br>
@@ -707,6 +707,47 @@ void LogMessageOnPrintf(const char *str)<br>
    #endif  // SANITIZER_LINUX<br>
  +#if SANITIZER_LINUX && !SANITIZER_GO<br>
+// glibc crashes when using clock_gettime from a preinit_array function as the<br>
+// vDSO function pointers haven't been initialized yet. __progname is<br>
+// initialized after the vDSO function pointers, so if it exists, is not null<br>
+// and is not empty, we can use clock_gettime.<br>
+extern "C" SANITIZER_WEAK_ATTRIBUTE char *__progname;<br>
+INLINE bool CanUseVDSO() {<br>
+  // Bionic is safe, it checks for the vDSO function pointers to be initialized.<br>
+  if (SANITIZER_ANDROID)<br>
+    return true;<br>
+  if (&__progname && __progname && *__progname)<br>
+    return true;<br>
+  return false;<br>
+}<br>
+<br>
+// MonotonicNanoTime is a timing function that can leverage the vDSO by calling<br>
+// clock_gettime. real_clock_gettime only exists if clock_gettime is<br>
+// intercepted, so define it weakly and use it if available.<br>
+extern "C" SANITIZER_WEAK_ATTRIBUTE<br>
+int real_clock_gettime(u32 clk_id, void *tp);<br>
+u64 MonotonicNanoTime() {<br>
+  timespec ts;<br>
+  if (CanUseVDSO()) {<br>
+    if (&real_clock_gettime)<br>
+      real_clock_gettime(CLOCK_MONOT<wbr>ONIC, &ts);<br>
+    else<br>
+      clock_gettime(CLOCK_MONOTONIC, &ts);<br>
+  } else {<br>
+    internal_clock_gettime(CLOCK_M<wbr>ONOTONIC, &ts);<br>
+  }<br>
+  return (u64)ts.tv_sec * (1000ULL * 1000 * 1000) + ts.tv_nsec;<br>
+}<br>
+#else<br>
+// Non-Linux & Go always use the syscall.<br>
+u64 MonotonicNanoTime() {<br>
+  timespec ts;<br>
+  internal_clock_gettime(CLOCK_M<wbr>ONOTONIC, &ts);<br>
+  return (u64)ts.tv_sec * (1000ULL * 1000 * 1000) + ts.tv_nsec;<br>
+}<br>
+#endif  // SANITIZER_LINUX && !SANITIZER_GO<br>
+<br>
  } // namespace __sanitizer<br>
  -#endif // SANITIZER_FREEBSD || SANITIZER_LINUX<br>
+#endif  // SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD<br>
<br>
Modified: compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_mac.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc?rev=320594&r1=320593&r2=320594&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/compiler-rt/trunk/lib/sa<wbr>nitizer_common/sanitizer_mac.<wbr>cc?rev=320594&r1=320593&r2=<wbr>320594&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_mac.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_mac.cc Wed Dec 13 08:23:54 2017<br>
@@ -365,6 +365,10 @@ u64 NanoTime() {<br>
    return 0;<br>
  }<br>
  +u64 MonotonicNanoTime() {<br>
+  return 0;<br>
+}<br>
+<br>
  uptr GetTlsSize() {<br>
    return 0;<br>
  }<br>
<br>
Modified: compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_syscall_<wbr>generic.inc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_syscall_generic.inc?rev=320594&r1=320593&r2=320594&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/compiler-rt/trunk/lib/sa<wbr>nitizer_common/sanitizer_sysca<wbr>ll_generic.inc?rev=320594&r1=<wbr>320593&r2=320594&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_syscall_<wbr>generic.inc (original)<br>
+++ compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_syscall_<wbr>generic.inc Wed Dec 13 08:23:54 2017<br>
@@ -36,6 +36,7 @@<br>
  # define SYS_sigaltstack SYS___sigaltstack14<br>
  # define SYS_sigprocmask SYS___sigprocmask14<br>
  # define SYS_nanosleep SYS___nanosleep50<br>
+# define SYS_clock_gettime SYS___clock_gettime50<br>
  # if SANITIZER_WORDSIZE == 64<br>
  #  define internal_syscall_ptr  __syscall<br>
  # else<br>
<br>
Modified: compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_win.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc?rev=320594&r1=320593&r2=320594&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/compiler-rt/trunk/lib/sa<wbr>nitizer_common/sanitizer_win.<wbr>cc?rev=320594&r1=320593&r2=<wbr>320594&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_win.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitize<wbr>r_common/sanitizer_win.cc Wed Dec 13 08:23:54 2017<br>
@@ -505,6 +505,10 @@ u64 NanoTime() {<br>
    return 0;<br>
  }<br>
  +u64 MonotonicNanoTime() {<br>
+  return 0;<br>
+}<br>
+<br>
  void Abort() {<br>
    internal__exit(3);<br>
  }<br>
<br>
Modified: compiler-rt/trunk/lib/scudo/sc<wbr>udo_allocator.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/scudo/scudo_allocator.cpp?rev=320594&r1=320593&r2=320594&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/compiler-rt/trunk/lib/sc<wbr>udo/scudo_allocator.cpp?rev=32<wbr>0594&r1=320593&r2=320594&view=<wbr>diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/scudo/sc<wbr>udo_allocator.cpp (original)<br>
+++ compiler-rt/trunk/lib/scudo/sc<wbr>udo_allocator.cpp Wed Dec 13 08:23:54 2017<br>
@@ -301,7 +301,7 @@ struct ScudoAllocator {<br>
        CheckRssLimit = HardRssLimitMb || SoftRssLimitMb;<br>
      if (CheckRssLimit)<br>
-      atomic_store_relaxed(&RssLastC<wbr>heckedAtNS, NanoTime());<br>
+      atomic_store_relaxed(&RssLastC<wbr>heckedAtNS, MonotonicNanoTime());<br>
    }<br>
      // Helper function that checks for a valid Scudo chunk. nullptr isn't.<br>
@@ -319,7 +319,7 @@ struct ScudoAllocator {<br>
    // it can, every 100ms, otherwise it will just return the current one.<br>
    bool isRssLimitExceeded() {<br>
      u64 LastCheck = atomic_load_relaxed(&RssLastCh<wbr>eckedAtNS);<br>
-    const u64 CurrentCheck = NanoTime();<br>
+    const u64 CurrentCheck = MonotonicNanoTime();<br>
      if (LIKELY(CurrentCheck < LastCheck + (100ULL * 1000000ULL)))<br>
        return atomic_load_relaxed(&RssLimitE<wbr>xceeded);<br>
      if (!atomic_compare_exchange_weak<wbr>(&RssLastCheckedAtNS, &LastCheck,<br>
<br>
Modified: compiler-rt/trunk/lib/scudo/sc<wbr>udo_tsd.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/scudo/scudo_tsd.h?rev=320594&r1=320593&r2=320594&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/compiler-rt/trunk/lib/sc<wbr>udo/scudo_tsd.h?rev=320594&r1=<wbr>320593&r2=320594&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/scudo/sc<wbr>udo_tsd.h (original)<br>
+++ compiler-rt/trunk/lib/scudo/sc<wbr>udo_tsd.h Wed Dec 13 08:23:54 2017<br>
@@ -36,7 +36,7 @@ struct ALIGNED(64) ScudoTSD {<br>
        return true;<br>
      }<br>
      if (atomic_load_relaxed(&Preceden<wbr>ce) == 0)<br>
-      atomic_store_relaxed(&Preceden<wbr>ce, NanoTime());<br>
+      atomic_store_relaxed(&Preceden<wbr>ce, MonotonicNanoTime());<br>
      return false;<br>
    }<br>
  <br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
<br>
<br></div></div>
---<br>
This email has been checked for viruses by AVG.<br>
<a href="http://www.avg.com" rel="noreferrer" target="_blank">http://www.avg.com</a><br>
<br>
</blockquote>
<br>
</blockquote></div><br></div>