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