changeset 492:f3169b2492f1

Replace GPL python debug script with BSD shell script.
author Rob Landley <rob@landley.net>
date Tue, 21 Feb 2012 21:27:10 -0600
parents 176667e320f0
children 42a322adbd17
files Makefile scripts/bloat-o-meter scripts/bloatcheck
diffstat 3 files changed, 61 insertions(+), 66 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Tue Feb 21 20:48:52 2012 -0600
+++ b/Makefile	Tue Feb 21 21:27:10 2012 -0600
@@ -22,7 +22,7 @@
 	@cp toybox_unstripped toybox_old
 
 bloatcheck: toybox_old toybox_unstripped
-	@scripts/bloat-o-meter toybox_old toybox_unstripped
+	@scripts/bloatcheck toybox_old toybox_unstripped
 
 instlist: toybox
 	$(HOSTCC) $(CCFLAGS) -I . scripts/install.c -o instlist
--- a/scripts/bloat-o-meter	Tue Feb 21 20:48:52 2012 -0600
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2004 Matt Mackall <mpm@selenic.com>
-#
-# inspired by perl Bloat-O-Meter (c) 1997 by Andi Kleen
-#
-# This software may be used and distributed according to the terms
-# of the GNU General Public License, incorporated herein by reference.
-
-import sys, os, re
-
-if len(sys.argv) != 3:
-    sys.stderr.write("usage: %s file1 file2\n" % sys.argv[0])
-    sys.exit(-1)
-
-def getsizes(file):
-    sym = {}
-    for l in os.popen("nm --size-sort " + file).readlines():
-        size, type, name = l[:-1].split()
-        if type in "tTdDbB":
-            if "." in name: name = "static." + name.split(".")[0]
-            sym[name] = sym.get(name, 0) + int(size, 16)
-    for l in os.popen("readelf -S " + file).readlines():
-        x = l.split()
-        if len(x)<6 or x[1] != ".rodata": continue
-        sym[".rodata"] = int(x[5], 16)
-    return sym
-
-old = getsizes(sys.argv[1])
-new = getsizes(sys.argv[2])
-grow, shrink, add, remove, up, down = 0, 0, 0, 0, 0, 0
-delta, common = [], {}
-
-for a in old:
-    if a in new:
-        common[a] = 1
-
-for name in old:
-    if name not in common:
-        remove += 1
-        down += old[name]
-        delta.append((-old[name], name))
-
-for name in new:
-    if name not in common:
-        add += 1
-        up += new[name]
-        delta.append((new[name], name))
-
-for name in common:
-        d = new.get(name, 0) - old.get(name, 0)
-        if d>0: grow, up = grow+1, up+d
-        if d<0: shrink, down = shrink+1, down-d
-        delta.append((d, name))
-
-delta.sort()
-delta.reverse()
-
-print "%-48s %7s %7s %+7s" % ("function", "old", "new", "delta")
-for d, n in delta:
-    if d: print "%-48s %7s %7s %+7d" % (n, old.get(n,"-"), new.get(n,"-"), d)
-print "-"*78
-total="(add/remove: %s/%s grow/shrink: %s/%s up/down: %s/%s)%%sTotal: %s bytes"\
-    % (add, remove, grow, shrink, up, -down, up-down)
-print total % (" "*(80-len(total)))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/bloatcheck	Tue Feb 21 21:27:10 2012 -0600
@@ -0,0 +1,60 @@
+#!/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")"
+}
+
+diff <(nm --size-sort "$1" | sort -k3,3) \
+     <(nm --size-sort "$2" | sort -k3,3) | grep '^[<>]' | sort -k4,4 | \
+(
+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"
+)