+#! /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";