12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #include "llvm/XRay/FileHeaderReader.h"
- namespace llvm {
- namespace xray {
- Expected<XRayFileHeader> readBinaryFormatHeader(DataExtractor &HeaderExtractor,
- uint64_t &OffsetPtr) {
-
-
-
-
-
-
-
-
-
-
- XRayFileHeader FileHeader;
- auto PreReadOffset = OffsetPtr;
- FileHeader.Version = HeaderExtractor.getU16(&OffsetPtr);
- if (OffsetPtr == PreReadOffset)
- return createStringError(
- std::make_error_code(std::errc::invalid_argument),
- "Failed reading version from file header at offset %" PRId64 ".",
- OffsetPtr);
- PreReadOffset = OffsetPtr;
- FileHeader.Type = HeaderExtractor.getU16(&OffsetPtr);
- if (OffsetPtr == PreReadOffset)
- return createStringError(
- std::make_error_code(std::errc::invalid_argument),
- "Failed reading file type from file header at offset %" PRId64 ".",
- OffsetPtr);
- PreReadOffset = OffsetPtr;
- uint32_t Bitfield = HeaderExtractor.getU32(&OffsetPtr);
- if (OffsetPtr == PreReadOffset)
- return createStringError(
- std::make_error_code(std::errc::invalid_argument),
- "Failed reading flag bits from file header at offset %" PRId64 ".",
- OffsetPtr);
- FileHeader.ConstantTSC = Bitfield & 1uL;
- FileHeader.NonstopTSC = Bitfield & 1uL << 1;
- PreReadOffset = OffsetPtr;
- FileHeader.CycleFrequency = HeaderExtractor.getU64(&OffsetPtr);
- if (OffsetPtr == PreReadOffset)
- return createStringError(
- std::make_error_code(std::errc::invalid_argument),
- "Failed reading cycle frequency from file header at offset %" PRId64
- ".",
- OffsetPtr);
- std::memcpy(&FileHeader.FreeFormData,
- HeaderExtractor.getData().bytes_begin() + OffsetPtr, 16);
-
-
- OffsetPtr += 16;
- return std::move(FileHeader);
- }
- }
- }
|