1//===-- sanitizer_suppressions.h --------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// Suppression parsing/matching code. 11// 12//===----------------------------------------------------------------------===// 13#ifndef SANITIZER_SUPPRESSIONS_H 14#define SANITIZER_SUPPRESSIONS_H 15 16#include "sanitizer_common.h" 17#include "sanitizer_atomic.h" 18#include "sanitizer_internal_defs.h" 19 20namespace __sanitizer { 21 22struct Suppression { 23 Suppression() { internal_memset(this, 0, sizeof(*this)); } 24 const char *type; 25 char *templ; 26 atomic_uint32_t hit_count; 27 uptr weight; 28}; 29 30class SuppressionContext { 31 public: 32 // Create new SuppressionContext capable of parsing given suppression types. 33 SuppressionContext(const char *supprression_types[], 34 int suppression_types_num); 35 36 void ParseFromFile(const char *filename); 37 void Parse(const char *str); 38 39 bool Match(const char *str, const char *type, Suppression **s); 40 uptr SuppressionCount() const; 41 bool HasSuppressionType(const char *type) const; 42 const Suppression *SuppressionAt(uptr i) const; 43 void GetMatched(InternalMmapVector<Suppression *> *matched); 44 45 private: 46 static const int kMaxSuppressionTypes = 32; 47 const char **const suppression_types_; 48 const int suppression_types_num_; 49 50 InternalMmapVector<Suppression> suppressions_; 51 bool has_suppression_type_[kMaxSuppressionTypes]; 52 bool can_parse_; 53}; 54 55} // namespace __sanitizer 56 57#endif // SANITIZER_SUPPRESSIONS_H 58