#!/bin/rc rfork e flagfmt='s,b res width,f binary' argv0=leak args='proc || pid' if(~ $#* 0) { aux/usage exit usage } bifs=$ifs ifs='' if(! eval `{aux/getflags $*}) { aux/usage exit usage } ifs=$bifs; if(~ $#flags 1) sflag=($sflag -s) if(~ $#flagf 1) sflag=($sflag -f $flagf) if(! ~ $#flagb 0) xflag=(-b -r $flagb(1) -x $flagb(2)) if(~ $#sflag 1 && ! ~ $#flagb 0) { echo 'cannot use both -s and -b' >[1=2] exit usage } if(~ $#* 0) { aux/usage exit usage } if(! test -d /proc/$1) { # x=`{psu | awk '$NF=="'$1'" {print $2}'} x=`{psu | grep ' '$1'$' | sed 's/^[^ ]+ +([0-9]+).*/\1/'} if(~ $#x 0) { echo 'no processes named '$1 >[1=2] exit usage } if(! ~ $#flagb 0) xflag=(-b $flagb(1) $flagb(2)) x=($sflag $xflag $x) echo leak $"x exit } x=`{echo $"* | tr ' ' ,} echo 'leakdump({'$x'})' | acid -lpool -lleak $1 $flagf | aux/acidleak $xflag $flagf | { if(~ $#flags 1) awk '{print $4}' | sort | uniq -c | sort -nr | sed 's! *(.*) (0x.*)!src(\2); // \1!' if not cat }