1#!/bin/bash 2 3if [ $# -ne 2 ] 4then 5 echo "usage: bloatcheck old new" 6 exit 1 7fi 8 9addline() 10{ 11 NEXT="$(printf "%s% $((50-${#LASTNAME}))d% 10d %10d" "$LASTNAME" "$OLD" "$NEW" "$DELTA")" 12 [ -z "$STUFF" ] && 13 STUFF="$NEXT" || 14 STUFF="$(printf "%s\n%s" "$STUFF" "$NEXT")" 15} 16 17do_bloatcheck() 18{ 19 LASTNAME= DELTA=0 TOTAL=0 OLD=0 NEW=0 STUFF= 20 21 printf "name% 46s% 10s% 11s\n" old new delta 22 echo "-----------------------------------------------------------------------" 23 while read a b c d 24 do 25 THISNAME=$(echo "$d" | sed 's/[.][0-9]*$//') 26 27 if [ "$LASTNAME" != "$THISNAME" ] 28 then 29 TOTAL=$(($TOTAL+$DELTA)) 30 [ $DELTA -ne 0 ] && addline 31 LASTNAME="$THISNAME" 32 DELTA=0 33 OLD=0 34 NEW=0 35 fi 36 37 SIZE=$(printf "%d" "0x$b") 38 if [ "$a" == "-" ] 39 then 40 OLD=$(($OLD+$SIZE)) 41 SIZE=$((-1*$SIZE)) 42 else 43 NEW=$(($NEW+$SIZE)) 44 fi 45 DELTA=$(($DELTA+$SIZE)) 46 done 47 48 TOTAL=$(($TOTAL+$DELTA)) 49 [ $DELTA -ne 0 ] && addline 50 51 echo "$STUFF" | sort -k4,4nr 52 echo "-----------------------------------------------------------------------" 53 printf "% 71d total\n" "$TOTAL" 54} 55 56diff -U 0 <(nm --size-sort "$1"|sort -k 3,3) <(nm --size-sort "$2"|sort -k 3,3)\ 57 | tail -n +3 | sed -n 's/^\([-+]\)/\1 /p' | sort -k4,4 | do_bloatcheck 58