blob: fff4690f3e31071a6502f86903b72c81d86591bd [file] [log] [blame]
Rob Landley7a4551f2012-02-21 21:27:10 -06001#!/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
Rob Landley471c4d22014-06-08 13:24:02 -050017do_bloatcheck()
18{
19 LASTNAME=
20 DELTA=0
21 TOTAL=0
22 OLD=0
23 NEW=0
24 STUFF=
25
26 printf "name% 46s% 10s% 11s\n" old new delta
27 echo "-----------------------------------------------------------------------"
28 while read a b c d
29 do
Rob Landley0fe882b2014-06-08 13:49:57 -050030 THISNAME=$(echo "$d" | sed 's/[.][0-9]*$//')
Rob Landley471c4d22014-06-08 13:24:02 -050031
32 if [ "$LASTNAME" != "$THISNAME" ]
33 then
34 TOTAL=$(($TOTAL+$DELTA))
35 [ $DELTA -ne 0 ] && addline
36 LASTNAME="$THISNAME"
37 DELTA=0
38 OLD=0
39 NEW=0
40 fi
41
42 SIZE=$(printf "%d" "0x$b")
Rob Landley0fe882b2014-06-08 13:49:57 -050043 if [ "$a" == "-" ]
Rob Landley471c4d22014-06-08 13:24:02 -050044 then
45 OLD=$(($OLD+$SIZE))
46 SIZE=$((-1*$SIZE))
47 else
48 NEW=$(($NEW+$SIZE))
49 fi
50 DELTA=$(($DELTA+$SIZE))
51 done
52
53 TOTAL=$(($TOTAL+$DELTA))
54 [ $DELTA -ne 0 ] && addline
55
56 echo "$STUFF" | sort -k4,4nr
57 echo "-----------------------------------------------------------------------"
58 printf "% 71d total\n" "$TOTAL"
59}
60
Rob Landley298fcd92014-06-08 14:01:37 -050061DIFF1=`mktemp base.XXXXXXX`
62DIFF2=`mktemp bloat.XXXXXXX`
63trap "rm $DIFF1 $DIFF2" EXIT
64nm --size-sort "$1" | sort -k3,3 > $DIFF1
65nm --size-sort "$2" | sort -k3,3 > $DIFF2
66diff -U 0 $DIFF1 $DIFF2 | tail -n +3 | sed -n 's/^\([-+]\)/\1 /p' \
67 | sort -k4,4 | do_bloatcheck