blob: a5a28f1cea149b5bc78bea76e66de4d832e4b5b2 [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
17diff <(nm --size-sort "$1" | sort -k3,3) \
18 <(nm --size-sort "$2" | sort -k3,3) | grep '^[<>]' | sort -k4,4 | \
19(
20LASTNAME=
21DELTA=0
22TOTAL=0
23OLD=0
24NEW=0
25STUFF=
26
27printf "name% 46s% 10s% 11s\n" old new delta
28echo "-----------------------------------------------------------------------"
29while read a b c d
30do
31 THISNAME=$(echo " $d" | sed 's/[.][0-9]*$//')
32
33 if [ "$LASTNAME" != "$THISNAME" ]
34 then
35 TOTAL=$(($TOTAL+$DELTA))
36 [ $DELTA -ne 0 ] && addline
37 LASTNAME="$THISNAME"
38 DELTA=0
39 OLD=0
40 NEW=0
41 fi
42
43 SIZE=$(printf "%d" "0x$b")
44 if [ "$a" == "<" ]
45 then
46 OLD=$(($OLD+$SIZE))
47 SIZE=$((-1*$SIZE))
48 else
49 NEW=$(($NEW+$SIZE))
50 fi
51 DELTA=$(($DELTA+$SIZE))
52done
53
54TOTAL=$(($TOTAL+$DELTA))
55[ $DELTA -ne 0 ] && addline
56
57echo "$STUFF" | sort -k4,4nr
58echo "-----------------------------------------------------------------------"
59printf "% 71d total\n" "$TOTAL"
60)