From d4cc0e161bf103d3d3e01fefa02e867d4a2053c2 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 23 Jul 2019 17:37:24 -0400 Subject: [PATCH] Set tracking on calcrom.pl and unignore --- .gitignore | 1 + .travis/calcrom/calcrom.pl | 120 +++++++++++++++++++++++++++++++++++++ baserom.ips | Bin 2325687 -> 2271448 bytes 3 files changed, 121 insertions(+) create mode 100644 .travis/calcrom/calcrom.pl diff --git a/.gitignore b/.gitignore index 6910d62e9..a4182afc1 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,4 @@ tools/binutils tools/br_ips/br_ips tools/br_ips/ips_patch types_*.taghl +!.travis/calcrom/calcrom.pl diff --git a/.travis/calcrom/calcrom.pl b/.travis/calcrom/calcrom.pl new file mode 100644 index 000000000..7b94c650b --- /dev/null +++ b/.travis/calcrom/calcrom.pl @@ -0,0 +1,120 @@ +#!/usr/bin/perl + +use IPC::Cmd qw[ run ]; + +(@ARGV == 1) + or die "ERROR: no map file specified.\n"; +open(my $file, $ARGV[0]) + or die "ERROR: could not open file '$ARGV[0]'.\n"; + +my $src = 0; +my $asm = 0; +while (my $line = <$file>) +{ + if ($line =~ /^ \.(\w+)\s+0x[0-9a-f]+\s+(0x[0-9a-f]+) (\w+)\/.+\.o/) + { + my $section = $1; + my $size = hex($2); + my $dir = $3; + + if ($section =~ /text/) + { + if ($dir eq 'src') + { + $src += $size; + } + elsif ($dir eq 'asm') + { + $asm += $size; + } + } + } +} + +# Note that the grep filters out all branch labels. It also requires a minimum +# line length of 5, to filter out a ton of generated symbols (like AcCn). No +# settings to nm seem to remove these symbols. Finally, nm prints out a separate +# entry for whenever a name appears in a file, not just where it's defined. uniq +# removes all the duplicate entries. +# +# +# You'd expect this to take a while, because of uniq. It runs in under a second, +# though. Uniq is pretty fast! +my $base_cmd = "nm pokefirered.elf | awk '{print \$3}' | grep '^[^_].\\{4\\}' | uniq"; + +# This looks for Unknown_, Unknown_, or sub_, followed by just numbers. Note that +# it matches even if stuff precedes the unknown, like sUnknown/gUnknown. +my $undoc_cmd = "grep '[Uu]nknown_[0-9a-fA-F]*\\|sub_[0-9a-fA-F]*'"; + +# This looks for every symbol with an address at the end of it. Some things are +# given a name based on their type / location, but still have an unknown purpose. +# For example, FooMap_EventScript_FFFFFFF. +my $partial_doc_cmd = "grep '[0-9a-fA-F]\\{6,7\\}'"; + +my $count_cmd = "wc -l"; + +# It sucks that we have to run this three times, but I can't figure out how to get +# stdin working for subcommands in perl while still having a timeout. It's decently +# fast anyway. +my $total_syms_as_string; +(run ( + command => "$base_cmd | $count_cmd", + buffer => \$total_syms_as_string, + timeout => 60 +)) + or die "ERROR: Error while getting all symbols: $?"; + +my $undocumented_as_string; +(run ( + command => "$base_cmd | $undoc_cmd | $count_cmd", + buffer => \$undocumented_as_string, + timeout => 60 +)) + or die "ERROR: Error while filtering for undocumented symbols: $?"; + +my $partial_documented_as_string; +(run ( + command => "$base_cmd | $partial_doc_cmd | $count_cmd", + buffer => \$partial_documented_as_string, + timeout => 60 +)) + or die "ERROR: Error while filtering for partial symbols: $?"; + +# Performing addition on a string converts it to a number. Any string that fails +# to convert to a number becomes 0. So if our converted number is 0, but our string +# is nonzero, then the conversion was an error. +my $undocumented = $undocumented_as_string + 0; +(($undocumented != 0) and ($undocumented_as_string ne "0")) + or die "ERROR: Cannot convert string to num: '$undocumented_as_string'"; + +my $partial_documented = $partial_documented_as_string + 0; +(($partial_documented != 0) and ($partial_documented_as_string ne "0")) + or die "ERROR: Cannot convert string to num: '$partial_documented_as_string'"; + +my $total_syms = $total_syms_as_string + 0; +(($total_syms != 0) and ($total_syms_as_string ne "0")) + or die "ERROR: Cannot convert string to num: '$total_syms_as_string'"; + +($total_syms != 0) + or die "ERROR: No symbols found."; + +my $total = $src + $asm; +my $srcPct = sprintf("%.4f", 100 * $src / $total); +my $asmPct = sprintf("%.4f", 100 * $asm / $total); + +# partial_documented is double-counting the unknown_* and sub_* symbols. +$partial_documented = $partial_documented - $undocumented; + +my $documented = $total_syms - ($undocumented + $partial_documented); +my $docPct = sprintf("%.4f", 100 * $documented / $total_syms); +my $partialPct = sprintf("%.4f", 100 * $partial_documented / $total_syms); +my $undocPct = sprintf("%.4f", 100 * $undocumented / $total_syms); + +print "$total total bytes of code\n"; +print "$src bytes of code in src ($srcPct%)\n"; +print "$asm bytes of code in asm ($asmPct%)\n"; +print "\n"; +print "$total_syms total symbols\n"; +print "$documented symbols documented ($docPct%)\n"; +print "$partial_documented symbols partially documented ($partialPct%)\n"; +print "$undocumented symbols undocumented ($undocPct%)\n"; diff --git a/baserom.ips b/baserom.ips index d9f256fbbdac43c37b6f1d6f9fab80d6325a3e4b..b8bb6bebbb38f11a4d649d6a341c2a135af6d183 100644 GIT binary patch delta 152 zcmWN=OA3Ne06;oI7zK2tpuE-G=bi(X2JN183a>NA4f-`;MaP zMX#*tyH%D()~(ts!?bDCd7!}~O`d4+Oq&-vba|ymp8-QgjF~XyjT!HJFz1s6OF3=T GYyJZ=HB3?f delta 39356 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 Jgml*%{|oowc9#GE