123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #!/usr/local/bin/perl
- # require 'x86asm.pl';
- # &asm_init("cpp","des-586.pl");
- # XXX
- # XXX
- # main'asm_finish
- sub main'asm_finish
- {
- &file_end();
- &asm_finish_cpp() if $cpp;
- print &asm_get_output();
- }
- sub main'asm_init
- {
- ($type,$fn,$i386)=@_;
- $filename=$fn;
- $elf=$cpp=$coff=$aout=$win32=$netware=$mwerks=0;
- if ( ($type eq "elf"))
- { $elf=1; require "x86unix.pl"; }
- elsif ( ($type eq "a.out"))
- { $aout=1; require "x86unix.pl"; }
- elsif ( ($type eq "coff" or $type eq "gaswin"))
- { $coff=1; require "x86unix.pl"; }
- elsif ( ($type eq "cpp"))
- { $cpp=1; require "x86unix.pl"; }
- elsif ( ($type eq "win32"))
- { $win32=1; require "x86ms.pl"; }
- elsif ( ($type eq "win32n"))
- { $win32=1; require "x86nasm.pl"; }
- elsif ( ($type eq "nw-nasm"))
- { $netware=1; require "x86nasm.pl"; }
- elsif ( ($type eq "nw-mwasm"))
- { $netware=1; $mwerks=1; require "x86nasm.pl"; }
- else
- {
- print STDERR <<"EOF";
- Pick one target type from
- elf - Linux, FreeBSD, Solaris x86, etc.
- a.out - OpenBSD, DJGPP, etc.
- coff - GAS/COFF such as Win32 targets
- win32 - Windows 95/Windows NT
- win32n - Windows 95/Windows NT NASM format
- nw-nasm - NetWare NASM format
- nw-mwasm- NetWare Metrowerks Assembler
- EOF
- exit(1);
- }
- $pic=0;
- for (@ARGV) { $pic=1 if (/\-[fK]PIC/i); }
- &asm_init_output();
- &comment("Don't even think of reading this code");
- &comment("It was automatically generated by $filename");
- &comment("Which is a perl program used to generate the x86 assember for");
- &comment("any of ELF, a.out, COFF, Win32, ...");
- &comment("eric <eay\@cryptsoft.com>");
- &comment("");
- $filename =~ s/\.pl$//;
- &file($filename);
- }
- sub asm_finish_cpp
- {
- return unless $cpp;
- local($tmp,$i);
- foreach $i (&get_labels())
- {
- $tmp.="#define $i _$i\n";
- }
- print <<"EOF";
- /* Run the C pre-processor over this file with one of the following defined
- * ELF - elf object files,
- * OUT - a.out object files,
- * BSDI - BSDI style a.out object files
- * SOL - Solaris style elf
- */
- #define TYPE(a,b) .type a,b
- #define SIZE(a,b) .size a,b
- #if defined(OUT) || (defined(BSDI) && !defined(ELF))
- $tmp
- #endif
- #ifdef OUT
- #define OK 1
- #define ALIGN 4
- #if defined(__CYGWIN__) || defined(__DJGPP__) || defined(__MINGW32__)
- #undef SIZE
- #undef TYPE
- #define SIZE(a,b)
- #define TYPE(a,b) .def a; .scl 2; .type 32; .endef
- #endif /* __CYGWIN || __DJGPP */
- #endif
- #if defined(BSDI) && !defined(ELF)
- #define OK 1
- #define ALIGN 4
- #undef SIZE
- #undef TYPE
- #define SIZE(a,b)
- #define TYPE(a,b)
- #endif
- #if defined(ELF) || defined(SOL)
- #define OK 1
- #define ALIGN 16
- #endif
- #ifndef OK
- You need to define one of
- ELF - elf systems - linux-elf, NetBSD and DG-UX
- OUT - a.out systems - linux-a.out and FreeBSD
- SOL - solaris systems, which are elf with strange comment lines
- BSDI - a.out with a very primative version of as.
- #endif
- /* Let the Assembler begin :-) */
- EOF
- }
- 1;
|