fipsas.pl 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. # FIPS assembly language preprocessor
  2. # Renames all symbols in the file to
  3. # their modified fips versions.
  4. my @ARGS = @ARGV;
  5. my $top = shift @ARGS;
  6. my $target = shift @ARGS;
  7. my $runasm = 1;
  8. if ($ARGS[0] eq "norunasm")
  9. {
  10. $runasm = 0;
  11. shift @ARGS;
  12. }
  13. my $enabled = 0;
  14. $enabled = 1 if $ENV{FIPSCANISTERINTERNAL} eq "y";
  15. if ($enabled == 0 && $runasm)
  16. {
  17. system @ARGS;
  18. exit $?
  19. }
  20. # Open symbol rename file.
  21. open(IN, "$top/fips/fipssyms.h") || die "Can't open fipssyms.h";
  22. # Skip to assembler symbols
  23. while (<IN>)
  24. {
  25. last if (/assembler/)
  26. }
  27. # Store all renames.
  28. while (<IN>)
  29. {
  30. if (/^#define\s+(\w+)\s+(\w+)\b/)
  31. {
  32. $edits{$1} = $2;
  33. }
  34. }
  35. my ($from, $to);
  36. #rename target temporarily
  37. rename($target, "tmptarg.s") || die "Can't rename $target";
  38. #edit target
  39. open(IN,"tmptarg.s") || die "Can't open temporary file";
  40. open(OUT, ">$target") || die "Can't open output file $target";
  41. while (<IN>)
  42. {
  43. while (($from, $to) = each %edits)
  44. {
  45. s/(\b_*)$from(\b)/$1$to$2/g;
  46. }
  47. print OUT $_;
  48. }
  49. close OUT;
  50. if ($runasm)
  51. {
  52. # run assembler
  53. system @ARGS;
  54. my $rv = $?;
  55. # restore target
  56. unlink $target;
  57. rename "tmptarg.s", $target;
  58. die "Error executing assembler!" if $rv != 0;
  59. }
  60. else
  61. {
  62. # Don't care about target
  63. unlink "tmptarg.s";
  64. }