#!/usr/bin/perl -w

# Output:
#	liba	libb	libc
#.foo	123	4556	277
#.baa	23	42	12

%columns = ();
%section_names = ();

sub add_file($)
{
    my $fname = shift;
    my $handle;
    my %map;
    
    open($handle, "readelf -S $fname|") || die "Failed to open $fname: $!";
    print "Name:\t$fname\n";
    while(<$handle>) {
	/\[([\d ]+)\]\s+([\S.]+)\s+\S+\s+0[[:xdigit:]]+\s+[[:xdigit:]]+\s+([[:xdigit:]]+)/ || next;
	my ($num, $name, $hexsize) = ($1, $2, $3);
	$num =~ /^\s*0$/ && next; # bin empty first section.

	my $size = hex ($hexsize);
	$map{$name} = $size;
	$section_names{$name} = 1;
    }
    $columns{$fname} = \%map;
    close($handle);
}

sub dump_data()
{
    my $section;
    my $fname;

    # print header
    for $fname (keys %columns) {
	print "\t$fname";
    }
    print "\n";

    # print data
    for $section (sort keys %section_names) {
	print "$section\t";

	for $fname (keys %columns) {
	    my $map = $columns{$fname};
	    my $size = $map->{$section} || 0;
	    print "$size\t";
	}
	print "\n";
    }
}

my @files = ();
my $file;

for $file (@ARGV) {
    unshift @files, $file;
}

for $file (@ARGV) {
    add_file ($file);
}

dump_data();
