xref: /xnu-8020.121.3/san/tools/generate_dynamic_blacklist.py (revision fdd8201d7b966f0c3ea610489d29bd841d358941)
1#!/usr/bin/env python
2
3import sys
4import re
5
6def type_map(x):
7	return "TYPE_" + x.upper()
8
9re_comments=re.compile(r'#.*$')
10
11nentries = 0
12extra_entries = 5
13bl = file(sys.argv[1])
14
15print r'struct blacklist_entry blacklist[] = {'
16
17for 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
50print ''
51print r'	/* Unused entries that can be populated at runtime */'
52for i in xrange(0, extra_entries):
53	print """	{{
54		.kext_name = {},
55		.func_name = {},
56		.type_mask = {},
57	}},""".format("NULL", "NULL", 0)
58
59print r'};'
60print
61
62print 'static size_t blacklist_entries = {};'.format(nentries)
63print 'static const size_t blacklist_max_entries = {};'.format(nentries + extra_entries)
64