• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef TSAN_IGNORE_H__
2 #define TSAN_IGNORE_H__
3 
4 #include "common_util.h"
5 
6 // A triple of patterns to ignore a function, an object file and a source file
7 // by their names.
8 struct IgnoreTriple {
9   string fun;
10   string obj;
11   string file;
12 
IgnoreTripleIgnoreTriple13   IgnoreTriple(string ifun, string iobj, string ifile) : fun(ifun) {
14     obj = ConvertToPlatformIndependentPath(iobj);
15     file = ConvertToPlatformIndependentPath(ifile);
16     CHECK(!((ifun == "*") && (iobj == "*") && (ifile == "*")));
17   }
18 };
19 
20 struct IgnoreObj : public IgnoreTriple {
IgnoreObjIgnoreObj21   IgnoreObj(string obj) : IgnoreTriple("*", obj, "*") {}
22 };
23 
24 struct IgnoreFun : public IgnoreTriple {
IgnoreFunIgnoreFun25   IgnoreFun(string fun) : IgnoreTriple(fun, "*", "*") {}
26 };
27 
28 struct IgnoreFile : public IgnoreTriple {
IgnoreFileIgnoreFile29   IgnoreFile(string file) : IgnoreTriple("*", "*", file) {}
30 };
31 
32 struct IgnoreLists {
33   vector<IgnoreTriple> ignores;
34   vector<IgnoreTriple> ignores_r;
35   vector<IgnoreTriple> ignores_hist;
36 };
37 
38 extern IgnoreLists *g_ignore_lists;
39 extern vector<string> *g_ignore_obj;
40 
41 extern IgnoreLists *g_white_lists;
42 
43 void ReadIgnoresFromString(const string& ignoreString,
44     IgnoreLists* ignoreLists);
45 
46 bool TripleVectorMatchKnown(const vector<IgnoreTriple>& v,
47     const string& fun,
48     const string& obj,
49     const string& file);
50 
51 bool StringVectorMatch(const vector<string>& v, const string& obj);
52 
53 #endif
54