78 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| my $show_module_name = 1;
 | |
| my $use_indent = 1;
 | |
| my $strip_leading_underscore = 0;
 | |
| 
 | |
| # Dump all symbols for the given object file that are defined and have
 | |
| # external scope.
 | |
| 
 | |
| sub dump_symbols_for_file($)
 | |
| {
 | |
|     $fn = shift;
 | |
| 
 | |
|     print STDERR "Opening dump of object [$fn]\n";
 | |
| 
 | |
|     open(SP, '-|', "dumpbin /symbols \"".$fn."\"") or die "Can't open pipe for $fn";
 | |
| 
 | |
|   LINE:
 | |
|     while (<SP>) {
 | |
| 	# 008 00000000 SECT3  notype ()    External     | _encode_AccessDescription
 | |
| 
 | |
| 	/^[[:xdigit:]]{3,}\s[[:xdigit:]]{8,}\s(\w+)\s+\w*\s+(?:\(\)|  )\s+(\w+)\s+\|\s+(\w+)$/ && do {
 | |
| 	    my ($section, $visibility, $symbol) = ($1, $2, $3);
 | |
| 
 | |
| 	    if ($section ne "UNDEF" && $visibility eq "External") {
 | |
| 		print $fn if $show_module_name;
 | |
| 		print "\t" if $use_indent || $show_module_name;
 | |
| 
 | |
| 		if ($strip_leading_underscore && $symbol =~ /_(.*)/) {
 | |
| 		    $symbol = $1;
 | |
| 		}
 | |
| 		print $symbol;
 | |
| 		print "\n";
 | |
| 	    }
 | |
| 	};
 | |
|     }
 | |
| 
 | |
|     close SP;
 | |
| }
 | |
| 
 | |
| sub use_response_file($)
 | |
| {
 | |
|     $fn = shift;
 | |
| 
 | |
|     open (RF, '<', $fn) or die "Can't open response file $fn";
 | |
| 
 | |
|     while (<RF>) {
 | |
| 	/(\S+)/ && do {
 | |
| 	    dump_symbols_for_file($1);
 | |
| 	}
 | |
|     }
 | |
|     close RF;
 | |
| }
 | |
| 
 | |
| for (@ARGV) {
 | |
|     ARG: {
 | |
| 	/-q/ && do {
 | |
| 	    $show_module_name = 0;
 | |
| 	    last ARG;
 | |
| 	};
 | |
| 
 | |
| 	/-1/ && do {
 | |
| 	    $use_indent = 0;
 | |
| 	    last ARG;
 | |
| 	};
 | |
| 
 | |
| 	/-u/ && do {
 | |
| 	    $strip_leading_underscore = 1;
 | |
| 	    last ARG;
 | |
| 	};
 | |
| 
 | |
| 	/@(.*)/ && do {
 | |
| 	    use_response_file($1);
 | |
| 	    last ARG;
 | |
| 	};
 | |
| 
 | |
| 	dump_symbols_for_file($_);
 | |
|     }
 | |
| }
 | 
