-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathgenerate-cocci.sh
executable file
·94 lines (85 loc) · 2.4 KB
/
generate-cocci.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/bash
BASE=$(dirname $0)
cd "$BASE" || exit 1
rm -f *.cocci order.txt
first=
# Functions that have full set of 2-factor size arguments
for i in 2arg*.template ; do
while read name alloc calloc ; do
# Remove the HANDLE expression lines if unused.
if ! echo "$alloc" | fgrep -q HANDLE ; then
ignore='expression HANDLE'
replace=HANDLE,
else
ignore=KEEP_EVERYTHING
replace=REPLACE_NOTHING
alloc=$(echo "$alloc" | cut -d'(' -f1)
calloc=$(echo "$calloc" | cut -d'(' -f1)
fi
out=$(echo "$i" | sed -e 's/\.template$//')
grep -v "$ignore" $i | \
sed -e 's/('"$replace"' */(/g;' \
-e 's/%alloc%/'"$alloc"'/g;' \
-e 's/%calloc%/'"$calloc"'/g;' \
> "$out"."$name".cocci
#cat "$out"."$name".cocci <(echo "") >> array_size.cocci
cat "$out"."$name".cocci <(echo "") >> "$name".cocci
rm "$out"."$name".cocci
if [ -z "$first" ] ; then
echo "$name" >> order.txt
fi
done <<EOM
kmalloc kmalloc kmalloc_array
kzalloc kzalloc kcalloc
kmalloc_node kmalloc_node kmalloc_array_node
kzalloc_node kzalloc_node kcalloc_node
kvmalloc kvmalloc kvmalloc_array
kvzalloc kvzalloc kvcalloc
devm_kmalloc devm_kmalloc(HANDLE, devm_kmalloc_array(HANDLE,
devm_kzalloc devm_kzalloc(HANDLE, devm_kcalloc(HANDLE,
EOM
first=n
done
first=
# Functions that only take a single size argument
for i in 1arg*.template ; do
while read name alloc ; do
# Remove the HANDLE expression lines if unused.
if ! echo "$alloc" | fgrep -q HANDLE ; then
ignore='expression HANDLE'
replace=HANDLE,
else
ignore=KEEP_EVERYTHING
replace=REPLACE_NOTHING
alloc=$(echo "$alloc" | cut -d'(' -f1)
fi
out=$(echo "$i" | sed -e 's/\.template$//')
grep -v "$ignore" $i | \
sed -e 's/('"$replace"' */(/g;' \
-e 's/%alloc%/'"$alloc"'/g;' \
> "$out"."$name".cocci
#cat "$out"."$name".cocci <(echo "") >> array_size.cocci
cat "$out"."$name".cocci <(echo "") >> "$name".cocci
rm "$out"."$name".cocci
if [ -z "$first" ] ; then
echo "$name" >> order.txt
fi
done <<EOM
vmalloc vmalloc
vzalloc vzalloc
vmalloc_node vmalloc_node
vzalloc_node vzalloc_node
kvmalloc_node kvmalloc_node
kvzalloc_node kvzalloc_node
krealloc krealloc(HANDLE,
sock_kmalloc sock_kmalloc(HANDLE,
f2fs_kmalloc f2fs_kmalloc(HANDLE,
f2fs_kzalloc f2fs_kzalloc(HANDLE,
f2fs_kvmalloc f2fs_kvmalloc(HANDLE,
f2fs_kvzalloc f2fs_kvzalloc(HANDLE,
memdup_user memdup_user(HANDLE,
EOM
first=n
done
cp out-of-line.template out-of-line.cocci
echo "out-of-line" >> order.txt