xref: /netbsd-src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_suppressions.h (revision a24efa7dea9f1f56c3bdb15a927d3516792ace1c)
1 //===-- sanitizer_suppressions.h --------------------------------*- C++ -*-===//
2 //
3 // This file is distributed under the University of Illinois Open Source
4 // License. See LICENSE.TXT for details.
5 //
6 //===----------------------------------------------------------------------===//
7 //
8 // Suppression parsing/matching code shared between TSan and LSan.
9 //
10 //===----------------------------------------------------------------------===//
11 #ifndef SANITIZER_SUPPRESSIONS_H
12 #define SANITIZER_SUPPRESSIONS_H
13 
14 #include "sanitizer_common.h"
15 #include "sanitizer_internal_defs.h"
16 
17 namespace __sanitizer {
18 
19 enum SuppressionType {
20   SuppressionNone,
21   SuppressionRace,
22   SuppressionMutex,
23   SuppressionThread,
24   SuppressionSignal,
25   SuppressionLeak,
26   SuppressionLib,
27   SuppressionDeadlock,
28   SuppressionVptrCheck,
29   SuppressionTypeCount
30 };
31 
32 struct Suppression {
33   SuppressionType type;
34   char *templ;
35   unsigned hit_count;
36   uptr weight;
37 };
38 
39 class SuppressionContext {
40  public:
41   void Parse(const char *str);
42   bool Match(const char* str, SuppressionType type, Suppression **s);
43   uptr SuppressionCount() const;
44   const Suppression *SuppressionAt(uptr i) const;
45   void GetMatched(InternalMmapVector<Suppression *> *matched);
46 
47   // Create a SuppressionContext singleton if it hasn't been created earlier.
48   // Not thread safe. Must be called early during initialization (but after
49   // runtime flags are parsed).
50   static void InitIfNecessary();
51   // Returns a SuppressionContext singleton.
52   static SuppressionContext *Get();
53 
54  private:
55   SuppressionContext() : suppressions_(1), can_parse_(true) {}
56   InternalMmapVector<Suppression> suppressions_;
57   bool can_parse_;
58 
59   friend class SuppressionContextTest;
60 };
61 
62 const char *SuppressionTypeString(SuppressionType t);
63 
64 bool TemplateMatch(char *templ, const char *str);
65 
66 }  // namespace __sanitizer
67 
68 #endif  // SANITIZER_SUPPRESSIONS_H
69