1#!/usr/local/bin/perl 2 3# require 'x86asm.pl'; 4# &asm_init("cpp","des-586.pl"); 5# XXX 6# XXX 7# main'asm_finish 8 9sub main'asm_finish 10 { 11 &file_end(); 12 &asm_finish_cpp() if $cpp; 13 print &asm_get_output(); 14 } 15 16sub main'asm_init 17 { 18 ($type,$fn,$i386)=@_; 19 $filename=$fn; 20 21 $cpp=$sol=$aout=$win32=$gaswin=0; 22 if ( ($type eq "elf")) 23 { require "x86unix.pl"; } 24 elsif ( ($type eq "a.out")) 25 { $aout=1; require "x86unix.pl"; } 26 elsif ( ($type eq "gaswin")) 27 { $gaswin=1; $aout=1; require "x86unix.pl"; } 28 elsif ( ($type eq "sol")) 29 { $sol=1; require "x86unix.pl"; } 30 elsif ( ($type eq "cpp")) 31 { $cpp=1; require "x86unix.pl"; } 32 elsif ( ($type eq "win32")) 33 { $win32=1; require "x86ms.pl"; } 34 elsif ( ($type eq "win32n")) 35 { $win32=1; require "x86nasm.pl"; } 36 else 37 { 38 print STDERR <<"EOF"; 39Pick one target type from 40 elf - linux, FreeBSD etc 41 a.out - old linux 42 sol - x86 solaris 43 cpp - format so x86unix.cpp can be used 44 win32 - Windows 95/Windows NT 45 win32n - Windows 95/Windows NT NASM format 46EOF 47 exit(1); 48 } 49 50 &asm_init_output(); 51 52&comment("Don't even think of reading this code"); 53&comment("It was automatically generated by $filename"); 54&comment("Which is a perl program used to generate the x86 assember for"); 55&comment("any of elf, a.out, BSDI, Win32, gaswin (for GNU as on Win32) or Solaris"); 56&comment("eric <eay\@cryptsoft.com>"); 57&comment(""); 58 59 $filename =~ s/\.pl$//; 60 &file($filename); 61 } 62 63sub asm_finish_cpp 64 { 65 return unless $cpp; 66 67 local($tmp,$i); 68 foreach $i (&get_labels()) 69 { 70 $tmp.="#define $i _$i\n"; 71 } 72 print <<"EOF"; 73/* Run the C pre-processor over this file with one of the following defined 74 * ELF - elf object files, 75 * OUT - a.out object files, 76 * BSDI - BSDI style a.out object files 77 * SOL - Solaris style elf 78 */ 79 80#define TYPE(a,b) .type a,b 81#define SIZE(a,b) .size a,b 82 83#if defined(OUT) || (defined(BSDI) && !defined(ELF)) 84$tmp 85#endif 86 87#ifdef OUT 88#define OK 1 89#define ALIGN 4 90#endif 91 92#if defined(BSDI) && !defined(ELF) 93#define OK 1 94#define ALIGN 4 95#undef SIZE 96#undef TYPE 97#define SIZE(a,b) 98#define TYPE(a,b) 99#endif 100 101#if defined(ELF) || defined(SOL) 102#define OK 1 103#define ALIGN 16 104#endif 105 106#ifndef OK 107You need to define one of 108ELF - elf systems - linux-elf, NetBSD and DG-UX 109OUT - a.out systems - linux-a.out and FreeBSD 110SOL - solaris systems, which are elf with strange comment lines 111BSDI - a.out with a very primative version of as. 112#endif 113 114/* Let the Assembler begin :-) */ 115EOF 116 } 117 1181; 119