diff options
Diffstat (limited to 'llvm/lib/XRay/RecordInitializer.cpp')
-rw-r--r-- | llvm/lib/XRay/RecordInitializer.cpp | 9 |
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(); } |