Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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
 
16
namespace llvm {
17
 
18
class AsmPrinter;
19
class MCExpr;
20
 
21
class FaultMaps {
22
public:
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
 
41
private:
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