Home | History | Annotate | Download | only in perlasm
      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 
      9 sub main'asm_finish
     10 	{
     11 	&file_end();
     12 	&asm_finish_cpp() if $cpp;
     13 	print &asm_get_output();
     14 	}
     15 
     16 sub main'asm_init
     17 	{
     18 	($type,$fn,$i386)=@_;
     19 	$filename=$fn;
     20 
     21 	$elf=$cpp=$coff=$aout=$win32=$netware=$mwerks=0;
     22 	if (	($type eq "elf"))
     23 		{ $elf=1; require "x86unix.pl"; }
     24 	elsif (	($type eq "a.out"))
     25 		{ $aout=1; require "x86unix.pl"; }
     26 	elsif (	($type eq "coff" or $type eq "gaswin"))
     27 		{ $coff=1; require "x86unix.pl"; }
     28 	elsif (	($type eq "cpp"))
     29 		{ $cpp=1; require "x86unix.pl"; }
     30 	elsif (	($type eq "win32"))
     31 		{ $win32=1; require "x86ms.pl"; }
     32 	elsif (	($type eq "win32n"))
     33 		{ $win32=1; require "x86nasm.pl"; }
     34 	elsif (	($type eq "nw-nasm"))
     35 		{ $netware=1; require "x86nasm.pl"; }
     36 	elsif (	($type eq "nw-mwasm"))
     37 		{ $netware=1; $mwerks=1; require "x86nasm.pl"; }
     38 	else
     39 		{
     40 		print STDERR <<"EOF";
     41 Pick one target type from
     42 	elf	- Linux, FreeBSD, Solaris x86, etc.
     43 	a.out	- OpenBSD, DJGPP, etc.
     44 	coff	- GAS/COFF such as Win32 targets
     45 	win32	- Windows 95/Windows NT
     46 	win32n	- Windows 95/Windows NT NASM format
     47 	nw-nasm - NetWare NASM format
     48 	nw-mwasm- NetWare Metrowerks Assembler
     49 EOF
     50 		exit(1);
     51 		}
     52 
     53 	$pic=0;
     54 	for (@ARGV) {	$pic=1 if (/\-[fK]PIC/i);	}
     55 
     56 	&asm_init_output();
     57 
     58 &comment("Don't even think of reading this code");
     59 &comment("It was automatically generated by $filename");
     60 &comment("Which is a perl program used to generate the x86 assember for");
     61 &comment("any of ELF, a.out, COFF, Win32, ...");
     62 &comment("eric <eay\@cryptsoft.com>");
     63 &comment("");
     64 
     65 	$filename =~ s/\.pl$//;
     66 	&file($filename);
     67 	}
     68 
     69 sub asm_finish_cpp
     70 	{
     71 	return unless $cpp;
     72 
     73 	local($tmp,$i);
     74 	foreach $i (&get_labels())
     75 		{
     76 		$tmp.="#define $i _$i\n";
     77 		}
     78 	print <<"EOF";
     79 /* Run the C pre-processor over this file with one of the following defined
     80  * ELF - elf object files,
     81  * OUT - a.out object files,
     82  * BSDI - BSDI style a.out object files
     83  * SOL - Solaris style elf
     84  */
     85 
     86 #define TYPE(a,b)       .type   a,b
     87 #define SIZE(a,b)       .size   a,b
     88 
     89 #if defined(OUT) || (defined(BSDI) && !defined(ELF))
     90 $tmp
     91 #endif
     92 
     93 #ifdef OUT
     94 #define OK	1
     95 #define ALIGN	4
     96 #if defined(__CYGWIN__) || defined(__DJGPP__) || (__MINGW32__)
     97 #undef SIZE
     98 #undef TYPE
     99 #define SIZE(a,b)
    100 #define TYPE(a,b)	.def a; .scl 2; .type 32; .endef
    101 #endif /* __CYGWIN || __DJGPP */
    102 #endif
    103 
    104 #if defined(BSDI) && !defined(ELF)
    105 #define OK              1
    106 #define ALIGN           4
    107 #undef SIZE
    108 #undef TYPE
    109 #define SIZE(a,b)
    110 #define TYPE(a,b)
    111 #endif
    112 
    113 #if defined(ELF) || defined(SOL)
    114 #define OK              1
    115 #define ALIGN           16
    116 #endif
    117 
    118 #ifndef OK
    119 You need to define one of
    120 ELF - elf systems - linux-elf, NetBSD and DG-UX
    121 OUT - a.out systems - linux-a.out and FreeBSD
    122 SOL - solaris systems, which are elf with strange comment lines
    123 BSDI - a.out with a very primative version of as.
    124 #endif
    125 
    126 /* Let the Assembler begin :-) */
    127 EOF
    128 	}
    129 
    130 1;
    131