#ifndef TSAN_IGNORE_H__ #define TSAN_IGNORE_H__ #include "common_util.h" // A triple of patterns to ignore a function, an object file and a source file // by their names. struct IgnoreTriple { string fun; string obj; string file; IgnoreTriple(string ifun, string iobj, string ifile) : fun(ifun) { obj = ConvertToPlatformIndependentPath(iobj); file = ConvertToPlatformIndependentPath(ifile); CHECK(!((ifun == "*") && (iobj == "*") && (ifile == "*"))); } }; struct IgnoreObj : public IgnoreTriple { IgnoreObj(string obj) : IgnoreTriple("*", obj, "*") {} }; struct IgnoreFun : public IgnoreTriple { IgnoreFun(string fun) : IgnoreTriple(fun, "*", "*") {} }; struct IgnoreFile : public IgnoreTriple { IgnoreFile(string file) : IgnoreTriple("*", "*", file) {} }; struct IgnoreLists { vector<IgnoreTriple> ignores; vector<IgnoreTriple> ignores_r; vector<IgnoreTriple> ignores_hist; }; extern IgnoreLists *g_ignore_lists; extern vector<string> *g_ignore_obj; extern IgnoreLists *g_white_lists; void ReadIgnoresFromString(const string& ignoreString, IgnoreLists* ignoreLists); bool TripleVectorMatchKnown(const vector<IgnoreTriple>& v, const string& fun, const string& obj, const string& file); bool StringVectorMatch(const vector<string>& v, const string& obj); #endif