summaryrefslogtreecommitdiffstats
path: root/llvm/lib/XRay/RecordInitializer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/XRay/RecordInitializer.cpp')
-rw-r--r--llvm/lib/XRay/RecordInitializer.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/llvm/lib/XRay/RecordInitializer.cpp b/llvm/lib/XRay/RecordInitializer.cpp
index de4e68bc966..7f9fd4c9627 100644
--- a/llvm/lib/XRay/RecordInitializer.cpp
+++ b/llvm/lib/XRay/RecordInitializer.cpp
@@ -61,13 +61,20 @@ Error RecordInitializer::visit(NewCPUIDRecord &R) {
return createStringError(std::make_error_code(std::errc::bad_address),
"Invalid offset for a new cpu id record (%d).",
OffsetPtr);
+ auto BeginOffset = OffsetPtr;
auto PreReadOffset = OffsetPtr;
R.CPUId = E.getU16(&OffsetPtr);
if (OffsetPtr == PreReadOffset)
return createStringError(std::make_error_code(std::errc::bad_message),
"Cannot read CPU id at offset %d.", OffsetPtr);
- OffsetPtr += MetadataRecord::kMetadataBodySize - (OffsetPtr - PreReadOffset);
+ PreReadOffset = OffsetPtr;
+ R.TSC = E.getU64(&OffsetPtr);
+ if (OffsetPtr == PreReadOffset)
+ return createStringError(std::make_error_code(std::errc::bad_message),
+ "Cannot read CPU TSC at offset %d.", OffsetPtr);
+
+ OffsetPtr += MetadataRecord::kMetadataBodySize - (OffsetPtr - BeginOffset);
return Error::success();
}
OpenPOWER on IntegriCloud