1998-12-21 10:56:39 +00:00
|
|
|
#!/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
|
|
|
|
{
|
1999-03-31 12:38:27 +00:00
|
|
|
($type,$fn,$i386)=@_;
|
1998-12-21 10:56:39 +00:00
|
|
|
$filename=$fn;
|
|
|
|
|
2004-08-29 16:10:27 +00:00
|
|
|
$elf=$cpp=$coff=$aout=$win32=$netware=$mwerks=0;
|
1998-12-21 10:56:39 +00:00
|
|
|
if ( ($type eq "elf"))
|
2003-01-03 17:37:53 +00:00
|
|
|
{ $elf=1; require "x86unix.pl"; }
|
1998-12-21 10:56:39 +00:00
|
|
|
elsif ( ($type eq "a.out"))
|
|
|
|
{ $aout=1; require "x86unix.pl"; }
|
2004-08-01 17:03:50 +00:00
|
|
|
elsif ( ($type eq "coff" or $type eq "gaswin"))
|
|
|
|
{ $coff=1; require "x86unix.pl"; }
|
1998-12-21 10:56:39 +00:00
|
|
|
elsif ( ($type eq "cpp"))
|
|
|
|
{ $cpp=1; require "x86unix.pl"; }
|
|
|
|
elsif ( ($type eq "win32"))
|
|
|
|
{ $win32=1; require "x86ms.pl"; }
|
1999-07-12 12:33:16 +00:00
|
|
|
elsif ( ($type eq "win32n"))
|
|
|
|
{ $win32=1; require "x86nasm.pl"; }
|
2003-11-28 13:10:58 +00:00
|
|
|
elsif ( ($type eq "nw-nasm"))
|
2004-08-29 16:10:27 +00:00
|
|
|
{ $netware=1; require "x86nasm.pl"; }
|
2003-11-28 13:10:58 +00:00
|
|
|
elsif ( ($type eq "nw-mwasm"))
|
2004-08-29 16:10:27 +00:00
|
|
|
{ $netware=1; $mwerks=1; require "x86nasm.pl"; }
|
1998-12-21 10:56:39 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
print STDERR <<"EOF";
|
|
|
|
Pick one target type from
|
2004-08-01 17:03:50 +00:00
|
|
|
elf - Linux, FreeBSD, Solaris x86, etc.
|
|
|
|
a.out - OpenBSD, DJGPP, etc.
|
|
|
|
coff - GAS/COFF such as Win32 targets
|
1998-12-21 10:56:39 +00:00
|
|
|
win32 - Windows 95/Windows NT
|
1999-07-12 12:33:16 +00:00
|
|
|
win32n - Windows 95/Windows NT NASM format
|
2003-11-28 13:10:58 +00:00
|
|
|
nw-nasm - NetWare NASM format
|
|
|
|
nw-mwasm- NetWare Metrowerks Assembler
|
1998-12-21 10:56:39 +00:00
|
|
|
EOF
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
2003-01-03 17:37:53 +00:00
|
|
|
$pic=0;
|
|
|
|
for (@ARGV) { $pic=1 if (/\-[fK]PIC/i); }
|
|
|
|
|
1998-12-21 10:56:39 +00:00
|
|
|
&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");
|
2004-08-01 17:03:50 +00:00
|
|
|
&comment("any of ELF, a.out, COFF, Win32, ...");
|
1998-12-21 10:56:39 +00:00
|
|
|
&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
|
|
|
|
|
1999-07-06 17:28:29 +00:00
|
|
|
#if defined(OUT) || (defined(BSDI) && !defined(ELF))
|
1998-12-21 10:56:39 +00:00
|
|
|
$tmp
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef OUT
|
|
|
|
#define OK 1
|
|
|
|
#define ALIGN 4
|
2006-02-04 01:26:49 +00:00
|
|
|
#if defined(__CYGWIN__) || defined(__DJGPP__) || (__MINGW32__)
|
2002-07-18 12:37:59 +00:00
|
|
|
#undef SIZE
|
|
|
|
#undef TYPE
|
|
|
|
#define SIZE(a,b)
|
2003-01-10 10:16:39 +00:00
|
|
|
#define TYPE(a,b) .def a; .scl 2; .type 32; .endef
|
2002-07-18 12:37:59 +00:00
|
|
|
#endif /* __CYGWIN || __DJGPP */
|
1998-12-21 10:56:39 +00:00
|
|
|
#endif
|
|
|
|
|
1999-07-06 17:28:29 +00:00
|
|
|
#if defined(BSDI) && !defined(ELF)
|
1998-12-21 10:56:39 +00:00
|
|
|
#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;
|