blob: 9dfe0d895c415f0c4cda240d0242cda087f285ba (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# FIPS assembly language preprocessor
# Renames all symbols in the file to
# their modified fips versions.
my @ARGS = @ARGV;
my $top = shift @ARGS;
my $target = shift @ARGS;
my $runasm = 1;
if ($ARGS[0] eq "norunasm")
{
$runasm = 0;
shift @ARGS;
}
my $enabled = 0;
$enabled = 1 if $ENV{FIPSCANISTERINTERNAL} eq "y";
if ($enabled == 0 && $runasm)
{
system @ARGS;
exit $?
}
# Open symbol rename file.
open(IN, "$top/fips/fipssyms.h") || die "Can't open fipssyms.h";
# Skip to assembler symbols
while (<IN>)
{
last if (/assembler/)
}
# Store all renames [noting minimal length].
my $minlen=0x10000;
while (<IN>)
{
if (/^#define\s+_?(\w+)\s+_?(\w+)\b/)
{
$edits{$1} = $2;
my $len = length($1);
$minlen = $len if ($len<$minlen);
}
}
open(IN,"$target") || die "Can't open $target for reading";
@code = <IN>; # suck in whole file
close IN;
open(OUT,">$target") || die "Can't open $target for writing";
foreach $line (@code)
{
$line =~ s/\b(_?)(\w{$minlen,})\b/$1.($edits{$2} or $2)/geo;
print OUT $line;
}
close OUT;
if ($runasm)
{
# run assembler
system @ARGS;
my $rv = $?;
die "Error executing assembler!" if $rv != 0;
}
|