summaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2011-02-17 18:08:59 +0000
committerDr. Stephen Henson <steve@openssl.org>2011-02-17 18:08:59 +0000
commit38bae7baa5beec3a1bd4cb32b1d0fa3410b2d780 (patch)
tree90ccf47966abb543e7fe9de3d00cb5734339afe2 /util
parentd47691ecfe0ec8aae7366532b9e8c8421150fead (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.
Diffstat (limited to 'util')
-rw-r--r--util/fipsas.pl57
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;
+