+dttypes
authorJan Kratochvil <jan.kratochvil@redhat.com>
Sat, 3 Oct 2020 14:10:05 +0000 (16:10 +0200)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Sat, 3 Oct 2020 14:10:05 +0000 (16:10 +0200)
debuginfosize
dttypes [new file with mode: 0755]

index 7778ffb..39fab7e 100755 (executable)
@@ -3,10 +3,13 @@ set -e
 # build/znc-1.8.1-2.fc33.src.rpm.rpms
 [ $# -eq 1 ]
 which readelf >/dev/null
+which llvm-dwarfdump >/dev/null
 srcrpm=$1
 test -e $srcrpm.rpms
-test ! -e $srcrpm.rpmsizes
+test ! '(' -e $srcrpm.rpmsizes -a -e $srcrpm.dt5.rpm.dttypes ')'
 test ! -e $srcrpm.rpms.d
+: >$srcrpm.dt5.rpm.dttypes
+origpwd="$PWD"
 mkdir $srcrpm.rpms.d
 pushd $srcrpm.rpms.d >/dev/null
   rpmsbase=../../`basename $srcrpm`
@@ -52,6 +55,7 @@ pushd $srcrpm.rpms.d >/dev/null
       fi
       dwztot=$[$dwztot+$dwz]
       dttot=$[$dttot+$dt]
+      llvm-dwarfdump -color=0 -debug-types --summarize-types ../dt/$i >>"$origpwd/$srcrpm".dt5.rpm.dttypes
     done
   popd >/dev/null
 popd >/dev/null
diff --git a/dttypes b/dttypes
new file mode 100755 (executable)
index 0000000..10e15c0
--- /dev/null
+++ b/dttypes
@@ -0,0 +1,36 @@
+#! /usr/bin/perl
+use strict;
+use warnings;
+my $savedtot=0;
+@ARGV=glob "build/*.dttypes" if !@ARGV;
+for my $fn (@ARGV) {
+  local *F;
+  open F,$fn or die $fn;
+  my %H;
+  my $saved=0;
+  my $valid;
+  while (<F>) {
+    chomp;
+    next if $_ eq "";
+    next if $_ eq ".debug_types contents:";
+    if (m{:\tfile format (\S+)$}) {
+      $valid=($1 eq "ELF64-x86-64");
+      next;
+    }
+    die "$fn:$.: $_" if !m{^name = '.*' type_signature = 0x([0-9a-f]{16}) length = (0x[0-9a-f]{8})$};
+    next if !$valid;
+    my $sig=$1;
+    my $len=eval($2)+4;
+    my $ref=\$H{$sig};
+    if (!$$ref) {
+      $$ref=$len;
+      next;
+    }
+#    warn "$fn:$.: $sig: $len != $$ref" if $len!=$$ref;
+    $saved+=$len;
+  }
+  close F or die $fn;
+  print "$saved $fn\n" if $saved;
+  $savedtot+=$saved;
+}
+print "$savedtot\n";