#! /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 () { 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";