1//===- BlockVerifier.h - FDR Block Verifier -------------------------------===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// An implementation of the RecordVisitor which verifies a sequence of records 10// associated with a block, following the FDR mode log format's specifications. 11// 12//===----------------------------------------------------------------------===// 13#ifndef LLVM_XRAY_BLOCKVERIFIER_H 14#define LLVM_XRAY_BLOCKVERIFIER_H 15 16#include "llvm/XRay/FDRRecords.h" 17 18namespace llvm { 19namespace xray { 20 21class BlockVerifier : public RecordVisitor { 22public: 23 // We force State elements to be size_t, to be used as indices for containers. 24 enum class State : std::size_t { 25 Unknown, 26 BufferExtents, 27 NewBuffer, 28 WallClockTime, 29 PIDEntry, 30 NewCPUId, 31 TSCWrap, 32 CustomEvent, 33 TypedEvent, 34 Function, 35 CallArg, 36 EndOfBuffer, 37 StateMax, 38 }; 39 40private: 41 // We keep track of the current record seen by the verifier. 42 State CurrentRecord = State::Unknown; 43 44 // Transitions the current record to the new record, records an error on 45 // invalid transitions. 46 Error transition(State To); 47 48public: 49 Error visit(BufferExtents &) override; 50 Error visit(WallclockRecord &) override; 51 Error visit(NewCPUIDRecord &) override; 52 Error visit(TSCWrapRecord &) override; 53 Error visit(CustomEventRecord &) override; 54 Error visit(CallArgRecord &) override; 55 Error visit(PIDRecord &) override; 56 Error visit(NewBufferRecord &) override; 57 Error visit(EndBufferRecord &) override; 58 Error visit(FunctionRecord &) override; 59 Error visit(CustomEventRecordV5 &) override; 60 Error visit(TypedEventRecord &) override; 61 62 Error verify(); 63 void reset(); 64}; 65 66} // namespace xray 67} // namespace llvm 68 69#endif // LLVM_XRAY_BLOCKVERIFIER_H 70