PR: 2786
[mirror-openssl.git] / util / fipsas.pl
blob1694c59a411fc52582574f262c2e902c3606d241
2 # FIPS assembly language preprocessor
3 # Renames all symbols in the file to
4 # their modified fips versions.
7 my @ARGS = @ARGV;
9 my $top = shift @ARGS;
10 my $target = shift @ARGS;
11 my $tmptarg = $target;
13 $tmptarg =~ s/\.[^\\\/\.]+$/.tmp/;
15 my $runasm = 1;
17 if ($ARGS[0] eq "norunasm")
19 $runasm = 0;
20 shift @ARGS;
23 my $enabled = 0;
25 $enabled = 1 if $ENV{FIPSCANISTERINTERNAL} eq "y";
27 if ($enabled == 0 && $runasm)
29 system @ARGS;
30 exit $?
34 # Open symbol rename file.
35 open(IN, "$top/fips/fipssyms.h") || die "Can't open fipssyms.h";
37 # Skip to assembler symbols
38 while (<IN>)
40 last if (/assembler/)
43 # Store all renames.
44 while (<IN>)
46 if (/^#define\s+(\w+)\s+(\w+)\b/)
48 $edits{$1} = $2;
52 my ($from, $to);
54 #delete any temp file lying around
56 unlink $tmptarg;
58 #rename target temporarily
59 rename($target, $tmptarg) || die "Can't rename $target";
61 #edit target
62 open(IN,$tmptarg) || die "Can't open temporary file";
63 open(OUT, ">$target") || die "Can't open output file $target";
65 while (<IN>)
67 while (($from, $to) = each %edits)
69 s/(\b_*)$from(\b)/$1$to$2/g;
71 print OUT $_;
74 close OUT;
76 if ($runasm)
78 # run assembler
79 system @ARGS;
81 my $rv = $?;
83 # restore target
84 unlink $target;
85 rename $tmptarg, $target;
87 die "Error executing assembler!" if $rv != 0;
89 else
91 # Don't care about target
92 unlink $tmptarg;