57 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8//9// Suppression parsing/matching code.10//11//===----------------------------------------------------------------------===//12#ifndef SANITIZER_SUPPRESSIONS_H13#define SANITIZER_SUPPRESSIONS_H14 15#include "sanitizer_common.h"16#include "sanitizer_atomic.h"17#include "sanitizer_internal_defs.h"18 19namespace __sanitizer {20 21struct Suppression {22 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 29class 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 __sanitizer55 56#endif // SANITIZER_SUPPRESSIONS_H57