#!/bin/rc rfork e flagfmt='b,s,f binary,r res,x width' args='name | pid list' if(! ifs=() eval `{aux/getflags $*} || ~ $#* 0){ aux/usage exit usage } if(~ $#flags 1 && ~ $#flagb 1){ echo 'cannot use both -b and -s' >[1=2] exit usage } leakflags=() if(~ $#flags 1) leakflags=($leakflags -s) if(~ $#flagf 1) leakflags=($leakflags -f $flagf) acidleakflags=() if(~ $#flagb 1) acidleakflags=($acidleakflags -b) if(~ $#flagr 1) acidleakflags=($acidleakflags -r $flagr) if(~ $#flagx 1) acidleakflags=($acidleakflags -x $flagx) 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 } echo leak $leakflags $acidleakflags $x exit } pidlist=`{echo $"* | tr ' ' ,} echo 'leakdump({'$pidlist'})' | acid -lpool -lleak $1 $flagf | aux/acidleak $acidleakflags $flagf | { if(~ $#flags 1) awk '{print $4}' | sort | uniq -c | sort -nr | sed 's! *(.*) (0x.*)!src(\2); // \1!' if not cat }