+dttypes
[massrebuild.git] / dttypes
1 #! /usr/bin/perl
2 use strict;
3 use warnings;
4 my $savedtot=0;
5 @ARGV=glob "build/*.dttypes" if !@ARGV;
6 for my $fn (@ARGV) {
7   local *F;
8   open F,$fn or die $fn;
9   my %H;
10   my $saved=0;
11   my $valid;
12   while (<F>) {
13     chomp;
14     next if $_ eq "";
15     next if $_ eq ".debug_types contents:";
16     if (m{:\tfile format (\S+)$}) {
17       $valid=($1 eq "ELF64-x86-64");
18       next;
19     }
20     die "$fn:$.: $_" if !m{^name = '.*' type_signature = 0x([0-9a-f]{16}) length = (0x[0-9a-f]{8})$};
21     next if !$valid;
22     my $sig=$1;
23     my $len=eval($2)+4;
24     my $ref=\$H{$sig};
25     if (!$$ref) {
26       $$ref=$len;
27       next;
28     }
29 #    warn "$fn:$.: $sig: $len != $$ref" if $len!=$$ref;
30     $saved+=$len;
31   }
32   close F or die $fn;
33   print "$saved $fn\n" if $saved;
34   $savedtot+=$saved;
35 }
36 print "$savedtot\n";