
# build with generating debugging information
# nm -olg *.o | perl unused-globals.pl | sort -k1.40

# wordlist.o:0000000000000590 T do_wordlist_crack /home/user/john/john/master/src/wordlist.c:161
# wordlist.o:                 U error     /home/user/john/john/master/src/wordlist.c:80

use strict;
use warnings;

my (%used, %defined);

while (<>) {
    chomp;
     my ($obj, $type, $symbol, $where) = /^(.*?):[0-9A-Fa-f]*\s+(\S) (\S+)\s?(.*)/;
    if ($type eq 'U') {
        $used{$symbol}++;
    } else {
        $where =~ s!.*/!!;
        $defined{$symbol} = $obj . ($where ? " <- $where" : "");
    }
}

# unused
for (sort keys %defined) {
    if (!$used{$_}) {
        printf "%-39s %s\n", $_, $defined{$_};
    }
}

# #undefined
# for (sort keys %used) {
#     if (!$defined{$_}) {
#         printf "%-39s %s\n", $_, $used{$_};
#     }
# }

