blob: 3edd3df619249f90abacd487254a0b89ed52f063 (
plain)
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
|
#!/bin/sh
# hush's stderr with leak debug enabled
output=output
freelist=`grep 'free 0x' "$output" | cut -d' ' -f2 | sort | uniq | xargs`
grep -v free "$output" >"$output.leaked"
i=16
list=
for freed in $freelist; do
list="$list -e $freed"
test $((--i)) != 0 && continue
echo Dropping $list
grep -F -v $list <"$output.leaked" >"$output.temp"
mv "$output.temp" "$output.leaked"
i=16
list=
done
if test "$list"; then
echo Dropping $list
grep -F -v $list <"$output.leaked" >"$output.temp"
mv "$output.temp" "$output.leaked"
fi
# All remaining allocations are on addresses which were never freed.
# * Sort them by line, grouping together allocations which allocated the same address.
# A leaky allocation will give many different addresses (because it's never freed,
# the address can not be reused).
# * Remove the address (field #4).
# * Count the allocations per every unique source line and alloc type.
# * Show largest counts on top.
cat output.leaked \
| sort -u \
| cut -d' ' -f1-3 \
| uniq -c \
| sort -rn \
>output.leaked.counted_uniq_alloc_address
|