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 | |
class | Matcher |
Represents a set of globs and their line numbers. More... | |
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 Types | |
using | SectionEntries = StringMap<StringMap<Matcher>> |
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 |
LLVM_ABI Expected< Section * > | addSection (StringRef SectionStr, unsigned FileIdx, unsigned LineNo, bool UseGlobs=true) |
LLVM_ABI bool | parse (unsigned FileIdx, const MemoryBuffer *MB, std::string &Error) |
Parses just-constructed SpecialCaseList entries from a memory buffer. | |
LLVM_ABI unsigned | inSectionBlame (const SectionEntries &Entries, StringRef Prefix, StringRef Query, StringRef Category) const |
Protected Attributes | |
std::vector< Section > | Sections |
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 71 of file SpecialCaseList.h.
|
protected |
Definition at line 144 of file SpecialCaseList.h.
|
default |
References LLVM_ABI.
|
protecteddefault |
Referenced by create(), create(), operator=(), and SpecialCaseList().
|
protecteddelete |
References SpecialCaseList().
|
protected |
Definition at line 133 of file SpecialCaseList.cpp.
References llvm::createStringError(), llvm::invalid_argument, llvm::SpecialCaseList::Section::SectionMatcher, Sections, and llvm::toString().
Referenced by parse().
|
static |
Parses the special case list from a memory buffer.
On failure, returns 0 and writes an error message to string.
Definition at line 89 of file SpecialCaseList.cpp.
References SpecialCaseList().
|
static |
Parses the special case list entries from files.
On failure, returns 0 and writes an error message to string.
Definition at line 81 of file SpecialCaseList.cpp.
References SpecialCaseList().
Referenced by createOrDie().
|
protected |
Definition at line 125 of file SpecialCaseList.cpp.
References parse().
|
protected |
Definition at line 106 of file SpecialCaseList.cpp.
References llvm::ErrorOr< T >::get(), llvm::vfs::FileSystem::getBufferForFile(), llvm::ErrorOr< T >::getError(), and parse().
|
static |
Parses the special case list entries from files.
On failure, reports a fatal error.
Definition at line 98 of file SpecialCaseList.cpp.
References create(), and llvm::report_fatal_error().
Referenced by 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 211 of file SpecialCaseList.cpp.
References inSectionBlame().
|
protected |
Definition at line 230 of file SpecialCaseList.cpp.
References llvm::StringMap< ValueTy, AllocatorTy >::end(), llvm::StringMap< ValueTy, AllocatorTy >::find(), I, and II.
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 218 of file SpecialCaseList.cpp.
References inSectionBlame(), NotFound, llvm::reverse(), and Sections.
Referenced by inSection(), and inSectionBlame().
|
protecteddelete |
References SpecialCaseList().
|
protected |
Parses just-constructed SpecialCaseList entries from a memory buffer.
Definition at line 148 of file SpecialCaseList.cpp.
References addSection(), llvm::SpecialCaseList::Section::Entries, llvm::MemoryBuffer::getBuffer(), llvm::line_iterator::is_at_eof(), llvm::StringRef::split(), llvm::StringRef::starts_with(), llvm::toString(), and llvm::StringRef::trim().
Referenced by createInternal(), and createInternal().
Definition at line 73 of file SpecialCaseList.h.
Referenced by inSectionBlame().
|
protected |
Definition at line 156 of file SpecialCaseList.h.
Referenced by addSection(), and inSectionBlame().