mirror of https://github.com/openssl/openssl.git
				
				
				
			
		
			
	
	
		
			85 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
|  | #! /usr/bin/env perl | ||
|  | # Copyright 2006-2023 The OpenSSL Project Authors. All Rights Reserved. | ||
|  | # | ||
|  | # Licensed under the Apache License 2.0 (the "License").  You may not use | ||
|  | # this file except in compliance with the License.  You can obtain a copy | ||
|  | # in the file LICENSE in the source distribution or at | ||
|  | # https://www.openssl.org/source/license.html | ||
|  | 
 | ||
|  | use warnings; | ||
|  | use strict; | ||
|  | use Config; | ||
|  | 
 | ||
|  | my $expectedsyms=$ARGV[0]; | ||
|  | 
 | ||
|  | shift(@ARGV); | ||
|  | 
 | ||
|  | my $objlist; | ||
|  | my $objfilelist = join(" ", @ARGV); | ||
|  | my $expsyms; | ||
|  | my $exps; | ||
|  | my $OBJFH; | ||
|  | my $cmd; | ||
|  | 
 | ||
|  | if ($Config{osname} eq "MSWin32") { | ||
|  |         my $currentdll = ""; | ||
|  |         $cmd = "dumpbin /imports " . $objfilelist; | ||
|  |         my @symlist; | ||
|  |         open $expsyms, '<', $expectedsyms or die; | ||
|  |         { | ||
|  |             local $/; | ||
|  |             $exps=<$expsyms>; | ||
|  |         } | ||
|  |         close($expsyms); | ||
|  |         open($OBJFH, "$cmd|") or die "Cannot open process: $!"; | ||
|  |         while (<$OBJFH>) | ||
|  |         { | ||
|  |             chomp; | ||
|  |             my $dllfile = $_; | ||
|  |             $dllfile =~ s/( +)(.*)(\.dll)(.*)/DLLFILE \2/; | ||
|  |             if (index($dllfile, "DLLFILE") >= 0) { | ||
|  |                 $currentdll = substr($dllfile, 8); | ||
|  |                 $currentdll =~ s/^\s+|s+$//g; | ||
|  |             } | ||
|  |             # filter imports from our own library | ||
|  |             if ("$currentdll" ne "libcrypto-3-x64") { | ||
|  |                 my $line = $_; | ||
|  |                 $line =~ s/                          [0-9a-fA-F]{1,2} /SYMBOL /; | ||
|  |                 if (index($line, "SYMBOL") != -1) { | ||
|  |                     $line =~ s/.*SYMBOL //; | ||
|  |                     push(@symlist, $line); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |         foreach (@symlist) { | ||
|  |             if (index($exps, $_) < 0) { | ||
|  |                 print "Symbol $_ not in the allowed platform symbols list\n"; | ||
|  |                 exit 1; | ||
|  |             } | ||
|  |         } | ||
|  |         exit 0; | ||
|  |     } | ||
|  | else { | ||
|  |         $cmd = "objdump -t " . $objfilelist . " | grep UND | grep -v \@OPENSSL"; | ||
|  |         $cmd = $cmd . " | awk '{print \$NF}' |"; | ||
|  |         $cmd = $cmd . " sed -e\"s/@.*\$//\" | sort | uniq"; | ||
|  | 
 | ||
|  |         open $expsyms, '<', $expectedsyms or die; | ||
|  |         { | ||
|  |             local $/; | ||
|  |             $exps=<$expsyms>; | ||
|  |         } | ||
|  |         close($expsyms); | ||
|  | 
 | ||
|  |         open($OBJFH, "$cmd|") or die "Cannot open process: $!"; | ||
|  |         while (<$OBJFH>) | ||
|  |         { | ||
|  |                 if (index($exps, $_) < 0) { | ||
|  |                     print "Symbol $_ not in the allowed platform symbols list\n"; | ||
|  |                     exit 1; | ||
|  |                 } | ||
|  |         } | ||
|  |         close($OBJFH); | ||
|  |         exit 0; | ||
|  |     } |