12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #!/bin/bash
- if [ $# -ne 2 ]
- then
- echo "usage: bloatcheck old new"
- exit 1
- fi
- addline()
- {
- NEXT="$(printf "%s% $((50-${#LASTNAME}))d% 10d %10d" "$LASTNAME" "$OLD" "$NEW" "$DELTA")"
- [ -z "$STUFF" ] &&
- STUFF="$NEXT" ||
- STUFF="$(printf "%s\n%s" "$STUFF" "$NEXT")"
- }
- do_bloatcheck()
- {
- LASTNAME=
- DELTA=0
- TOTAL=0
- OLD=0
- NEW=0
- STUFF=
- printf "name% 46s% 10s% 11s\n" old new delta
- echo "-----------------------------------------------------------------------"
- while read a b c d
- do
- THISNAME=$(echo "$d" | sed 's/[.][0-9]*$//')
- if [ "$LASTNAME" != "$THISNAME" ]
- then
- TOTAL=$(($TOTAL+$DELTA))
- [ $DELTA -ne 0 ] && addline
- LASTNAME="$THISNAME"
- DELTA=0
- OLD=0
- NEW=0
- fi
- SIZE=$(printf "%d" "0x$b")
- if [ "$a" == "-" ]
- then
- OLD=$(($OLD+$SIZE))
- SIZE=$((-1*$SIZE))
- else
- NEW=$(($NEW+$SIZE))
- fi
- DELTA=$(($DELTA+$SIZE))
- done
- TOTAL=$(($TOTAL+$DELTA))
- [ $DELTA -ne 0 ] && addline
- echo "$STUFF" | sort -k4,4nr
- echo "-----------------------------------------------------------------------"
- printf "% 71d total\n" "$TOTAL"
- }
- DIFF1=`mktemp base.XXXXXXX`
- DIFF2=`mktemp bloat.XXXXXXX`
- trap "rm $DIFF1 $DIFF2" EXIT
- nm --size-sort "$1" | sort -k3,3 > $DIFF1
- nm --size-sort "$2" | sort -k3,3 > $DIFF2
- diff -U 0 $DIFF1 $DIFF2 | tail -n +3 | sed -n 's/^\([-+]\)/\1 /p' \
- | sort -k4,4 | do_bloatcheck
|