summaryrefslogtreecommitdiff
path: root/lib/xray
diff options
context:
space:
mode:
authorDouglas Yung <douglas.yung@sony.com>2017-04-12 01:24:48 +0000
committerDouglas Yung <douglas.yung@sony.com>2017-04-12 01:24:48 +0000
commit379a34bac1483eb835f96072829253390ef42df9 (patch)
tree8d436c5bdb6abb7f4677ec1d5f595c80c2122b38 /lib/xray
parentb6240efd1f34bf5e72bd5350166957d829a10d7d (diff)
[XRay][compiler-rt] Add another work-around to XRay FDR tests when TSC emulation is needed
This patch applies a work-around to the XRay FDR tests when TSC emulation is needed because the processor frequency cannot be determined. This fixes PR32620 using the suggestion given by Dean in comment 1. Reviewers: dberris Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D31967 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@300017 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/xray')
-rw-r--r--lib/xray/xray_fdr_logging.cc3
-rw-r--r--lib/xray/xray_fdr_logging_impl.h4
2 files changed, 5 insertions, 2 deletions
diff --git a/lib/xray/xray_fdr_logging.cc b/lib/xray/xray_fdr_logging.cc
index f2ff4076e..5c6bbd41c 100644
--- a/lib/xray/xray_fdr_logging.cc
+++ b/lib/xray/xray_fdr_logging.cc
@@ -120,7 +120,8 @@ XRayLogFlushStatus fdrLoggingFlush() XRAY_NEVER_INSTRUMENT {
XRayFileHeader Header;
Header.Version = 1;
Header.Type = FileTypes::FDR_LOG;
- Header.CycleFrequency = getTSCFrequency();
+ Header.CycleFrequency = probeRequiredCPUFeatures()
+ ? getTSCFrequency() : __xray::NanosecondsPerSecond;
// FIXME: Actually check whether we have 'constant_tsc' and 'nonstop_tsc'
// before setting the values in the header.
Header.ConstantTSC = 1;
diff --git a/lib/xray/xray_fdr_logging_impl.h b/lib/xray/xray_fdr_logging_impl.h
index 20e89d6c1..bc795b3b6 100644
--- a/lib/xray/xray_fdr_logging_impl.h
+++ b/lib/xray/xray_fdr_logging_impl.h
@@ -423,7 +423,9 @@ static inline void processFunctionHook(
return;
}
- uint64_t CycleFrequency = getTSCFrequency();
+ uint64_t CycleFrequency = probeRequiredCPUFeatures()
+ ? getTSCFrequency()
+ : __xray::NanosecondsPerSecond;
NumberOfTicksThreshold = CycleFrequency *
flags()->xray_fdr_log_func_duration_threshold_us /
1000000;