1a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev//===-- sanitizer_suppressions.h --------------------------------*- C++ -*-===// 2a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev// 3a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev// The LLVM Compiler Infrastructure 4a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev// 5a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev// This file is distributed under the University of Illinois Open Source 6a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev// License. See LICENSE.TXT for details. 7a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev// 8a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev//===----------------------------------------------------------------------===// 9a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev// 1086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// Suppression parsing/matching code. 11a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev// 12a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev//===----------------------------------------------------------------------===// 13a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev#ifndef SANITIZER_SUPPRESSIONS_H 14a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev#define SANITIZER_SUPPRESSIONS_H 15a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev 16a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev#include "sanitizer_common.h" 17a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev#include "sanitizer_internal_defs.h" 18a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev 19a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveevnamespace __sanitizer { 20a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev 21a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveevstruct Suppression { 2286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines const char *type; 23a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev char *templ; 24a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev unsigned hit_count; 25b33cfeb6004d3a93e6d35749c14db0190c6c2b4cSergey Matveev uptr weight; 26a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev}; 27a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev 28a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveevclass SuppressionContext { 29a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev public: 3086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines // Create new SuppressionContext capable of parsing given suppression types. 3186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines SuppressionContext(const char *supprression_types[], 3286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines int suppression_types_num); 3386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 3486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines void ParseFromFile(const char *filename); 35a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev void Parse(const char *str); 3686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 3786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines bool Match(const char *str, const char *type, Suppression **s); 384af0f21c0c98950df1136dbec8824a029ed5bb8eDmitry Vyukov uptr SuppressionCount() const; 3986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines bool HasSuppressionType(const char *type) const; 404af0f21c0c98950df1136dbec8824a029ed5bb8eDmitry Vyukov const Suppression *SuppressionAt(uptr i) const; 41a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev void GetMatched(InternalMmapVector<Suppression *> *matched); 42a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev 43a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev private: 4486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines static const int kMaxSuppressionTypes = 16; 4586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines const char **const suppression_types_; 4686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines const int suppression_types_num_; 4786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 48a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev InternalMmapVector<Suppression> suppressions_; 4986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines bool has_suppression_type_[kMaxSuppressionTypes]; 50a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev bool can_parse_; 51a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev}; 52a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev 53a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev} // namespace __sanitizer 54a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev 55a52e5c6f371bcc66e89792db1219a557664aab8dSergey Matveev#endif // SANITIZER_SUPPRESSIONS_H 56