1//===- FaultMaps.h - The "FaultMaps" section --------------------*- C++ -*-===//
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#ifndef LLVM_CODEGEN_FAULTMAPS_H
10#define LLVM_CODEGEN_FAULTMAPS_H
11
12#include "llvm/MC/MCSymbol.h"
13#include <map>
14#include <vector>
15
16namespace llvm {
17
18class AsmPrinter;
19class MCExpr;
20
21class FaultMaps {
22public:
23 enum FaultKind {
24 FaultingLoad = 1,
25 FaultingLoadStore,
26 FaultingStore,
27 FaultKindMax
28 };
29
30 explicit FaultMaps(AsmPrinter &AP);
31
32 static const char *faultTypeToString(FaultKind);
33
34 void recordFaultingOp(FaultKind FaultTy, const MCSymbol *FaultingLabel,
35 const MCSymbol *HandlerLabel);
36 void serializeToFaultMapSection();
37 void reset() {
38 FunctionInfos.clear();
39 }
40
41private:
42 static const char *WFMP;
43
44 struct FaultInfo {
45 FaultKind Kind = FaultKindMax;
46 const MCExpr *FaultingOffsetExpr = nullptr;
47 const MCExpr *HandlerOffsetExpr = nullptr;
48
49 FaultInfo() = default;
50
51 explicit FaultInfo(FaultMaps::FaultKind Kind, const MCExpr *FaultingOffset,
52 const MCExpr *HandlerOffset)
53 : Kind(Kind), FaultingOffsetExpr(FaultingOffset),
54 HandlerOffsetExpr(HandlerOffset) {}
55 };
56
57 using FunctionFaultInfos = std::vector<FaultInfo>;
58
59 // We'd like to keep a stable iteration order for FunctionInfos to help
60 // FileCheck based testing.
61 struct MCSymbolComparator {
62 bool operator()(const MCSymbol *LHS, const MCSymbol *RHS) const {
63 return LHS->getName() < RHS->getName();
64 }
65 };
66
67 std::map<const MCSymbol *, FunctionFaultInfos, MCSymbolComparator>
68 FunctionInfos;
69 AsmPrinter &AP;
70
71 void emitFunctionInfo(const MCSymbol *FnLabel, const FunctionFaultInfos &FFI);
72};
73
74} // end namespace llvm
75
76#endif // LLVM_CODEGEN_FAULTMAPS_H
77

source code of llvm/include/llvm/CodeGen/FaultMaps.h