]> git.saurik.com Git - apple/xnu.git/blob - san/tools/generate_dynamic_blacklist.py
xnu-7195.101.1.tar.gz
[apple/xnu.git] / san / tools / generate_dynamic_blacklist.py
1 #!/usr/bin/env python
2
3 import sys
4 import re
5
6 def type_map(x):
7 return "TYPE_" + x.upper()
8
9 re_comments=re.compile(r'#.*$')
10
11 nentries = 0
12 extra_entries = 5
13 bl = file(sys.argv[1])
14
15 print r'struct blacklist_entry blacklist[] = {'
16
17 for line in bl.readlines():
18 line = re_comments.sub("", line).strip()
19
20 if not line:
21 continue
22
23 fields = line.split(":")
24 if len(fields) != 3:
25 continue
26
27 (kext, func, ty) = fields
28
29 if kext == "":
30 kext = "NULL";
31 else:
32 kext = '"' + kext + '"'
33
34 if func == "":
35 func = "NULL";
36 else:
37 func = '"' + func + '"'
38
39 if ty == "":
40 ty = "normal";
41
42 print """ {{
43 .kext_name = {},
44 .func_name = {},
45 .type_mask = {},
46 }},""".format(kext, func, type_map(ty))
47 nentries += 1
48
49 # add space for new entries added at runtime
50 print ''
51 print r' /* Unused entries that can be populated at runtime */'
52 for i in xrange(0, extra_entries):
53 print """ {{
54 .kext_name = {},
55 .func_name = {},
56 .type_mask = {},
57 }},""".format("NULL", "NULL", 0)
58
59 print r'};'
60 print
61
62 print 'static size_t blacklist_entries = {};'.format(nentries)
63 print 'static const size_t blacklist_max_entries = {};'.format(nentries + extra_entries)