diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2011-02-17 18:08:59 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2011-02-17 18:08:59 +0000 |
commit | 38bae7baa5beec3a1bd4cb32b1d0fa3410b2d780 (patch) | |
tree | 90ccf47966abb543e7fe9de3d00cb5734339afe2 | |
parent | d47691ecfe0ec8aae7366532b9e8c8421150fead (diff) |
Experimental perl script to edit assembly language source files,
call the assembler, then restore original file.
This makes OPENSSL_FIPSSYMS work for assembly language builds.
-rw-r--r-- | util/fipsas.pl | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/util/fipsas.pl b/util/fipsas.pl new file mode 100644 index 0000000000..cd8b8c02f4 --- /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 (<IN>) + { + last if (/assembler/) + } + +# Store all renames. +while (<IN>) + { + 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 (<IN>) +{ + 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; + |