diff --git a/util/fipsas.pl b/util/fipsas.pl new file mode 100644 index 0000000000000000000000000000000000000000..cd8b8c02f4f4dd4624383d4d97cc8113f53e1824 --- /dev/null +++ b/util/fipsas.pl @@ -0,0 +1,57 @@ + +# 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; + +# Open symbol rename file. +open(IN, "$top/fips/fipssyms.h") || die "Can't open fipssyms.h"; + +# Skip to assembler symbols +while () + { + last if (/assembler/) + } + +# Store all renames. +while () + { + if (/^#define\s+(\w+)\s+(\w+)\b/) + { + $edits{$1} = $2; + } + } + +my ($from, $to); + +#rename target temporarily +rename($target, "tmptarg.s") || die "Can't rename $target\n"; + +#edit target +open IN,"tmptarg.s"; +open OUT, ">$target"; + +while () +{ + while (($from, $to) = each %edits) + { + s/(\b)$from(\b)/$1$to$2/g; + } + print OUT $_; +} +# run assembler +system @ARGS; + +my $rv = $?; + +# restore target +unlink $target; +rename "tmptarg.s", $target; + +die "Error executing assembler!" if $rv != 0; +