123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #! /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;
- }
|