diff options
Diffstat (limited to 'src/lib/libcrypto/util/mksdef.pl')
-rw-r--r-- | src/lib/libcrypto/util/mksdef.pl | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/lib/libcrypto/util/mksdef.pl b/src/lib/libcrypto/util/mksdef.pl new file mode 100644 index 0000000000..065dc675f1 --- /dev/null +++ b/src/lib/libcrypto/util/mksdef.pl | |||
@@ -0,0 +1,87 @@ | |||
1 | |||
2 | # Perl script to split libeay32.def into two distinct DEF files for use in | ||
3 | # fipdso mode. It works out symbols in each case by running "link" command and | ||
4 | # parsing the output to find the list of missing symbols then splitting | ||
5 | # libeay32.def based on the result. | ||
6 | |||
7 | |||
8 | # Get list of unknown symbols | ||
9 | |||
10 | my @deferr = `link @ARGV`; | ||
11 | |||
12 | my $preamble = ""; | ||
13 | my @fipsdll; | ||
14 | my @fipsrest; | ||
15 | my %nosym; | ||
16 | |||
17 | # Add symbols to a hash for easy lookup | ||
18 | |||
19 | foreach (@deferr) | ||
20 | { | ||
21 | if (/^.*symbol (\S+)$/) | ||
22 | { | ||
23 | $nosym{$1} = 1; | ||
24 | } | ||
25 | } | ||
26 | |||
27 | open (IN, "ms/libeay32.def") || die "Can't Open DEF file for spliting"; | ||
28 | |||
29 | my $started = 0; | ||
30 | |||
31 | # Parse libeay32.def into two arrays depending on whether the symbol matches | ||
32 | # the missing list. | ||
33 | |||
34 | |||
35 | foreach (<IN>) | ||
36 | { | ||
37 | if (/^\s*(\S+)\s*(\@\S+)\s*$/) | ||
38 | { | ||
39 | $started = 1; | ||
40 | if (exists $nosym{$1}) | ||
41 | { | ||
42 | push @fipsrest, $_; | ||
43 | } | ||
44 | else | ||
45 | { | ||
46 | my $imptmp = sprintf " %-39s %s\n", | ||
47 | "$1=libosslfips.$1", $2; | ||
48 | push @fipsrest, $imptmp; | ||
49 | push @fipsdll, "\t$1\n"; | ||
50 | } | ||
51 | } | ||
52 | $preamble .= $_ unless $started; | ||
53 | } | ||
54 | |||
55 | close IN; | ||
56 | |||
57 | # Hack! Add some additional exports needed for libcryptofips.dll | ||
58 | # | ||
59 | |||
60 | push @fipsdll, "\tOPENSSL_showfatal\n"; | ||
61 | push @fipsdll, "\tOPENSSL_cpuid_setup\n"; | ||
62 | |||
63 | # Write out DEF files for each array | ||
64 | |||
65 | write_def("ms/libosslfips.def", "LIBOSSLFIPS", $preamble, \@fipsdll); | ||
66 | write_def("ms/libeayfips.def", "", $preamble, \@fipsrest); | ||
67 | |||
68 | |||
69 | sub write_def | ||
70 | { | ||
71 | my ($fnam, $defname, $preamble, $rdefs) = @_; | ||
72 | open (OUT, ">$fnam") || die "Can't Open DEF file $fnam for Writing\n"; | ||
73 | |||
74 | if ($defname ne "") | ||
75 | { | ||
76 | $preamble =~ s/LIBEAY32/$defname/g; | ||
77 | $preamble =~ s/LIBEAY/$defname/g; | ||
78 | } | ||
79 | print OUT $preamble; | ||
80 | foreach (@$rdefs) | ||
81 | { | ||
82 | print OUT $_; | ||
83 | } | ||
84 | close OUT; | ||
85 | } | ||
86 | |||
87 | |||