nes-proj/tools/map2dot.pl
2010-03-01 18:02:46 -05:00

32 lines
855 B
Perl
Executable File

#!/usr/bin/perl
# Try:
# gcc -static -o test test.c -Wl,--print-map | perl parse-map.pl | unflatten -l 3 | dot -Tpng > map.png
#
# This won't show all edges! An archive member is only listed the first
# time it needs to get included. But this shows at least one reason why each
# archive member appears in the final object.
my $flag = 0;
my $line = "";
print "digraph map {\n";
print "rankdir = LR;";
while(<>)
{
$flag++ if /^Archive member included because of file \(symbol\)$/;
$flag++ if /^$/;
next unless $flag == 2;
chomp ($line .= $_);
if ($line =~ /^(\S+)\s+(\S+)\s+\(([^)]+)\)$/s) {
$line = "";
my $archive_member = $1;
my $because_file = $2;
my $because_symbol = $3;
$archive_member =~ s|.*/([^/]+)|$1|;
$because_file =~ s|.*/([^/]+)|$1|;
print "\"$because_file\" -> \"$archive_member\";\n";
}
}
print "}\n";