Experimental perl script to edit assembly language source files,
[openssl.git] / util / fipsas.pl
1
2 # FIPS assembly language preprocessor
3 # Renames all symbols in the file to
4 # their modified fips versions.
5
6
7 my @ARGS = @ARGV;
8
9 my $top = shift @ARGS;
10 my $target = shift @ARGS;
11
12 # Open symbol rename file.
13 open(IN, "$top/fips/fipssyms.h") || die "Can't open fipssyms.h";
14
15 # Skip to assembler symbols
16 while (<IN>)
17         {
18         last if (/assembler/)
19         }
20
21 # Store all renames.
22 while (<IN>)
23         {
24         if (/^#define\s+(\w+)\s+(\w+)\b/)
25                 {
26                 $edits{$1} = $2;
27                 }
28         }
29
30 my ($from, $to);
31
32 #rename target temporarily
33 rename($target, "tmptarg.s") || die "Can't rename $target\n";
34
35 #edit target
36 open IN,"tmptarg.s";
37 open OUT, ">$target";
38
39 while (<IN>)
40 {
41         while (($from, $to) = each %edits)
42                 {
43                 s/(\b)$from(\b)/$1$to$2/g;
44                 }
45         print OUT $_;
46 }
47 # run assembler
48 system @ARGS;
49
50 my $rv = $?;
51
52 # restore target
53 unlink $target;
54 rename "tmptarg.s", $target;
55
56 die "Error executing assembler!" if $rv != 0;
57