5 flagfmt='a,b,c,d,s,f binary,r res,x width'
7 if(! ifs=() eval `{aux/getflags $*} || ~ $#* 0){
12 conflicting=($flagb $flagc $flags)
13 if(~ $#conflicting 2 || ~ $#conflicting 3){
14 echo 'can only use one of -b, -c or -s' >[1=2]
20 leakflags=($leakflags -s)
22 leakflags=($leakflags -a)
24 leakflags=($leakflags -c)
26 leakflags=($leakflags -d)
28 leakflags=($leakflags -f $flagf)
32 acidleakflags=($acidleakflags -b)
34 acidleakflags=($acidleakflags -r $flagr)
36 acidleakflags=($acidleakflags -x $flagx)
38 if(! test -d /proc/$1) {
39 # x=`{psu | awk '$NF=="'$1'" {print $2}'}
40 x=`{psu | grep ' '$1'$' | sed 's/^[^ ]+ +([0-9]+).*/\1/'}
42 echo 'no processes named '$1 >[1=2]
45 echo leak $leakflags $acidleakflags $x
49 pidlist=`{echo $"* | tr ' ' ,}
51 echo 'leakdump({'$pidlist'})' | acid -lpool -lleak $1 $flagf |
53 if(~ $#flaga 1 && ~ $#flagd 1)
62 aux/acidleak $acidleakflags $flagf
67 sort | uniq -c | sort -nr |
68 sed 's! *(.*) (0x.*)!src(\2); // \1!'
73 _unhex[sprintf("%x", i)] = _unhex[sprintf("%X", i)] = i
75 function unhex(s, i, v) {
77 for (i=1; i<=length(s); i++)
78 v = v*16 + _unhex[substr(s,i,1)]
81 { sum[$4] += unhex($3);
87 printf("src(%s);\t// %d\t%d\t%d\t%s\n", v, sum[v], count[v], sum[v] / count[v], alloc[v])
90 printf("// %d\n", total);