//===-- SpecialCaseList.h - special case list for sanitizers ----*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception //===----------------------------------------------------------------------===// // // This file implements a Special Case List for code sanitizers. // //===----------------------------------------------------------------------===// #ifndef LLVM_SUPPORT_SPECIALCASELIST_H #define LLVM_SUPPORT_SPECIALCASELIST_H #include "llvm/ADT/StringMap.h" #include "llvm/Support/GlobPattern.h" #include "llvm/Support/Regex.h" #include <memory> #include <string> #include <vector> namespace llvm { class MemoryBuffer; class StringRef; namespace vfs { class FileSystem; } /// This is a utility class used to parse user-provided text files with /// "special case lists" for code sanitizers. Such files are used to /// define an "ABI list" for DataFlowSanitizer and allow/exclusion lists for /// sanitizers like AddressSanitizer or UndefinedBehaviorSanitizer. /// /// Empty lines and lines starting with "#" are ignored. Sections are defined /// using a '[section_name]' header and can be used to specify sanitizers the /// entries below it apply to. Section names are globs, and /// entries without a section header match all sections (e.g. an '[*]' header /// is assumed.) /// The remaining lines should have the form: /// prefix:glob_pattern[=category] /// If category is not specified, it is assumed to be empty string. /// Definitions of "prefix" and "category" are sanitizer-specific. For example, /// sanitizer exclusion support prefixes "src", "mainfile", "fun" and "global". /// "glob_pattern" defines source files, main files, functions or globals which /// shouldn't be instrumented. /// Examples of categories: /// "functional": used in DFSan to list functions with pure functional /// semantics. /// "init": used in ASan exclusion list to disable initialization-order bugs /// detection for certain globals or source files. /// Full special case list file example: /// --- /// [address] /// # Excluded items: /// fun:*_ZN4base6subtle* /// global:*global_with_bad_access_or_initialization* /// global:*global_with_initialization_issues*=init /// type:*Namespace::ClassName*=init /// src:file_with_tricky_code.cc /// src:ignore-global-initializers-issues.cc=init /// mainfile:main_file.cc /// /// [dataflow] /// # Functions with pure functional semantics: /// fun:cos=functional /// fun:sin=functional /// --- class SpecialCaseList { … }; } // namespace llvm #endif // LLVM_SUPPORT_SPECIALCASELIST_H