[PATCH] D41121: [sanitizer] Introduce a vDSO aware timing function
    Aleksey Shlyapnikov via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Tue Dec 12 11:32:22 PST 2017
    
    
  
alekseyshl added inline comments.
================
Comment at: lib/sanitizer_common/sanitizer_linux_libcdep.cc:747
+  return (u64)ts.tv_sec * (1000ULL * 1000 * 1000) + ts.tv_nsec;
+}
+
----------------
Now it seems that it would be easier to parse if we separate implementations completely:
  #if SANITIZER_LINUX && !SANITIZER_GO
  ...all the defs...
  u64 MonotonicNanoTime() {
    timespec ts;
    if (CanUseVDSO()) {
      if (&real_clock_gettime)
        real_clock_gettime(CLOCK_MONOTONIC, &ts);
      else
        clock_gettime(CLOCK_MONOTONIC, &ts);
    } else {
      internal_clock_gettime(CLOCK_MONOTONIC, &ts);
    }
    return (u64)ts.tv_sec * (1000ULL * 1000 * 1000) + ts.tv_nsec;
  }
  #else // !(SANITIZER_LINUX && !SANITIZER_GO)
  u64 MonotonicNanoTime() {
    timespec ts;
    internal_clock_gettime(CLOCK_MONOTONIC, &ts);
    return (u64)ts.tv_sec * (1000ULL * 1000 * 1000) + ts.tv_nsec;
  }
  #endif // SANITIZER_LINUX && !SANITIZER_GO
Also can do 
  u64 MonotonicNanoTime() {
    timespec ts;
    MonotonicNanoTimeImpl(&ts)
    return (u64)ts.tv_sec * (1000ULL * 1000 * 1000) + ts.tv_nsec;
  }
and define inlined MonotonicNanoTimeImpls for each case, but that is up to you.
Repository:
  rCRT Compiler Runtime
https://reviews.llvm.org/D41121
    
    
More information about the llvm-commits
mailing list