LLVM 22.0.0git
|
This is a utility class used to parse user-provided text files with "special case lists" for code sanitizers. More...
#include "llvm/Support/SpecialCaseList.h"
Classes | |
struct | Section |
Public Member Functions | |
LLVM_ABI | ~SpecialCaseList () |
LLVM_ABI bool | inSection (StringRef Section, StringRef Prefix, StringRef Query, StringRef Category=StringRef()) const |
Returns true, if special case list contains a line. | |
LLVM_ABI std::pair< unsigned, unsigned > | inSectionBlame (StringRef Section, StringRef Prefix, StringRef Query, StringRef Category=StringRef()) const |
Returns the file index and the line number <FileIdx, LineNo> corresponding to the special case list entry if the special case list contains a line. |
Static Public Member Functions | |
static LLVM_ABI std::unique_ptr< SpecialCaseList > | create (const std::vector< std::string > &Paths, llvm::vfs::FileSystem &FS, std::string &Error) |
Parses the special case list entries from files. | |
static LLVM_ABI std::unique_ptr< SpecialCaseList > | create (const MemoryBuffer *MB, std::string &Error) |
Parses the special case list from a memory buffer. | |
static LLVM_ABI std::unique_ptr< SpecialCaseList > | createOrDie (const std::vector< std::string > &Paths, llvm::vfs::FileSystem &FS) |
Parses the special case list entries from files. |
Static Public Attributes | |
static constexpr std::pair< unsigned, unsigned > | NotFound = {0, 0} |
Protected Member Functions | |
LLVM_ABI bool | createInternal (const std::vector< std::string > &Paths, vfs::FileSystem &VFS, std::string &Error) |
LLVM_ABI bool | createInternal (const MemoryBuffer *MB, std::string &Error) |
SpecialCaseList ()=default | |
SpecialCaseList (SpecialCaseList const &)=delete | |
SpecialCaseList & | operator= (SpecialCaseList const &)=delete |
ArrayRef< const Section > | sections () const |
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.
[address]
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]
fun:cos=functional
Definition at line 74 of file SpecialCaseList.h.
|
default |
References LLVM_ABI.
|
protecteddefault |
Referenced by create(), create(), operator=(), and SpecialCaseList().
|
protecteddelete |
References SpecialCaseList().
|
static |
Parses the special case list from a memory buffer.
On failure, returns 0 and writes an error message to string.
Definition at line 116 of file SpecialCaseList.cpp.
References create(), and SpecialCaseList().
|
static |
Parses the special case list entries from files.
On failure, returns 0 and writes an error message to string.
Definition at line 108 of file SpecialCaseList.cpp.
References create(), and SpecialCaseList().
Referenced by create(), create(), and createOrDie().
|
protected |
Definition at line 152 of file SpecialCaseList.cpp.
References createInternal(), and parse().
|
protected |
Definition at line 133 of file SpecialCaseList.cpp.
References createInternal(), llvm::ErrorOr< T >::get(), llvm::vfs::FileSystem::getBufferForFile(), llvm::ErrorOr< T >::getError(), and parse().
Referenced by createInternal(), and createInternal().
|
static |
Parses the special case list entries from files.
On failure, reports a fatal error.
Definition at line 125 of file SpecialCaseList.cpp.
References create(), createOrDie(), and llvm::report_fatal_error().
Referenced by createOrDie(), llvm::SanitizerBinaryMetadataPass::run(), and llvm::SanitizerCoveragePass::SanitizerCoveragePass().
bool llvm::SpecialCaseList::inSection | ( | StringRef | Section, |
StringRef | Prefix, | ||
StringRef | Query, | ||
StringRef | Category = StringRef() ) const |
Returns true, if special case list contains a line.
where @Query satisfies the glob <E> in a given @Section.
Definition at line 254 of file SpecialCaseList.cpp.
References inSection(), and inSectionBlame().
Referenced by inSection().
std::pair< unsigned, unsigned > llvm::SpecialCaseList::inSectionBlame | ( | StringRef | Section, |
StringRef | Prefix, | ||
StringRef | Query, | ||
StringRef | Category = StringRef() ) const |
Returns the file index and the line number <FileIdx, LineNo> corresponding to the special case list entry if the special case list contains a line.
where @Query satisfies the glob <E> in a given @Section. Returns (zero, zero) if there is no exclusion entry corresponding to this expression.
Definition at line 261 of file SpecialCaseList.cpp.
References inSectionBlame(), NotFound, and llvm::reverse().
Referenced by inSection(), and inSectionBlame().
|
protecteddelete |
References LLVM_ABI, llvm::PatternMatch::match(), and SpecialCaseList().
Definition at line 213 of file SpecialCaseList.h.
Definition at line 76 of file SpecialCaseList.h.
Referenced by inSectionBlame().