Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
14 | pmbaty | 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 | #include <array> |
||
18 | #include <bitset> |
||
19 | |||
20 | namespace llvm { |
||
21 | namespace xray { |
||
22 | |||
23 | class BlockVerifier : public RecordVisitor { |
||
24 | public: |
||
25 | // We force State elements to be size_t, to be used as indices for containers. |
||
26 | enum class State : std::size_t { |
||
27 | Unknown, |
||
28 | BufferExtents, |
||
29 | NewBuffer, |
||
30 | WallClockTime, |
||
31 | PIDEntry, |
||
32 | NewCPUId, |
||
33 | TSCWrap, |
||
34 | CustomEvent, |
||
35 | TypedEvent, |
||
36 | Function, |
||
37 | CallArg, |
||
38 | EndOfBuffer, |
||
39 | StateMax, |
||
40 | }; |
||
41 | |||
42 | private: |
||
43 | // We keep track of the current record seen by the verifier. |
||
44 | State CurrentRecord = State::Unknown; |
||
45 | |||
46 | // Transitions the current record to the new record, records an error on |
||
47 | // invalid transitions. |
||
48 | Error transition(State To); |
||
49 | |||
50 | public: |
||
51 | Error visit(BufferExtents &) override; |
||
52 | Error visit(WallclockRecord &) override; |
||
53 | Error visit(NewCPUIDRecord &) override; |
||
54 | Error visit(TSCWrapRecord &) override; |
||
55 | Error visit(CustomEventRecord &) override; |
||
56 | Error visit(CallArgRecord &) override; |
||
57 | Error visit(PIDRecord &) override; |
||
58 | Error visit(NewBufferRecord &) override; |
||
59 | Error visit(EndBufferRecord &) override; |
||
60 | Error visit(FunctionRecord &) override; |
||
61 | Error visit(CustomEventRecordV5 &) override; |
||
62 | Error visit(TypedEventRecord &) override; |
||
63 | |||
64 | Error verify(); |
||
65 | void reset(); |
||
66 | }; |
||
67 | |||
68 | } // namespace xray |
||
69 | } // namespace llvm |
||
70 | |||
71 | #endif // LLVM_XRAY_BLOCKVERIFIER_H |