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.
9//
10//===----------------------------------------------------------------------===//
11#ifndef SANITIZER_SUPPRESSIONS_H
12#define SANITIZER_SUPPRESSIONS_H
13
14#include "sanitizer_common.h"
15#include "sanitizer_atomic.h"
16#include "sanitizer_internal_defs.h"
17
18namespace __sanitizer {
19
20struct Suppression {
21  Suppression() { internal_memset(this, 0, sizeof(*this)); }
22  const char *type;
23  char *templ;
24  atomic_uint32_t hit_count;
25  uptr weight;
26};
27
28class SuppressionContext {
29 public:
30  // Create new SuppressionContext capable of parsing given suppression types.
31  SuppressionContext(const char *supprression_types[],
32                     int suppression_types_num);
33
34  void ParseFromFile(const char *filename);
35  void Parse(const char *str);
36
37  bool Match(const char *str, const char *type, Suppression **s);
38  uptr SuppressionCount() const;
39  bool HasSuppressionType(const char *type) const;
40  const Suppression *SuppressionAt(uptr i) const;
41  void GetMatched(InternalMmapVector<Suppression *> *matched);
42
43 private:
44  static const int kMaxSuppressionTypes = 32;
45  const char **const suppression_types_;
46  const int suppression_types_num_;
47
48  InternalMmapVector<Suppression> suppressions_;
49  bool has_suppression_type_[kMaxSuppressionTypes];
50  bool can_parse_;
51};
52
53}  // namespace __sanitizer
54
55#endif  // SANITIZER_SUPPRESSIONS_H
56