diff --git a/ChangeLog b/ChangeLog
index 222cdf9bc1dcad5a88907f5ce9f5c5e3d3c1c456..5de7306c442842e5327aa71f1ccbdf2f3f41aa50 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2003-11-12  Niels M�ller  <niels@s3.kth.se>
+
+	* list-obj-sizes.awk: New function for decoding hex values, with a
+	new function hex2int. Also implemented calculation of total
+	storage, removed the dependence on the .comment section, and use
+	the $FILTER environment variable as a regexp for restricting the
+	object files that are considered.
+
 2003-09-21  Niels M�ller  <nisse@cuckoo.hack.org>
 
 	* testsuite/rsa-encrypt-test.c (test_main): Don't use gmp_printf,
diff --git a/list-obj-sizes.awk b/list-obj-sizes.awk
index b9093a275d8efd3b7e577d4a13f9285747d0d71b..98d97e9e788bb00666c4abf86fb38df48eabee96 100755
--- a/list-obj-sizes.awk
+++ b/list-obj-sizes.awk
@@ -1,25 +1,52 @@
-#! /usr/bin/gawk -f
+#! /usr/bin/awk -f
 
 # Run this filter on the output of
 #
 #   objdump -h libnettle.a
 
+function hex2int (hex) {
+  n = 0;
+  hex = tolower(hex);
+  for (i = 1; i<=length(hex); i++)
+    {
+      n = n * 16 + index("0123456789abcdef", substr(hex,i,1)) - 1;
+    }
+
+  return n;
+}
+
 BEGIN {
     print "file            text-size  data-size  rodata-size";
     text_total = 0;
     data_total = 0;
     rodata_total = 0;
+    name = "";
+    filter = ENVIRON["FILTER"];
+    if (!filter)
+      filter = ".*";
+    else
+      printf "Filter: %s\n", filter;
 }
 
-/elf32/ { name = $1; text_size = data_size = rodata_size = 0;  }
-/\.text/ { text_size = $3 }
-/\.data/ { data_size = $3; }
-/\.rodata/ { rodata_size = $3; }
-/\.comment/ {
-    printf "%15s %s   %s   %s\n", name, text_size, data_size, rodata_size;
+/elf32/ {
+  if (name)
+    {
+      printf "%25s %6x   %6x   %6x\n", name, text_size, data_size, rodata_size;
+      text_total += text_size;
+      data_total += data_size;
+      rodata_total += rodata_size; 
+    }
+  if ($1 ~ filter)
+    {
+      name = $1; text_size = data_size = rodata_size = 0;
+    }
+  else
+    name = ""
 }
+/\.text/ { text_size = hex2int($3) }
+/\.data/ { data_size = hex2int($3); }
+/\.rodata/ { rodata_size = hex2int($3); }
 
 END {
-  printf "%15s %s   %s   %s\n", "TOTAL", text_total, data_total, rodata_total;
+  printf "%25s %6x   %6x   %6x\n", "TOTAL", text_total, data_total, rodata_total;
 }
-